当前位置: 移动技术网 > IT编程>开发语言>.net > MyDAL - 简介&安装&快速使用

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

2018年10月23日  | 移动技术网IT编程  | 我要评论

海沧租房,粉刺针怎么用,刘玉璞

索引:

一.简介

 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=xxxxx; pwd=yyyyyyy;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 周一

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网