轻量级ORM框架——第一篇:Dapper快速学习-------简单CURD

 

  我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架

叫做dapper,而且被称为the king of ORM。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

一:为什么选择Dapper

1. 性能优越:

    其实在各大网站上,我们大概都会看到这样的一个对比效果图,在超过500次poco serialization的过程中所表现的性能,我们发现dapper是第二名,

当然第一名谁也无法超越,越底层的当然久越快,同时也就越麻烦。就好像谁能超过“01代码”呢???

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第1张

 

2. 支持多数据库

      支持多数据库的本质是因为Dapper是对IDBConnection接口进行了方法扩展,比如你看到的SqlMapper.cs,一旦你这样做了,我们也知道,

SqlConnection,MysqlConnection,OracleConnection都是继承于DBConnection,而DBConnection又是实现了IDBConnection的接口,对吧。。。

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第2张

 

二:安装Dapper

    install dapper的方式通常有两种:

 

1. 通过nuget进行安装

   如果你不知道怎么用nuget进行安装,或者不知道install-package是什么,可以在browser上找一下,比如下面这样:

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第3张

 

然后我们copy到package console 试试看。

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第4张

 

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第5张

 

2. 在github上获取源码。

   为什么要获取源码,是因为用ilspy调试dapper的源码太费劲了,毕竟现在都是异步编程了,从ilspy中看都是匿名方法很多都无法渗透,废话不多

说,我们只要把Dapper文件夹拉出来然后copy到我们的solution就可以了,如下图:

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第6张

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第7张

 

三:快速CURD操作

   其实对数据库的操作莫过于CURD,在进行操作之前我们再配一个Users表。

 

1. 配置Users表

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第8张
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]
轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第9张

 

2. Insert操作

  通常来说,有两种insert操作:

<1>单条insert操作

  这是一个简单的参数化insert,而且还可以塞入匿名类型,对吧,跟原始的SqlParameter相比,是不是简单的多???

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第10张
     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 = "上海" });
        }
轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第11张

 

<2> InsertBulk操作

     既然是Bulk操作,那肯定就是批量插入了,我们要做的就是将上面这个 ”匿名对象" 变成 ”匿名对象集合“ 就可以了。。。为了方便操作,这里定义

一个Users类,比如下面这样。。。

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第12张
    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);
        }
轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第13张

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第14张

 

2. Query操作

   其实在Dapper在query上提供的的文章太多了。。。这篇我们就按照最简单的参数化查询就好了。。。比如我要找到username=jack的记录,如下:

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第15张
1         static void Main(string[] args)
2         {
3             IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=DataMip;Integrated Security=True;MultipleActiveResultSets=True");
4 
5             var query = connection.Query<Users>("select * from Users where UserName=@UserName", new { UserName = "jack" });
6 
7         }
轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第16张

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第17张

 

图上的亮点就在于能够自动化mapper到我们object上面来,这是我们DataReader所不能办到的,对吧~~

 

3.update操作

  这种操作方式,我们还是使用Execute方法来实现,和insert是一种套路的哦。

  轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第18张

 

4. delete操作

    这里我还是采用参数化的形式来删除UserID=10这条记录,方式如下:

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第19张

 

最终sql的table展示如下,可以看到已经正确的修改了UserID=11的记录,删除了UserID=10的record。。。。当然Dapper好玩的地方多着呢,

这篇只是一个入门而已。。。希望本篇对大家有帮助~~~

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第20张

,

  我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架

叫做dapper,而且被称为the king of ORM。

 

一:为什么选择Dapper

1. 性能优越:

    其实在各大网站上,我们大概都会看到这样的一个对比效果图,在超过500次poco serialization的过程中所表现的性能,我们发现dapper是第二名,

当然第一名谁也无法超越,越底层的当然久越快,同时也就越麻烦。就好像谁能超过“01代码”呢???

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第21张

 

2. 支持多数据库

      支持多数据库的本质是因为Dapper是对IDBConnection接口进行了方法扩展,比如你看到的SqlMapper.cs,一旦你这样做了,我们也知道,

SqlConnection,MysqlConnection,OracleConnection都是继承于DBConnection,而DBConnection又是实现了IDBConnection的接口,对吧。。。

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第22张

 

二:安装Dapper

    install dapper的方式通常有两种:

 

1. 通过nuget进行安装

   如果你不知道怎么用nuget进行安装,或者不知道install-package是什么,可以在browser上找一下,比如下面这样:

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第23张

 

然后我们copy到package console 试试看。

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第24张

 

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第25张

 

2. 在github上获取源码。

   为什么要获取源码,是因为用ilspy调试dapper的源码太费劲了,毕竟现在都是异步编程了,从ilspy中看都是匿名方法很多都无法渗透,废话不多

说,我们只要把Dapper文件夹拉出来然后copy到我们的solution就可以了,如下图:

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第26张

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第27张

 

三:快速CURD操作

   其实对数据库的操作莫过于CURD,在进行操作之前我们再配一个Users表。

 

1. 配置Users表

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第28张
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]
轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第29张

 

2. Insert操作

  通常来说,有两种insert操作:

<1>单条insert操作

  这是一个简单的参数化insert,而且还可以塞入匿名类型,对吧,跟原始的SqlParameter相比,是不是简单的多???

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第30张
     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 = "上海" });
        }
轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第31张

 

<2> InsertBulk操作

     既然是Bulk操作,那肯定就是批量插入了,我们要做的就是将上面这个 ”匿名对象" 变成 ”匿名对象集合“ 就可以了。。。为了方便操作,这里定义

一个Users类,比如下面这样。。。

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第32张
    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);
        }
轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第33张

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第34张

 

2. Query操作

   其实在Dapper在query上提供的的文章太多了。。。这篇我们就按照最简单的参数化查询就好了。。。比如我要找到username=jack的记录,如下:

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第35张
1         static void Main(string[] args)
2         {
3             IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=DataMip;Integrated Security=True;MultipleActiveResultSets=True");
4 
5             var query = connection.Query<Users>("select * from Users where UserName=@UserName", new { UserName = "jack" });
6 
7         }
轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第36张

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第37张

 

图上的亮点就在于能够自动化mapper到我们object上面来,这是我们DataReader所不能办到的,对吧~~

 

3.update操作

  这种操作方式,我们还是使用Execute方法来实现,和insert是一种套路的哦。

  轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第38张

 

4. delete操作

    这里我还是采用参数化的形式来删除UserID=10这条记录,方式如下:

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第39张

 

最终sql的table展示如下,可以看到已经正确的修改了UserID=11的记录,删除了UserID=10的record。。。。当然Dapper好玩的地方多着呢,

这篇只是一个入门而已。。。希望本篇对大家有帮助~~~

轻量级ORM框架——第一篇:Dapper快速学习(转)-------简单CURD,轻量级ORM框架——第一篇:Dapper快速学习 随笔 第40张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄