什么是Dapper
Dapper是一个简单的.NET对象映射器,在速度方面具有"King of Micro ORM"的头衔,几乎与使用原始的ADO.NET数据读取器一样快。ORM是一个对象关系映射器,它负责数据库和编程语言之间的映射。Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询您的数据库。
Dapper是如何工作的
它可以分为三个步骤:
- 创建一个IDbConnection接口对象;
- 编写一个查询SQL来执行CRUD操作;
- 将查询SQL作为Execute方法的参数传递;
为什么选择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 的主要特点是性能。以下数据显示对一个数据库执行 SELECT 出 500 条,并把数据映射到对象中需要多长时间。
性能测试分为三个方面:
- POCO 序列化框架,支持从数据库获得静态类型的对象。使用原始的 SQL。
- 动态序列化框架,支持返回对象的动态列表。
- 典型的框架用法。往往不会涉及编写 SQL。
1. Performance of SELECT mapping over 500 iterations - POCO 序列化
方法 |
持续时间(毫秒) |
备注 |
Hand coded (using a SqlDataReader) |
47 |
Can be faster |
Dapper ExecuteMapperQuery |
49 |
同上 |
ServiceStack.OrmLite (QueryById) |
50 |
同上 |
PetaPoco |
52 |
同上 |
BLToolkit |
80 |
同上 |
SubSonic CodingHorror |
107 |
同上 |
NHibernate SQL |
104 |
同上 |
Linq 2 SQL ExecuteQuery |
181 |
同上 |
Entity framework ExecuteStoreQuery |
631 |
同上 |
2. Performance of SELECT mapping over 500 iterations - dynamic 序列化
方法 |
持续时间(毫秒) |
备注 |
Dapper ExecuteMapperQuery (dynamic) |
48 |
|
Massive |
52 |
|
Simple.Data |
95 |
|
3. Performance of SELECT mapping over 500 iterations - 典型用法
方法 |
持续时间(毫秒) |
备注 |
Linq 2 SQL CompiledQuery |
81 |
Not super typical involves complex code |
NHibernate HQL |
118 |
|
Linq 2 SQL |
559 |
|
Entity framework |
859 |
|
SubSonic ActiveRecord.SingleOrDefault |
3619 |
|
方法
Dapper会用以下几个方法扩展您的IDbConnection接口:
- Execute
- Query
- QueryFirst
- QueryFirstOrDefault
- QuerySingle
- QuerySingleOrDefault
- QueryMultiple
参数
执行和查询方法可以用以下几种不同的方式使用参数:
- 匿名类型
- 动态类型
- 列表类型
- 字符串类型
结果
查询方法返回的结果可以映射到以下几种类型:
- 匿名类型
- 强类型
- 多映射
- 多结果
- 多类型
工具
- 异步
- 缓冲
- 事务
- 存储过程