zoukankan      html  css  js  c++  java
  • SmartSql V3 重磅发布

    超轻量级的ORM框架!107kb

    更新内容

    1. 移除Dapper依赖
    2. 支持存储过程
    3. 增强扩展性
    4. 重构代码
    5. 优化缓存策略
    6. 动态实现仓储接口
    7. 支持 参数&结果映射 & TypeHandler
    8. 高性能

    性能测评

    
    BenchmarkDotNet=v0.10.14, OS=Windows 10.0.17134
    Intel Core i7-6700K CPU 4.00GHz (Skylake), 1 CPU, 8 logical and 4 physical cores
    .NET Core SDK=2.1.201
      [Host]     : .NET Core 2.0.7 (CoreCLR 4.6.26328.01, CoreFX 4.6.26403.03), 64bit RyuJIT
      DefaultJob : .NET Core 2.0.7 (CoreCLR 4.6.26328.01, CoreFX 4.6.26403.03), 64bit RyuJIT
    
    
    
    ORM Type Method Return Mean Error StdDev Rank Gen 0 Gen 1 Gen 2 Allocated
    Native NativeBenchmarks Query_GetValue_DbNull IEnumerable`1 78.39 ms 0.8935 ms 0.7921 ms 1 3000.0000 1125.0000 500.0000 15.97 MB
    SmartSql SmartSqlBenchmarks Query IEnumerable`1 78.46 ms 0.2402 ms 0.1875 ms 1 2312.5000 1000.0000 312.5000 12.92 MB
    SmartSqlDapper SmartSqlDapperBenchmarks Query IEnumerable`1 78.65 ms 1.2094 ms 1.1312 ms 1 3687.5000 1437.5000 687.5000 19.03 MB
    Native NativeBenchmarks Query_IsDBNull_GetValue IEnumerable`1 78.84 ms 0.8984 ms 0.7502 ms 1 2312.5000 1000.0000 312.5000 12.92 MB
    Dapper DapperBenchmarks Query IEnumerable`1 79.00 ms 1.0949 ms 0.9706 ms 1 3312.5000 1312.5000 625.0000 17.19 MB
    EF EFBenchmarks Query IEnumerable`1 79.44 ms 1.6880 ms 1.5789 ms 1 6250.0000 - - 26.05 MB
    SqlSugar SqlSugarBenchmarks Query IEnumerable`1 81.09 ms 0.8718 ms 0.7728 ms 2 2187.5000 875.0000 250.0000 12.64 MB
    Chloe ChloeBenchmarks Query IEnumerable`1 83.86 ms 1.2714 ms 1.1893 ms 3 2250.0000 937.5000 312.5000 12.62 MB
    EF EFBenchmarks SqlQuery IEnumerable`1 89.11 ms 0.7562 ms 0.6314 ms 4 8187.5000 125.0000 - 33.68 MB
    EF EFBenchmarks Query_NoTracking IEnumerable`1 93.13 ms 0.8458 ms 0.7912 ms 5 5875.0000 2250.0000 1062.5000 29.71 MB
    EF EFBenchmarks SqlQuery_NoTracking IEnumerable`1 106.89 ms 1.0998 ms 1.0288 ms 6 7437.5000 2875.0000 1312.5000 37.34 MB

    安装 (NuGet)

    Install-Package SmartSql
    

    常规代码

    查询

                ISmartSqlMapper SqlMapper = MapperContainer.Instance.GetSqlMapper();
                SqlMapper.Query<T_Test>(new RequestContext
                {
                    Scope = "T_Test",
                    SqlId = "GetList",
                    Request = new { Ids = new long[] { 1, 2, 3, 4 } }
                });
    

    事务

                try
                {
                    ISmartSqlMapper SqlMapper = MapperContainer.Instance.GetSqlMapper();
                    SqlMapper.BeginTransaction();
                    //BizCode
                    SqlMapper.CommitTransaction();
                }
                catch (Exception ex)
                {
                    SqlMapper.RollbackTransaction();
                    throw ex;
                }
    

    最佳实践

    安装 SmartSql.DIExtension

    Install-Package SmartSql.DIExtension
    

    注入依赖

     services.AddSmartSql();
     services.AddRepositoryFactory();
     services.AddRepositoryFromAssembly((options) =>
     {
        options.AssemblyString = "SmartSql.Starter.Repository";
     });
    

    定义仓储接口

        /// <summary>
        /// 属性可选: [SqlMap(Scope = "User")] ,不设置 则默认 Scope 模板:I{Scope}Repository
        /// 可传入自定义模板
        /// RepositoryBuilder builder=new RepositoryBuilder("I{Scope}DAL");
        /// </summary>
        public interface IUserRepository
        {
            /// <summary>
            /// 属性可选 [Statement(Execute = ExecuteBehavior.Auto,Id = "Query")]
            /// 默认 Execute:Auto ,自动判断 执行类型
            /// 默认 Id : 方法名
            /// </summary>
            /// <param name="reqParams"></param>
            /// <returns></returns>
            IEnumerable<User> Query(object reqParams);
            long GetRecord(object reqParams);
            User Get(object reqParams);
            long Insert(User entity);
            int Update(User entity);
            int Delete(User enttiy);
        }
    

    尽情享用

        public class UserService
        {
            private readonly ISmartSqlMapper _smartSqlMapper;
            private readonly IUserRepository _userRepository;
    
            public UserService(
                 ISmartSqlMapper smartSqlMapper
                , IUserRepository userRepository)
            {
                _smartSqlMapper = smartSqlMapper;
                _userRepository = userRepository;
            }
    
            public long Add(AddRequest request)
            {
                int existsNum = _userRepository.Exists(new { request.UserName });
                if (existsNum > 0)
                {
                    throw new ArgumentException($"{nameof(request.UserName)} has already existed!");
                }
                return _userRepository.Add(new Entitiy.User
                {
                    UserName = request.UserName,
                    Password = request.Password,
                    Status = Entitiy.UserStatus.Ok,
                    CreationTime = DateTime.Now,
                });
            }
    
            public void UseTransaction()
            {
                try
                {
                    _smartSqlMapper.BeginTransaction();
                    //Biz();
                    _smartSqlMapper.CommitTransaction();
                }
                catch (Exception ex)
                {
                    _smartSqlMapper.RollbackTransaction();
                    throw ex;
                }
            }
        }
    

    文档地址

    技术交流

    点击链接加入QQ群【SmartSql 官方交流群】:604762592

  • 相关阅读:
    asp.net core 自定义401和异常显示内容(JWT认证、Cookie Base认证失败显示内容)
    asp.net core 微信APP支付(扫码支付,H5支付,公众号支付,app支付)之4
    asp.net core 支付宝支付( 电脑2.0)
    asp.net core 微信公众号支付(扫码支付,H5支付,公众号支付,app支付)之3
    asp.net core 微信获取用户openid
    asp.net core 微信H5支付(扫码支付,H5支付,公众号支付,app支付)之2
    asp.net core 微信扫码支付(扫码支付,H5支付,公众号支付,app支付)之1
    论BOM管理的若干重要问题
    BOM的编制与管理
    设计变更时,零部件的标识是变号还是升版?
  • 原文地址:https://www.cnblogs.com/Ahoo-Wang/p/SmartSql-v3.html
Copyright © 2011-2022 走看看