博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[.Net]轻量ORM——Dapper
阅读量:4518 次
发布时间:2019-06-08

本文共 4672 字,大约阅读时间需要 15 分钟。

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

下载地址:

假如你喜欢原生的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
点击”安装“,会下载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
GetPersonList() { using (var conn = new System.Data.SqlClient.SqlConnection(ConnString)) { conn.Open(); var a = conn.Query
("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
(string sql, IEnumerable
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文件。
以上内容转载自 

疑问:

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

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

你可能感兴趣的文章
室外光缆结构
查看>>
【JZOJ3400】旅行
查看>>
第5.2次作业
查看>>
luoguP5108 仰望半月的夜空 [官方?]题解 后缀数组 / 后缀树 / 后缀自动机 + 线段树 / st表 + 二分...
查看>>
Mysql学习第一天
查看>>
031 oracle环境下的Start with...Connect By递归树查询
查看>>
深入浅出 Java Concurrency (17): 并发容器 part 2 ConcurrentMap (2)[转]
查看>>
【 HYSBZ - 2440 】完全平方数 (莫比乌斯函数容斥)
查看>>
最优矩阵链乘
查看>>
2012年软件大赛校内选拔赛
查看>>
2017 Java面试大全(一)
查看>>
PHP实现四种基本排序算法
查看>>
Poj3414广搜
查看>>
云南南天电子信息产业股份有限公司某站SQL注入漏洞
查看>>
09-C#笔记-循环
查看>>
3.20下午
查看>>
AngularJS之代码风格36条建议【一】(九)
查看>>
linux指令和文件系统
查看>>
java上传xml文件
查看>>
板邓:给网站添加favicon图标
查看>>