.net平台性能很不错的轻型ORM类Dapper

Posted By : 蓝狐
Updated On : 2016-04-22 23:16

dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快。 使用ORM的好处是增、删、改很快,不用自己写sql,因为这都是重复技术含量低的工作,还有就是程序中大量的从数据库中读数据然后创建model,并为model字段赋值。这些ORM都可以轻松给你搞定。ORM给我们开发带来便利时,性能也是一个让我们不得不考虑的问题。一般的ORM性能和直接写原生的sql比都差不少,但是Dapper性能还很错,甚至和DbHelperSQL方式性能高出很多。

下载地址:https://github.com/StackExchange/dapper-dot-net

假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ROM。

相关dapper实际项目源码下载:

基于ASP.NET MVC5和dapper的SEO关键词按天计费系统源码

dapper ASP.NET MVC5 sql文章&博客网站源码

mvc5 dapper bootstrap2通用权限后台管理系统源码

Dapper的优势:

1,Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll.
2,Dapper很快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
3,Dapper支持什么数据库。Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让它支持Mongo db
4,Dapper的r支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用。无XML无属性。代码以前怎么写现在还怎么写。
5,Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能实在高高。
6,Dapper支持net2.0,3.0,3.5,4.0。【如果想在Net2.0下使用,可以去网上找一下Net2.0下如何配置运行Net3.5即可。】
7,Dapper语法十分简单。并且无须迁就数据库的设计。

dapper的安装

在nuget里面搜索Dapper

点击“安装”,会下载Dapper.dll,并把引用添加到项目中。

下面介绍Dapper如何使用,来进行高效开发,以下操作dapper是编译后在Net4.0下操作的例子。

1、定义一个Person类对应数据库的Person表

  1. CREATE TABLE [Person](
  2. [id] [int] IDENTITY(5,1) NOT NULL primary key nonclustered,
  3. [username] [nvarchar](100) NULL,
  4. [password] [nvarchar](100) NULL,
  5. [age] [int] NULL,
  6. [registerDate] [datetime] NULL,
  7. [address] [nvarchar](150) NULL
  8. )
  1. public class Person
  2. {
  3. public int id { get; set; }
  4. public string username { get; set; }
  5. public string password { get; set; }
  6. public int age { get; set; }
  7. public DateTime registerDate { get; set; }
  8. public string address { set; get; }
  9. }

2、定义连接数据库字符串

  1. public static string ConnString = "Server=.;Database=Test1;uid=sa;pwd=sa;";

3、获取id大于2的所有Person,dapper返回类型是List类型

  1. public static List<Person> GetPersonList()
  2. {
  3. using (var conn = new System.Data.SqlClient.SqlConnection(ConnString))
  4. {
  5. conn.Open();
  6. var a = conn.Query<Person>("select * from Person where id>@id", new { id = 2 });
  7. conn.Close();
  8. return a.ToList();
  9. }
  10. }

这样返回的是List类型,可以充分利用linq的好处。

4、dapper批量插入数据

  1. public static void Execute()
  2. {
  3. using (var conn = new SqlConnection(ConnString))
  4. {
  5. conn.Open();
  6. var r=conn.Execute(@"insert Person(username, password,age,registerDate,address) values (@a, @b,@c,@d,@e)",
  7. new [] {
  8. new { a = 1, b = 1, c = 1, d = DateTime.Now, e = 1 }
  9. , new { a = 2, b = 2, c = 2, d = DateTime.Now, e = 2 }
  10. , new { a = 3, b = 3, c = 3, d = DateTime.Now, e = 3 }
  11. }
  12. conn.Close();
  13. }
  14. );

执行上面方法会插入3条记录,这样sql可以灵活的控制,参数不用像ADO.Net那样声明每个参数,最后还要把参数集合赋值给ADO的命令。可以看出这样简洁多了。

5、dapper修改数据,update

  1. public static bool Update()
  2. {
  3. using (var conn = new SqlConnection(ConnString))
  4. {
  5. conn.Open();
  6. var r = conn.Execute(@"update Person set password='www.lanhuseo.com' where username=@username", new { username = 2 });
  7. conn.Close();
  8. return r > 0;
  9. }
  10. }

6、dapper删除数据

  1. public static bool Delete()
  2. {
  3. using (var conn = new SqlConnection(ConnString))
  4. {
  5. conn.Open();
  6. var r = conn.Execute(@"delete from Person where id=@id", new { id = 2 });
  7. conn.Close();
  8. return r > 0;
  9. }
  10. }

7、dapper使用事务

  1. using (var conn = new SqlConnection(ConnString))
  2. {
  3. conn.Open();
  4. IDbTransaction trans = conn.BeginTransaction();
  5. int row = conn.Execute(@"update Person set password='www.lanhuseo.com' where id=@id", new { id = 3 }, trans, null, null);
  6. row += conn.Execute("delete from Person where id=@id", new { id = 5 }, trans, null, null);
  7. trans.Commit();
  8. }

8、dapper集合批量插入

  1. public static int InsertMultiple<T>(string sql, IEnumerable<T> entities, string connectionName = null) where T : class, new()
  2. {
  3. using (SqlConnection cnn = GetOpenConnection(connectionName))
  4. {
  5. int records = 0;
  6. using (var trans = cnn.BeginTransaction())
  7. {
  8. try
  9. {
  10. cnn.Execute(sql, entities, trans, 30, CommandType.Text);
  11. }
  12. catch (DataException ex)
  13. {
  14. trans.Rollback();
  15. throw ex;
  16. }
  17. trans.Commit();
  18. }
  19. //foreach (T entity in entities)
  20. //{
  21. // records += cnn.Execute(sql, entity);
  22. //}
  23. return records;
  24. }
  25. }

Dapper支持集合的插入,集合提交是一句直接的插入命令,所以速度会快很多。

通过上面的实例可以看到sql语句完全是我们自己控制,对于对EF和NHibernate这些自动给我们生成sql语句的这种机制不爽的同学就有福利了,我个人觉得这个Dapper和iBatis.Net机制都差不多,都是sql语句都是完全由程序员自己写,框架自身只负责数据转换成我们需要的Model相关的对象,这样程序性能得到了保证,但是也有一个不好的地方的所有的sql语句都要自己写,比如增、删、查、改,如果一个项目有上百个表,工作量也不小,还好有代码生成器把我们解放出来,例如:Codesmith。Dapper和iBatis.Net是大的区别是,Dapper更加简单和轻量,不用像iBatis.Net配置xml文件。

我自从认识了Dapper,如果项目性能要求比较高的情况下,我会首先考虑用Dapper,Dapper简单、轻量以以对sql语句的完全控制的特性,让我感觉相见恨晚。

转载于:https://www.cnblogs.com/LiZhongZhongY/p/10864132.html

.net平台性能很不错的轻型ORM类Dapper(转)相关推荐

  1. 吊打 Tomcat ,Undertow 性能很炸!!

    在 Java Web 容器的世界里,Tomcat 和 Jetty 是大名鼎鼎的.用的最多的开源项目,也是大众熟知的. 今天再介绍另外一款能和 Tomcat 媲美的神器:Undertow,据说性能方面还 ...

  2. 高端android手机,高端机型很难选择?这几款手机就很不错,你肯定有中意的

    高端机型很难选择?这几款手机就很不错,你肯定有中意的 2020-09-01 13:42:20 1点赞 1收藏 2评论 对于那些*级水准的手机来说,虽然它们距离真正的旗舰只差那么一点点,但是性能方面可不 ...

  3. 真无线降噪蓝牙耳机推荐,综合性能表现不错的降噪蓝牙耳机分享

    ​随着蓝牙耳机的发展,各种功能配置逐渐出来,降噪和音质更是大家最看重的,那么,降噪蓝牙耳机哪个好?降噪效果表现怎么样?我从网上整理出来四款综合性能还不错的降噪蓝牙耳机给到大家,不要错过了! 一.南卡A ...

  4. Deep C (and C++) by Olve Maudal and Jon Jagger— 很不错的国外技术文章

    编程是困难的,正确的使用C/C++编程尤其困难.确实,不管是C还是C++,很难看到那种良好定义并且编写规范的代码.为什么专业的程序员写出这样的代码?因为绝大部分程序员都没有深刻的理解他们所使用的语言. ...

  5. 2022年搭载国产芯片的手机推荐 这3款性能就不错

    随着近几年芯片热潮的出现,很多厂商都开始自研芯片,而国内国产芯片的数量也很多,下面就为大家推荐3款搭载国产芯片的手机,性能都不错哦. 2022年搭载国产芯片的手机推荐 这3款性能就不错 1.中兴 V2 ...

  6. 阿里的推荐算法竞赛的宣传稿写得很不错,很生动,吸引眼球

    阿里的推荐算法竞赛的宣传稿写得很不错,很生动,吸引眼球.贴在这里,以后可以借鉴 ------------------------------------------------------------ ...

  7. Python推荐几个很不错的学习资源

    Python一直被赞誉为最容易学的编程语言.今天为大家推荐几个很不错的学习资源,希望大家喜欢~( *︾▽︾) Python for Beginners 如果你的Python开发之旅有一段时间了,这门课 ...

  8. 推荐一个很不错的刷题网站

    分享 小伙伴们,还在为学习编程语言找不到好的练习题而苦恼吗?今天小菜分享一个刷题网站:https://www.codewars.com/dashboard.这个网站和力扣不同的是,这真的是适合人类的网 ...

  9. 电力巡检智能管控主站平台性能优化(一):数据采集及用户行为分析

    前言 电力巡检智能管控主站平台是我们团队做的最成功的信息化平台.目前,该平台已经在某省全面推广使用,主要减轻一线巡检人员的巡检压力,增加无人机电力巡检的力度.但是随着使用平台用户数量的急剧增大,业务平 ...

最新文章

  1. SaaS到底是什么,如何做?这份笔记讲明白了
  2. 好雨云帮近期问答集锦(1.16~2.5)
  3. 打造最舒适的webview调试环境
  4. 计时装饰器python_使用python装饰器制作计时函数
  5. 【Linux】Linux 守护进程的启动方法
  6. 在MAC上.sh command not found?
  7. 巢湖计算机教师郭婷婷,黄麓师范学校继续教育中心成功举办“巢湖市2019年新任幼儿园教师岗前集中培训班”...
  8. 微博批量发布,微博定时发布,批量删除,批量评论等功能的实现
  9. 新零售做好客流数据分析才是提升线下商场、购物中心人流量的方向
  10. html5网页构成要素有哪些,网页界面的构成要素
  11. python可以做微信小游戏吗_python可以写微信小游戏吗
  12. Geth私链的多节点运行
  13. 1.2 神经网络的介绍
  14. 知己知彼才能成功拿下职场offer!
  15. a烟台计算机哪个学校好,烟台多所学校有新消息,家长速看!
  16. java计算机毕业设计医院远程诊断系统源代码+系统+数据库+lw文档
  17. 蓝牙版本应该如何选择
  18. 华图砖题库php文件怎么打印,可打印的题库
  19. 大学四年看了这18般书籍,我成了别人眼中的程序员大神!
  20. JDK的下载、安装与部署图文教程

热门文章

  1. 两个月番茄组长的收获总结
  2. Python xrange() 函数
  3. MLIR: 编译器基础架构重定义
  4. BEP 7:CUDA外部内存管理插件(上)
  5. 大规模数据处理Apache Spark开发
  6. 空间点像素索引(二)
  7. 自动驾驶行业内时间表和技术解析
  8. ViewGroup的Touch事件分发(源码分析)
  9. Cocos 物理系统
  10. colorAccent,colorPrimary,colorPrimaryDark 作用的地方