转自:https://blog.csdn.net/hanjun0612/article/details/52170204

Dapper简单介绍:

Dapper is a single file you can drop in to your project that will extend your IDbConnection interface.

Dapper是一个轻型的开源ORM类,代码就一个SqlMapper.cs文件,编译后就40多K的一个很小的Dll. 官方资料:点击这里

Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让它支持Mongo db

Dapper的r支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用。无XML无属性。代码以前怎么写现在还怎么写。

Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。性能提升了很多;(比采用常规的反射)

Dapper支持net2.0,3.0,3.5,4.0。不过就是要配置下。如果不知道如何配置查看我博客里的在2.0下使用3.5就可以了。

语法十分简单。并且无须迁就数据库的设计。

Dapper执行效率:

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

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

Dapper使用介绍:

如果你使用的是vs2012,可以使用NuGet来进行安装,会自动添加引用,使用时写入命名空间即可;

using Dapper;

下面的代码可以作为使用参考:

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();

获得一个实体对象

var d = connection.Query("select * from dog where id = 1",null).Single();

获得实体对象结合

var dd = connection.Query("select * from dog where id < 10", null).ToList();

插入数据

//动态参数

connection.Execute("INSERT INTO dog (Age,Name,Weight) VALUES (@age,@name,@Weight)",

new { @age = i,@name = Guid.NewGuid().ToString(), @Weight = i });

//直接传入实体

connection.Execute("INSERT INTO dog (Age,Name,Weight) VALUES (@age,@name,@Weight)",model);

Execute a query and map the results to a strongly typed List

Note: all extension methods assume the connection is already open, they will fail if the connection is closed.

public static IEnumerable Query(this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)

Example usage:

publicclassDog

{

publicint?Age{get;set;}

publicGuidId{get;set;}

publicstringName{get;set;}

publicfloat?Weight{get;set;}

publicintIgnoredProperty{get{return1;}}

}

var guid =Guid.NewGuid();

var dog = connection.Query("select Age = @Age, Id = @Id",new{Age=(int?)null,Id= guid });

dog.Count()

.IsEqualTo(1);

dog.First().Age

.IsNull();

dog.First().Id

.IsEqualTo(guid);

Execute a query and map it to a list of dynamic objects

public static IEnumerable Query (this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null, bool buffered = true)

This method will execute SQL and return a dynamic list.

Example usage:

var rows = connection.Query("select 1 A, 2 B union all select 3, 4");

((int)rows[0].A)

.IsEqualTo(1);

((int)rows[0].B)

.IsEqualTo(2);

((int)rows[1].A)

.IsEqualTo(3);

((int)rows[1].B)

.IsEqualTo(4);

Execute a Command that returns no results

public static int Execute(this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null)

Example usage:

connection.Execute(@"

set nocount on

create table #t(i int)

set nocount off

insert #t

select @a a union all select @b

set nocount on

drop table #t",new{a=1, b=2})

.IsEqualTo(2);

Execute a Command multiple times

The same signature also allows you to conveniently and efficiently execute a command multiple times (for example to bulk-load data)

Example usage:

connection.Execute(@"insert MyTable(colA, colB) values (@a, @b)",

new[]{new{ a=1, b=1},new{ a=2, b=2},new{ a=3, b=3}}

).IsEqualTo(3);// 3 rows inserted: "1,1", "2,2" and "3,3"

This works for any parameter that implements IEnumerable for some T.

var dd = connection.Query("select * from dog where id < 10",null).ToList();

bltoolkit mysql_.NET 轻量级 ORM 框架 - Dapper 介绍相关推荐

  1. .NET轻量级ORM框架Dapper入门精通

    一.课程介绍 本次分享课程包含两个部分<.NET轻量级ORM框架Dapper修炼手册>和<.NET轻量级ORM框架Dapper葵花宝典>,阿笨将带领大家一起领略轻量级ORM框架 ...

  2. 轻量级ORM框架Dapper应用三:使用Dapper实现In操作

    IN 操作符允许我们在 WHERE 子句中规定多个值. 本篇文章中,还是使用和上篇文章中同样的实体类和数据库,Dapper使用in操作符的代码如下: 1 using System; 2 using S ...

  3. 轻量级ORM框架Dapper应用四:使用Dapper返回多个结果集

    使用Dapper的QueryMultiple方法可以一次执行多条SQL语句,返回多个结果集,代码如下 1 using System; 2 using System.Collections.Generi ...

  4. 轻量级ORM框架Dapper应用二:使用Dapper实现CURD操作

    在上一篇文章中,讲解了如何安装Dapper,这篇文章中将会讲解如何使用Dapper使用CURD操作. 例子中使用到的实体类定义如下: 1 using System; 2 using System.Co ...

  5. c# 轻量级ORM框架 实现(一)

    c# 轻量级ORM框架 实现(一) 2018年09月04日 14:11:02 IT哈 阅读数:1245 发布一个自己写的一个轻量级ORM框架,本框架设计期初基于三层架构.所以从命名上来看,了解三层的朋 ...

  6. 轻量级ORM框架 Bankinate

    [前言] 前面讲过ORM的前世今生,对ORM框架不了解的朋友可以参考博文:https://www.cnblogs.com/7tiny/p/9551754.html 今天,我们主要通过设计一款轻量级的O ...

  7. 重磅开源:基于.NET 6.0 自研轻量级ORM框架

    Fast Framework 项目:https://gitee.com/China-Mr-zhong/Fast.Framework 一.前言 1.为了实现快速开发,省去编写大量Sql时间,更好的面向对 ...

  8. 轻量级ORM框架 【Dapper】 的使用

    ORM是什么? 从字面理解,O是Object,对象:R是Relation,关系:M是Mapping,映射.所以,用一句话概括就是:ORM是一种对象关系映射的技术. Dapper 是.NET下的一种OR ...

  9. Python的轻量级ORM框架peewee

    作者:小小明 在前面的<改变python对象的黑魔法metaclass>一文中,我介绍了使用metaclass自己编写ORM框架的思路. 地址:https://blog.csdn.net/ ...

最新文章

  1. 《MyBatis技术原理与实战》之动态SQL
  2. ElasticSearch各种查询对象Query的使用
  3. 来了解下计算机视觉的八大应用
  4. html5 webrtc fir 请求关键帧_中信建投官网强调认可我们的投资理念的股民朋友请求 CTRL D 收藏、锁定本直播地址...
  5. python3.8.3好用吗_python使用3.8.3版本,存在报错
  6. 句柄与指针的区别(一)
  7. 死锁、EAT、页表、单双缓冲区典型题目及解析
  8. [转]Newtonsoft.Json高级用法
  9. 全栈工程师的价值是什么?
  10. JS实现各种页面的刷新
  11. 如何安装安信可一体化开发环境【转】
  12. Sentinel 流控规则,降级规则(服务熔断),热点key 限流,系统规则 ,持久化。 超详细讲解
  13. python3 tkinter教程
  14. 计算机二级真题期刊论文模板,标准期刊论文格式模板_优秀论文范文3000字
  15. tensorflow2.0 实现自动写诗
  16. Caller-saved register and Callee-saved register
  17. linux服务器开机管理,中标麒麟Linux服务器操作系统启动管理(29页)-原创力文档...
  18. B2C大点名:国内B2C网站收集
  19. Unirech腾讯云代充-关于腾讯云国际版云服务器实例调整配置常见问题
  20. python-scrapy爬虫框架爬取王者荣耀英雄皮肤图片和技能信息

热门文章

  1. 人工智能实现a*算法解决八数码_小白带你学回溯算法
  2. TVS二极管挑选法宝,聪明的你看看也知道
  3. php 验证微信token_php之微信公众号验证token获取access_token
  4. php html url编码,html中url编码是什么?有什么用?
  5. Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题
  6. ASP.NET Compilation and Deployment
  7. day05python
  8. 一文带你认识Spring事务
  9. 随笔1106-练习例题
  10. 【读书笔记】 网页关闭确认框