标签:

现在成熟的ORM比比皆是,这里只介绍Dapper的使用(最起码我在使用它,已经运用到项目中,小伙伴们反馈还可以)。

优点:

1、开源、轻量、小巧、上手容易。

2、支持的数据库还蛮多的, Mysql,SqlLite,Sqlserver,Oracle等一系列的数据库。

3、Dapper原理通过Emit反射IDataReader的序列队列来快速的得到和产生对象。性能貌似很牛逼的样子

缺点:

作为一款ORM太过于轻量级了,根据对象自动生成sql的功能还是空白,需要自己来扩展,

当然这也是优点,  好声音的导师们经常说某人就是张白纸……

因此针对Dapper已经有很多成熟的扩展项目了,Dapper.Rainbow、Dapper.Contrib,DapperExtensions。

我们这里介绍的是DapperExtensions。

dapper-dot-net源码:https://github.com/StackExchange/dapper-dot-net   (更新频率快,项目包含了各种除了Dapper-Extensions的 扩展项目)

Dapper-Extensions 源码:https://github.com/tmsmith/Dapper-Extensions

Dapper-Extensions的优点:

1、开源

2、针对Dapper封装了常用的CRUD方法,有独立的查询语法。

3、需要映射的实体类本身0配置,无需加特性什么的。是通过独立的映射类来处理,可以设置类映射到DB的别名,字段的别名等等。

Dapper-Extensions的缺点:

1、好几年没更新了

2、不支持oracle(没有oracle的方言,数据库的语法各有差异,已经搞定)

3、不能同时支持多种数据(已经搞定)

4、部分代码有些bug(发现的都搞定了)

当然上述缺点都已经搞定了。

下面先简单介绍一下Dapper的基本语法。

Dapper就一个.cs文件,可以放到项目代码中直接编译,也可以直接引用DLL文件。

Dapper对DB的操作依赖于Connection,为了支持多库,咱们用 IDbConnection conn

using (IDbConnection conn =GetConnection())

{const string query = "select * from XO order by id desc";return conn.Query(query,null);

}

下面是带参数的语法

int xoID=666; //变量主键

using (IDbConnection conn =GetConnection())

{const string query = "select * from XO where Id=@id";return conn.Query(query, new { ID = xoID});

}

各种方法都重载了事务的操作,一般的数据库操作都支持。但是没次执行都需要传递sql,而且每次都要使用Using,看着不爽啊, 这……

好吧下面简单介绍下使用Dapper-Extensions的基本语法(在Dapper-Extensions  的基础上用了Repository模式,代码效果如下)。

//实体类

DemoEntity entity = newDemoEntity();//根据实体主键删除

this.Delete(entity);//根据主键ID删除

this.Delete(1);//增加

this.Insert(entity);//更新

bool result = this.Update(entity);//根据主键返回实体

entity = this.GetById(1);//返回 行数

this.Count(new { ID = 1});//查询所有

IEnumerable list = this.GetAll();

IList sort = new List();

sort.Add(new Sort { PropertyName = "ID", Ascending = false});//条件查询

list = this.GetList(new { ID = 1, Name = "123"}, sort);//orm 拼接条件 查询

IList predList = new List();

predList.Add(Predicates.Field(p => p.Name, Operator.Like, "不知道%"));

predList.Add(Predicates.Field(p => p.ID, Operator.Eq, 1));

IPredicateGroup predGroup=Predicates.Group(GroupOperator.And, predList.ToArray());

list= this.GetList(predGroup);//分页查询

long allRowsCount = 0;this.GetPageList(1, 10, out allRowsCount, new { ID = 1 }, sort);

下班了,未完待续。

标签:

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐