项目背景
前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET、微软的EF、NH等。再跟经理讨论后,经理强调不要用Ef,NH做ORM,后期的sql优化不好做,公司也没有人对EF,Nh 等orm优化比较熟悉的。强调说的,我们的项目要做的得简单,可以使用ADO.NET 写原始的sql。但我自己还是喜欢ORM的,它可以提高数据访问层的开发。有一天,在订阅张善友 doNet跨平台微信公众号里,看到Dapper的推荐。了解之后,我自己喜欢喜欢Dapper,可以满足我这个项目的经理的要求,同时Dapper 对数据库的访问能做到Ado.net一样快。
下面的链接是Dapper 在github的地址 https://github.com/StackExchange/dapper-dot-net。
使用 Dapper 进行简单增删改查示例
1、首先根据数据库表定义实体对象, 这个工作完全可以使用T4、Nvelocity或者RazorEngine 写一个代码生成器根据数据库表对象自动生成数据库表实体对象。这里我自己根据表写了一个对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
2. 在DAL层就可以使用实体对象传参 或者作为返回值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Dapper的优势
1、Dapper是一个轻型的ORM类
2、 Dapper语法简单,如果你喜欢写原始的sql,你一定喜欢Dapper。同时团队人员也很容易上手
3、Dapper 速度快,速度接近ADO.NET访问数据库的效率。
4、多数据库切换方便
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更多特性
1、支持动态dynamic绑定
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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);
2、支持批量插入
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
3、支持多表关联
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
4、支持多结果查询
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
5 支持存储过程
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
6、参数自动绑定
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 new {A = 1, B = "b"} // A will be mapped to the param @A, B to the param @B