书到用时方恨少,事非经过不知难。这篇文章主要讲述ORM-Dapper快速学习相关的知识,希望能为你提供帮助。
轻量级ORM框架——第一篇:Dapper快速学习
转载地址:http://www.cnblogs.com/huangxincheng/p/5828470.html
我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架
叫做dapper,而且被称为the king of ORM。
一:为什么选择Dapper
1. 性能优越:
其实在各大网站上,我们大概都会看到这样的一个对比效果图,在超过500次poco serialization的过程中所表现的性能,我们发现dapper是第二名,
当然第一名谁也无法超越,越底层的当然久越快,同时也就越麻烦。就好像谁能超过“01代码”呢???
文章图片
2. 支持多数据库
支持多数据库的本质是因为Dapper是对IDBConnection接口进行了方法扩展,比如你看到的SqlMapper.cs,一旦你这样做了,我们也知道,
【ORM-Dapper快速学习】SqlConnection,mysqlConnection,OracleConnection都是继承于DBConnection,而DBConnection又是实现了IDBConnection的接口,对吧。。。
文章图片
二:安装Dapper
install dapper的方式通常有两种:
1. 通过nuget进行安装
如果你不知道怎么用nuget进行安装,或者不知道install-package是什么,可以在browser上找一下,比如下面这样:
文章图片
然后我们copy到package console 试试看。
文章图片
文章图片
2. 在github上获取源码。
为什么要获取源码,是因为用ilspy调试dapper的源码太费劲了,毕竟现在都是异步编程了,从ilspy中看都是匿名方法很多都无法渗透,废话不多
说,我们只要把Dapper文件夹拉出来然后copy到我们的solution就可以了,如下图:
文章图片
文章图片
三:快速CURD操作
其实对数据库的操作莫过于CURD,在进行操作之前我们再配一个Users表。
1. 配置Users表
文章图片
CREATE TABLE [dbo].[Users]( [UserID] [int] IDENTITY(1,1) NOT NULL, [UserName] [varchar](50) NULL, [Email] [varchar](100) NULL, [Address] [varchar](100) NULL, CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ( [UserID] ASC )WITH (PAD_INDEX= OFF, STATISTICS_NORECOMPUTE= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS= ON, ALLOW_PAGE_LOCKS= ON) ON [PRIMARY] ) ON [PRIMARY]
文章图片
2. Insert操作
通常来说,有两种insert操作:
< 1> 单条insert操作
这是一个简单的参数化insert,而且还可以塞入匿名类型,对吧,跟原始的SqlParameter相比,是不是简单的多???
文章图片
static void Main(string[] args) { IDbConnection connection = new SqlConnection("Data Source=.; Initial Catalog=DataMip; Integrated Security=True; MultipleActiveResultSets=True"); var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)", new { UserName = "jack", Email = "380234234@qq.com", Address = "上海" }); }
文章图片
< 2> InsertBulk操作
既然是Bulk操作,那肯定就是批量插入了,我们要做的就是将上面这个 ”匿名对象" 变成 ”匿名对象集合“ 就可以了。。。为了方便操作,这里定义
一个Users类,比如下面这样。。。
文章图片
static void Main(string[] args) { IDbConnection connection = new SqlConnection("Data Source=.; Initial Catalog=DataMip; Integrated Security=True; MultipleActiveResultSets=True"); //var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)", //new { UserName = "jack", Email = "380234234@qq.com", Address = "上海" }); var usersList = Enumerable.Range(0, 10).Select(i => new Users() { Email = i + "qq.com", Address = "安徽", UserName = i + "jack" }); var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)",usersList); }
文章图片
文章图片
2. Query操作
其实在Dapper在query上提供的的文章太多了。。。这篇我们就按照最简单的参数化查询就好了。。。比如我要找到username=jack的记录,如下:
文章图片
1static void Main(string[] args) 2{ 3IDbConnection connection = new SqlConnection("Data Source=.; Initial Catalog=DataMip; Integrated Security=True; MultipleActiveResultSets=True"); 4 5var query = connection.Query< Users> ("select * from Users where UserName=@UserName", new { UserName = "jack" }); 6 7}
文章图片
文章图片
图上的亮点就在于能够自动化mapper到我们object上面来,这是我们DataReader所不能办到的,对吧~~
3.update操作
这种操作方式,我们还是使用Execute方法来实现,和insert是一种套路的哦。
文章图片
4. delete操作
这里我还是采用参数化的形式来删除UserID=10这条记录,方式如下:
文章图片
最终sql的table展示如下,可以看到已经正确的修改了UserID=11的记录,删除了UserID=10的record。。。。当然Dapper好玩的地方多着呢,
推荐阅读
- Android实现模拟表单上传
- Asp.Net Core 中无法使用 ConfigurationManager.AppSettings
- android等待旋转圆圈动画
- 小白学phoneGap《构建跨平台APP(phoneGap移动应用实战》连载三(通过实例来体验生命周期))
- Android 开发笔记___时间选择器---timePicker
- Android开发艺术-第二章 IPC 机制
- SimpliciTI APP
- 阅读《Android 从入门到精通》(33)——Intent 分类
- android 三种定位方式