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

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

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

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如何使用,来进行高效开发,以下操作dapper是编译后在Net4.0下操作的例子。

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

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

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

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

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

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

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

4、Dapper批量插入数据

public static void Execute()
{using (var conn = new SqlConnection(ConnString)){conn.Open();var r=conn.Execute(@"insert Person(username, password,age,registerDate,address) values (@a, @b,@c,@d,@e)",[] { new { a = 1, b = 1, c = 1, d = DateTime.Now, e = 1 }, new { a = 2, b = 2, c = 2, d = DateTime.Now, e = 2 }, new { a = 3, b = 3, c = 3, d = DateTime.Now, e = 3 } }conn.Close();});

执行上面方法会插入3条记录,这样sql可以灵活的控制,参数不用像ADO.Net那样声明每个参数,

最后还要把参数集合赋值给ADO的命令。可以看出这样简洁多了。

5、Dapper修改数据,update

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

6、Dapper删除数据

public static bool Delete()
{using (var conn = new SqlConnection(ConnString)){conn.Open();var r = conn.Execute(@"delete from Person where id=@id", new { id = 2 });conn.Close();return r > 0;}
}

7、Dapper使用事务

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

8、Dapper集合批量插入

public static int InsertMultiple<T>(string sql, IEnumerable<T> entities, string connectionName = null) where T : class, new()
{using (SqlConnection cnn = GetOpenConnection(connectionName)){int records = 0;using (var trans = cnn.BeginTransaction()){try{cnn.Execute(sql, entities, trans, 30, CommandType.Text);}catch (DataException ex){trans.Rollback();throw ex;}trans.Commit();}//foreach (T entity in entities)//{//    records += cnn.Execute(sql, entity);//}return records;}
}

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

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

疑问:

看了上面对 Dapper 的简单介绍,相信你一定跃跃欲试了 。不过笔者初识 Dapper 的时候,脑海里产生了两个疑问:第一,Dapper 查询数据库时传参使用的是一个对象,文章例子中是将这个对象当作匿名对象进行处理的,这样很方便。但是若是查询条件是可变的呢?根据不同的查询参数去查询不同的结果集,怎么做到传参可变呢?第二,增删改查 Dapper 提供的很全,但是现实业务中在插入数据时有很多地方需要得到(返回)插入数据的数据库标识,这个又该如何实现呢?笔者将在后续的博客中进行探讨。
参考资料:
  • Dapper ORM 用法
  • 轻型ORM Dapper

转载于:https://www.cnblogs.com/ice-/p/6165785.html

[.Net]轻量ORM——Dapper相关推荐

  1. Dapper.NET——轻量ORM

    Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1  一 ...

  2. Dapper.NET—轻量ORM

    Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1  一 ...

  3. SqlSugar轻量ORM

    蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSugar基 ...

  4. DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!

       DataRabbit 3.0重写了DataRabbit 2.0的ORM实现的内核,性能提升了90倍左右,结果是DataRabbit 3.0的ORM性能与直接使用ADO.NET的性能已经非常接近. ...

  5. orm jdbc_Spring Data JDBC通用DAO实现–迄今为止最轻量的ORM

    orm jdbc 我很高兴宣布Spring Data JDBC存储库项目的第一个版本. 这个开源库的目的是为基于Spring框架中 JdbcTemplate关系数据库提供通用,轻量且易于使用的DAO实 ...

  6. Spring Data JDBC通用DAO实现–迄今为止最轻量的ORM

    我很高兴宣布Spring Data JDBC存储库项目的第一个版本. 这个开放源代码库的目的是为基于Spring框架中 JdbcTemplate关系数据库提供通用,轻量且易于使用的DAO实现,与项目的 ...

  7. 轻量型互联网应用架构方式

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | 天如 链接 | http://suo.im/4qRPkj 一.前言 说到互联网应用架构,就绕不开微服务,当下(2019)最热门的微 ...

  8. 基于Vue, Vuex 和 ElementUI 构建轻量单页Hexo主题Lite

    Hexo Theme Lite Keep Calm, Lite and Writing. light single page blog application theme, using Vue, Vu ...

  9. 买个云服务器有啥用_如何用阿里云轻量应用服务器配置一个WordPress网站?

    轻量应用服务器是面向单机应用场景的新一代计算服务,提供精品应用一键部署,支持一站式的域名.网站.安全.运维.应用管理等服务,极大优化搭建简单应用的体验,降低了入门级用户使用云计算产品的门槛. 那么,我 ...

最新文章

  1. 加减法叫做什么运算_期中备考:数学运算定律、法则与顺序
  2. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第7章-保性能控制
  3. python哨兵循环_Python:deadloop之非模态交互界面(模态循环)(哨兵循环)
  4. CTAssetsPickerController 选中图片不显示对号的问题解决
  5. 02-再探MySQL数据库
  6. vnc非授权访问漏洞
  7. 查找算法:插值查找算法实现及分析
  8. 谁分配谁释放HEAP
  9. 程序员的 10 款代码表白特效,一个比一个浪漫
  10. Photoshop插件-证件照-白红蓝底-PS插件-脚本开发
  11. matlab光学原理仿真应用衍射,基于Matlab的光学衍射实验仿真
  12. 聊聊Hadoop DistCp的数据切分处理方式
  13. 5814:无根树(技巧:树的直径BFS)
  14. Day22~Day28
  15. Deepfake——深度造假视频在智能城市中的风险
  16. 超级教程推荐给大家一个方便简单操作的内网穿透软件frp穿透青龙面板
  17. 写作必备文献搜索网大全
  18. autojs悬浮窗点击穿透
  19. 顺序表类的声明java_顺序表实现解约瑟夫环_Java
  20. mysql数据库表损坏修复方法(适用虚拟主机)

热门文章

  1. nginx配置 负载均衡_如何配置NGINX负载平衡
  2. 为VS2010添加背景图
  3. ROS的学习(十)rqt_console和roslaunch
  4. Java软件开发中,常用的工具有哪些?
  5. web前端基础面试题
  6. React server rendering —— 网易美学主站同构实录
  7. js可以控制文件上传的速度吗?
  8. 南大通用发布数据库新产品 携手用户伙伴点亮世界级
  9. java数据结构和算法------第八章
  10. 【DP + 卖股票】LeetCode 714. Best Time to Buy and Sell Stock with Transaction Fee