
正文
让你的Dapper像EF一样调用 开源~!
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
什么是Dapper?
Dapper是一款轻量级的ORM框架,大名鼎鼎! 由谷歌Google 开发,在N款orm框架中 效率是最快的 最高的! 经过数据测试 比EF快 12-20 倍
国外最大的技术网站 stackoverflow 也是基于这个Orm框架开发的,并且非常简单。
为什么使用Dapper?
- 轻量。只有一个文件(SqlMapper.cs),编译完成之后只有120k(好象是变胖了)
- 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
- 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
- 可以映射一对一,一对多,多对多等多种关系。
- 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
- 支持FrameWork2.0,3.0,3.5,4.0,4.5
正文
对Dapper做了简单介绍, 有关Dapper优点的文章网上一大堆, 这里小编就不再赘述啦! 进入正题 相信很多园友的公司都使用过微软的EF框架吧?
EF的优点太多了 “CodeFist代码优先”、" 不需要为数据访问编写所有需要的ADO.NET管道代码"、"使用C#代码来编写所有的数据访问逻辑而不是编写SQL查询和存储过程"等等....
但是最大的缺点就是过于臃肿 庞大 性能不咋地!很多公司都放弃采用这个框架选择使用自己封装的SqlHelper类或其它第三方orm框架
但是由于被EF惯坏了 让小弟觉得其它的ORM框架都没EF便捷 快速 于是小弟想能不能把现今最流行的Dapper改成类似EF的调用模式! 所以这篇博客出来了!
先看几个例子
操作数据表的数据
--------------------------例子(一)------------------------
//Dapper原生 根据Id获取数据 string query = "SELECT * FROM Book WHERE id = @id"; book = conn.Query<Book>(query, new { id = id }).SingleOrDefault(); //经过小弟Dapper改装后 ;//根据Id查询数据 T_Example entity=_repExample.GetById(id);
--------------------------例子(二)----------------------------
//Dapper原生 获取数据表总项数 var count= conn.ExecuteScalar<int>("SELECT COUNT(*) FROM customers Where Type=A"); //经过小弟Dapper改装后 //获取数据表总数 var count01= _repExample.GetCount(); //不带条件 && item.CreateTime<,,));//带条件
-------------------------例子(三)-------------------------------------
//Dapper原生获取第一条数据var entity= _Conn.QueryFirst<T_Example>("Select* from T_Example where Name==啊爆g");
//经过小弟Dapper改装后var entity = _repExample.GetFist(item => item.Name == "啊爆g");//使用lambda式
-------------------------------例子(四)---------------------------------------//Dapper原生检查数据是否存在var count= conn.ExecuteScalar<int>("SELECT COUNT(*) FROM customers Where Type=A");; //通过判断count是否大于0//经过小弟Dapper改装后");
数据的 增删改 操作
---------------------------例子(一)-------------------------------------------
//dapper原生Insert插入数据 Book book = new Book(); book.Name="C#本质论"; string query = "INSERT INTO Book(Name)VALUES(@name)";//对对象进行操作 conn.Execute(query, book);//直接赋值操作 conn.Execute(query, new {name = "C#本质论"});
//经过小弟Dapper改装后
T_Example item= _repExample.Insert(entity);//单挑插入bool succ= _repExample.Insert(entityList);//批量插入 内置事物操作 失败其中一条错误 全部回滚
--------------------------例子(二)-------------------------------------------
//daper原生Update更新数据 string query = "UPDATE Book SET Name=@name WHERE id =@id"; conn.Execute(query, book);//经过小弟Dapper改装后
var entity = new T_Example() ; T_Example item= _repExample.Update(entity);//单条模型更新 bool succ= _repExample.Update(entityList);//批量更新 内置事物操作 失败其中一条错误 全部回滚 });//部分字段更新
------------------------------例子(三)--------------------------------------------
//dapper原生Delete删除数据string query = "DELETE FROM Book WHERE id = @id";conn.Execute(query, book);conn.Execute(query, new { id = id });//经过小弟Dapper改装后var entity = new T_Example() ;T_Example item= _repExample.Delete(id);//删除数据 单条bool succ= _repExample.Delete(IEnumerable<object> ids);//批量删除 内置事物操作 失败其中一条错误 全部回滚
数据查询操作实例
//dapper原生查询string query = "SELECT * FROM Book Where Name Like %C#%";//无参数查询,返回列表,带参数查询和之前的参数赋值法相同。conn.Query<Book>(query).ToList();//经过小弟改装后
_repExample.GetAll();//获取数据表所有数据 _repExample.GetAll(new { Name = true });//字段排序true 升序 false降序//根据条件获取数据 _repExample.GetTableData(item => item.Age > && item.Name.Contains("C#%")); //开头模糊查询 _repExample.GetTableData(item => item.Age > && item.Name.Contains("%深入理解C#%"));//包含模糊查询 _repExample.GetTableData(item => item.Age > && item.Name.Contains("%Join Skeet"));//结尾模糊查询 //分页查询 long pageTotal;//输出当前表总项数 _repExample.GetPageData(, , out pageTotal); _repExample.GetPageData(, , );//根据条件分页 //获取视图数据 _repExample.QueryView<ExampleBusinessModel>("View_视图名称"); _repExample.QuerySql<T_Example>("select Name,Age,Phone from T_Example");//执行原生Sql
多表事物操作实例
//dapper的事物处理就不贴出代码了//只贴小弟Dapper改装过后的代码 var succ=_repExample.Submit(tran => { //在这里执行你具体的事物操作 _repExample.InsertTran(new T_Example(),tran);//A表插入一条数据 _repLog.DeleteTran(id, tran); //再删除B表的数据 });
还有很多封装方法 小弟还来没有时间扩展 现在小弟把代码开源 你可以根据自己的需求进行扩展
虽然小弟只有3年半 编程经验 但是自认为代码还是写的规范 源码都有注释 很容易懂 有什么意见欢迎质询小弟 小弟QQ407015811








