项目背景mysql
前一段时间,开始作一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET、微软的EF、NH等。再跟经理讨论后,经理强调不要用Ef,NH作ORM,后期的sql优化很差作,公司也没有人对EF,Nh 等orm优化比较熟悉的。强调说的,咱们的项目要作的得简单,可使用ADO.NET 写原始的sql。但我本身仍是喜欢ORM的,它能够提升数据访问层的开发。有一天,在订阅张善友 doNet跨平台微信公众号里,看到Dapper的推荐。了解以后,我本身喜欢喜欢Dapper,能够知足我这个项目的经理的要求,同时Dapper 对数据库的访问能作到Ado.net同样快。git
下面的连接是Dapper 在github的地址 https://github.com/StackExchange/dapper-dot-net。github
使用 Dapper 进行简单增删改查示例sql
一、首先根据数据库表定义实体对象, 这个工做彻底可使用T四、Nvelocity或者RazorEngine 写一个代码生成器根据数据库表对象自动生成数据库表实体对象。这里我本身根据表写了一个对象数据库
2. 在DAL层就可使用实体对象传参 或者做为返回值微信
Dapper的优点app
一、Dapper是一个轻型的ORM类ide
二、 Dapper语法简单,若是你喜欢写原始的sql,你必定喜欢Dapper。同时团队人员也很容易上手优化
三、Dapper 速度快,速度接近ADO.NET访问数据库的效率。spa
四、多数据库切换方便
public int UpdateUserRoleByRoleId(UserRoleDbEntity model)
{
int affecgtRow = 0;
string sql = @"UPDATE `userrole`
SET `AuthorityValue` = @AuthorityValue,
`AuthorityDescription` = @AuthorityDescription
WHERE `RoleId` = @RoleId;";
using (IDbConnection conn = new MySqlConnection(GlobalVariablesManager.G_Strconn))
{
affecgtRow = conn.Execute(sql, model);
}
return affecgtRow;
}
这里mysql若是要切换为Sql Server ,只要修改连接 MySqlConnection---》SqlConnection。
Dapper更多特性
一、支持动态dynamic绑定
1 var rows = connection.Query("select 1 A, 2 B union all select 3, 4"); 2 3 ((int)rows[0].A) 4 .IsEqualTo(1); 5 6 ((int)rows[0].B) 7 .IsEqualTo(2); 8 9 ((int)rows[1].A) 10 .IsEqualTo(3); 11 12 ((int)rows[1].B) 13 .IsEqualTo(4);
二、支持批量插入
三、支持多表关联
四、支持多结果查询
5 支持存储过程
六、参数自动绑定
1 new {A = 1, B = "b"} // A will be mapped to the param @A, B to the param @B