MyDAL - 简介&安装&快速使用

索引:

商业开发实战总结

一.简介

 1.适用范围:

  MyDAL.dll 目前编译目标是 .Net Standard 2.0.3 ,可以在以下工程项目中引用并使用:

    .Net Framework 4.6.1 及 next version.

    .Net Core 2.0 及 next version.

    Mono 5.4 及 next version.

    Xamarin.ios 10.14 及 next version.

    Xamarin.Mac 3.8 及 next version.

    Xamarin.Android 8.0 及 next version.

    UWP 10.0.16299 及 next version.

  由于 .Net Standard 的跨平台开发特性,你可以在一下操作系统中部署及运行:

    Windows 7 SP1 x64, x86 及 next version.

    Windows 10 x64, x86 及 next version.

    Windows Server 2008 R2 SP1+ x64, x86 及 next version.

    Redhat Linux 7.3+ (包含 Cent OS Linux) x64 及 next version.

    Fedora Linux 25+ x64 及 next version.

    Debian Linux 8.7+ (包含 DeepIn Linux) x64 及 next version.

    Ubuntu Linux 14.04+ x64, arm32[社区版] 及 next version.

    OpenSUSE Linux 42.2+ x64 及 next version.

    Tizen Linux 4+ arm32[三星版] 及 next version.

    Mac OS X 10.12+ x64 及 next version.

 2.功能特性简介:

  底层代码采用 System.Reflection.Emit.Lightweight 类库使用 IL 的方式处理 Model 组装,性能刚刚的~

  语法采用 System.Linq.Expressions 方式,强类型,对程序员编码非常友好~

  由于本人精通 Java MyBatis ,所以缓存及数据关联由此借鉴而来~

  由于本人精通 Ctrip Dal ,所以 Code First 及 DB First 由此借鉴而来~

二.安装

  在 VS 中执行一下 package 命令:  

1 PM> Install-Package MyDAL

三.快速使用

  1.命名空间,只需:

1 using MyDAL;

  2.准备好一个 IDbConnection 对象,目前只支持 MySQL,后续会支持 SQL Server / Oracle / Postgre SQL ... 等等:

 1         private static IDbConnection GetOpenConnection(string name)
 2         {
 3             /*
 4              * 
 5             */
 6             var conn =
 7                 new MySqlConnection($"Server=localhost; Database={name}; Uid=SkyUser; Pwd=Sky@4321;SslMode=none;")
 8                 .OpenDebug()  // 全局 debug 配置, 生产环境不要开启 
 9                 .OpenDB();  // 建议 每次新实例并打开,以获得更好的性能体验
10             return conn;
11         }
12 
13         protected IDbConnection Conn
14         {
15             /*
16              * CREATE DATABASE `EasyDal_Exchange`;
17              */
18             get { return GetOpenConnection("EasyDal_Exchange"); }
19         }

  3.新增一条数据:

 1             var m1 = new BodyFitRecord
 2             {
 3                 Id = Guid.Parse("1fbd8a41-c75b-45c0-9186-016544284e2e"),
 4                 CreatedOn = DateTime.Now,
 5                 UserId = Guid.NewGuid(),
 6                 BodyMeasureProperty = "{xxx:yyy,mmm:nnn}"
 7             };
 8 
 9             // 新建
10             var res1 = await Conn
11                 .Creater<BodyFitRecord>()
12                 .CreateAsync(m1);
13             Assert.True(res1 == 1);
14 
15             var tuple1 = (XDebug.SQL, XDebug.Parameters,XDebug.SqlWithParams);

    在 XDebug.SQL 中你可以看到生成的带参数化的 sql 语句~

    在 XDebug.Parameters 中可以看到 参数名 及 参数名对应的参数值~

    在 XDebug.SqlWithParams 中可以看到 ... ,其实就是懒人模式,直接 copy 就可以在 db 中执行了~

   4.删除一条数据:

1             var Id = Guid.Parse("1fbd8a41-c75b-45c0-9186-016544284e2e");
2 
3             var res = await Conn
4                 .Deleter<BodyFitRecord>()
5                 .Where(it => it.Id == Id)
6                 .DeleteAsync();

  5.修改一条数据:

1             var res1 = await Conn
2                 .Updater<BodyFitRecord>()
3                 .Set(it => it.CreatedOn, DateTime.Now)
4                 .Set(it => it.BodyMeasureProperty, "{xxx:yyy,mmm:nnn,zzz:aaa}")
5                 .Where(it => it.Id == m.Id)
6                 .UpdateAsync();

  6.查询一条数据:

1             var res1 = await Conn
2                 .Selecter<BodyFitRecord>()
3                 .Where(it => it.Id == Guid.Parse("1fbd8a41-c75b-45c0-9186-016544284e2e"))
4                 .QueryFirstOrDefaultAsync();

  7.连接查询一组数据:     

 1             var res4 = await Conn
 2                 .Joiner<AspnetUsers, AspnetUserRoles, AspnetRoles>(out var user4, out var userRole4, out var role4)
 3                 .From(() => user4)
 4                     .InnerJoin(() => userRole4)
 5                         .On(() => user4.Id == userRole4.UserId)
 6                     .InnerJoin(() => role4)
 7                         .On(() => userRole4.RoleId == role4.Id)
 8                 .OrderBy(() => user4.UserName)
 9                     .ThenOrderBy(() => user4.AgentLevel, OrderByEnum.Asc)
10                 .QueryListAsync<AspnetUsers>();            

    这个连接查询 产生的 sql 如下,是的你没看错,跟你手写 sql 是一模一样的:

1  select user4.`*`  
2  from  `AspNetUsers` as user4  
3        inner join  `AspNetUserRoles` as userRole4   on  user4.`Id`=userRole4.`UserId`  
4        inner join  `AspNetRoles` as role4   on  userRole4.`RoleId`=role4.`Id`    
5  order by  user4.`UserName`  desc  , user4.`AgentLevel`  asc   ; 

  8.与表对应的 Model 如下:    

    /*
     * CREATE TABLE `bodyfitrecord` (
     * `Id` char(36) NOT NULL,
     * `CreatedOn` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
     * `UserId` char(36) NOT NULL,
     * `BodyMeasureProperty` longtext,
     * PRIMARY KEY (`Id`)
     * ) ENGINE=InnoDB DEFAULT CHARSET=utf8
     */

    [XTable("BodyFitRecord")]
    public class BodyFitRecord
    {
        public Guid Id { get; set; }
        public DateTime CreatedOn { get; set; }
        public Guid UserId { get; set; }
        public string BodyMeasureProperty { get; set; }
    }

    或者使用 .Net 内置的 TableAttribute 也可以:

 1     /*
 2      * CREATE TABLE `bodyfitrecord` (
 3      * `Id` char(36) NOT NULL,
 4      * `CreatedOn` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
 5      * `UserId` char(36) NOT NULL,
 6      * `BodyMeasureProperty` longtext,
 7      * PRIMARY KEY (`Id`)
 8      * ) ENGINE=InnoDB DEFAULT CHARSET=utf8
 9      */
10 
11     [Table("BodyFitRecord")]
12     public class BodyFitRecord
13     {
14         public Guid Id { get; set; }
15         public DateTime CreatedOn { get; set; }
16         public Guid UserId { get; set; }
17         public string BodyMeasureProperty { get; set; }
18     }

如果你喜欢这个平台框架,别为了在 Github 上给点个 Star(星) 啊~~

                                         蒙

                                    2018-10-22 18:30 周一

猜你喜欢

转载自www.cnblogs.com/Meng-NET/p/9831746.html