给力分享新的ORM => Dapper( 转)
出处:http://www.cnblogs.com/sunjie9606/archive/2011/09/16/2178897.html
最近一直很痛苦,想选一个好点的ORM来做项目,实在没遇到好的。昨天忽然的看到Dapper,立刻迷恋上了。这个ORM实在太强大了,可惜资料少的可怜。就发点资料来介绍吧。官方资料点击这里
Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件。文件见下。编译后就40K的一个很小的Dll.(估计其他的ORM要哭了。)
Dapper很快,有多快。实验下就知道了。官方给了点测试包,想玩的时候就去测试下。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。(更多的ORM泪奔了,好多ORM弱爆了。)
Dapper支持什么数据库。Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让它支持Mongo db.(有的ORM泪奔了)
Dapper的r支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用。无XML无属性。代码以前怎么写现在还怎么写。(更更更更多的ORM泪奔了,看到其他的ORM又是XML又是属性,Map来Map去,设计来设计去,缓存来缓存去,然后还是那么的慢。)
Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能实在高高高。(更更更更更更更多的ORM泪奔了)
Dapper支持net2.0,3.0,3.5,4.0。不过就是要配置下。如果不知道如何配置查看我博客里的在2.0下使用3.5就可以了。(更更更更更更更更更更更多的ORM泪奔了)
Dapper的语法是这样的。语法十分简单。并且无须迁就数据库的设计。(我X,无敌了)
public static readonly string sqlconnectionString = "Data Source=xxx;Initial Catalog=Express;User ID=sa;Password=123"; |
public static readonly string mysqlconnectionString = @"server=xxx;database=dddd;uid=xxx;pwd=123;charset='gbk'"; |
public static SqlConnection SqlConnection() |
{ |
var connection = new SqlConnection(sqlconnectionString); |
connection.Open(); |
return connection; |
} |
public static MySqlConnection MySqlConnection() |
{ |
var connection = new MySqlConnection(mysqlconnectionString); |
connection.Open(); |
return connection; |
} |
调用方法
SqlConnection connection = Program.SqlConnection(); |
for (int i = 0; i < 100000; i++) |
{ |
//connection.Execute("INSERT INTO dog (Age,Name,Weight) VALUES (@age,@name,@Weight)", |
// new { @age = i,@name = Guid.NewGuid().ToString(), @Weight = i }); |
} |
var d = connection.Query<Dog>("select * from dog where id = 1", null).Single<Dog>(); |
var dd = connection.Query<Dog>("select * from dog where id < 10", null).ToList<Dog>(); |
试用感觉
30W条数据,取其中的一个对象,和第一页前15条数据,耗时0.0906879秒。这个速度超过Datable。
官方的测试代码以及数据
Performance of SELECT mapping over 500 iterations - POCO serialization
| Method | Duration | Remarks |
| Hand coded (using a SqlDataReader) | 47ms | |
| Dapper ExecuteMapperQuery<Post> | 49ms | |
| PetaPoco | 52ms | Can be faster |
| BLToolkit | 80ms | |
| SubSonic CodingHorror | 107ms | |
| NHibernate SQL | 104ms | |
| Linq 2 SQL ExecuteQuery | 181ms | |
| Entity framework ExecuteStoreQuery | 631ms |
Performance of SELECT mapping over 500 iterations - dynamic serialization
| Method | Duration | Remarks |
| Dapper ExecuteMapperQuery (dynamic) | 48ms | |
| Massive | 52ms | |
| Simple.Data | 95ms |
Performance of SELECT mapping over 500 iterations - typical usage
| Method | Duration | Remarks |
| Linq 2 SQL CompiledQuery | 81ms | Not super typical involves complex code |
| NHibernate HQL | 118ms | |
| Linq 2 SQL | 559ms | |
| Entity framework | 859ms | |
| SubSonic ActiveRecord.SingleOrDefault | 3619ms |
Performance benchmarks are available here: http://code.google.com/p/dapper-dot-net/source/browse/Tests/PerformanceTests.cs , Feel free to submit patches that include other ORMs - when running benchmarks, be sure to compile in Release and not attach a debugger (ctrl F5)
内存控制 非常好。
结论不管你用不用,我反正是用它了。
我编译好了一份发上来了。点击下载。代码如下有点长
给力分享新的ORM => Dapper( 转)的更多相关文章
- 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】
前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...
- 使用轻量级ORM Dapper进行增删改查
项目背景 前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET.微软的EF.NH等.再跟经理讨论后,经理强调不要用Ef,NH做ORM,后期的sql优化不好做,公司 ...
- 打造Orm经典,创CRUD新时代,Orm的反攻战
让我们开启数据库无Linq.零sql时代(续) 第一部分 MQL qq群:225656797 demo下载: 点此下载(既然下载,就支持该文,关注我的博客) Moon.Orm 5.0 (MQL版) 版 ...
- Dapper试用
以下代码摘自imfunny的<给力分享新的ORM => Dapper> http://www.cnblogs.com/imfunny/archive/2011/09/16/21788 ...
- [ASP.Net] 20141228_Dapper文章搜集
DbHelperSQL和Dapper数据访问的性能对比 给力分享新的ORM => Dapper 分享一个轻型ORM--Dapper选用理由
- 轻型ORM--Dapper
分享一个轻型ORM--Dapper选用理由 推荐理由:Dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快:) Google Code下载地址 ...
- Mego(03) - ORM框架的新选择
前言 从之前的两遍文章可以看出ORM的现状. Mego(01) - NET中主流ORM框架性能对比 Mego(02) - NET主流ORM框架分析 首先我们先谈下一个我们希望的ORM框架是什么样子的: ...
- Nearby Service新特性:Wi-Fi分享
PART 1: Wi-Fi分享功能介绍 朋友来家里做客.顾客到店里用餐-当他们想要给自己的手机链接Wi-Fi时,总免不了询问Wi-Fi名称和密码..这种问密码和给密码的过程十分麻烦,常常还会有听错或者 ...
- Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记
0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...
随机推荐
- 自定义redis session
1.思路 2.程序实现 1.用户系统类 这里模拟一个蹩脚的用户系统类(userSystem),如下: #coding=utf-8 #Redis实现用户系统 __author__ = 'beginman ...
- 详解hdparm: linux下的硬盘测速工具
hdparm的功能:显示与设定硬盘的参数.hdparm可检测,显示与设定IDE或SCSI硬盘的参数. 语法: hdparm [-CfghiIqtTvyYZ][-a <快取分区>][-A & ...
- 【转】嵌入式Linux文件系统启动脚本及分析
原文网址:http://www.linuxidc.com/Linux/2011-03/33728.htm 在内核初始化完成后,嵌入式linux 文件系统的启动过程主要包含以下几个步骤: 1. 执行/s ...
- emacs之配置7,tabbar插件
emacsConfig/tabbar-setting.el (require 'tabbar) (tabbar-mode ) (global-set-key (kbd "<M-up&g ...
- shred_linux_unix
Sometimes you need to destroy or wipe data from hard drives (for example, before you sell your old h ...
- 控件m
窗体的事件:删除事件:先将事件页面里面的挂好的事件删除,再删后台代码里面的事件 Panel是一个容器 1.Label -- 文本显示工具Text:显示的文字取值.赋值:lable1.Text 2.Te ...
- mysql connection phase(未整理)
14.2.1 初始握手初始握手从服务器发送 Initial_Handshake_Packet开始.在这之后,客户端可以选择是否通过SSL_Connection_Request_Packet发送SSL连 ...
- [转][Java]简单标签库简介
public class SimpleTagDemo extends SimpleTagSupport { @Override public void doTag() throws JspExcept ...
- PackedSyncPtr
folly/PackedSyncPtr.h A highly specialized data structure consisting of a pointer, a 1-bit spin lock ...
- Quest.Central.for.DB2.v5.0.2.4下载地址
http://pan.baidu.com/s/1h5vgl 激活码 2-95710-02204-91891-68750yhason