博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORM之轻量级框架--Dapper
阅读量:6431 次
发布时间:2019-06-23

本文共 8050 字,大约阅读时间需要 26 分钟。

一、什么是Dapper?

Dapper是一款轻量级Orm框架,它是属于半自动的,它和Entity Framework和NHibernate不同,它只有一个单文件,没有很复杂的配置,如果你喜欢原生Sql语句,而且又是喜欢Orm框架,那么Dapper对于你来说是再适合不过了。

二、Dapper优点

我也是刚开始学习Dapper,让我自己去总结它的优点,可能也就还没真正去体验到带来的好。所以我也是抱着学习的态度,去参考一些大佬给它总结的优点:

1、轻量级、单文件。

2、支持多数据,而且性能优越。

3、Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。

三、例子演示

下面我们通过一个简单的例子来学习Dapper。

1、我们通过VS2017 创建一个控制台程序来进行我们的学习,首先我们创建一个项目,命名为DapperTest。

2、首先我们先建立一张UserInfo表,我使用的是Sql Server创建。

CREATE TABLE [dbo].[UserInfo]([uID] [int] NOT NULL,[uLoginName] [nvarchar](60) NULL,[uLoginPWD] [nvarchar](60) NULL,[uRealName] [nvarchar](60) NULL,[uStatus] [int] NOT NULL,[uRemark] [nvarchar](max) NULL,[uCreateTime] [datetime] NOT NULL,CONSTRAINT [PK_dbo.sysUserInfo] PRIMARY KEY CLUSTERED ([uID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]GO

3、接下来我们创建一个数据表对应的实体对象。

public class UserInfo    {        //uID, uLoginName, uLoginPWD, uRealName, uStatus, uRemark, uCreateTime       ///        /// 主键       ///         public int uID { get; set; }        ///         /// 用户名        ///         public string uLoginName { get; set; }        ///         /// 密码        ///         public string uLoginPWD { get; set; }        ///         /// 真实名字        ///         public string uRealName { get; set; }        ///         /// 状态,0表示正常,1表示删除        ///         public int uStatus { get; set; }        ///         /// 备注        ///         public string uRemark { get; set; }        ///         /// 创建时间        ///         public DateTime uCreateTime { get; set; }    }

3、我们需要在我们项目中添加Dapper  Nuget包,然后点击安装就可以了。

4、我们需要编写一个增删查改帮助类,大家也可以不用按照我那样。(我是为了不要把那些操作数据库和业务逻辑代码全部放到一起)

public class DapperHelper    {
}

5.1新增,插入一条数据。

先看DapperHelper中代码:
string sqlConnstr= "Data Source=.;Initial Catalog=TestDb;User Id=sa;Password=123";        ///         /// 新增        ///         ///         /// 
public int UserInsert(UserInfo user) { using (var db=new SqlConnection(sqlConnstr)) { //uID, uLoginName, uLoginPWD, uRealName, uStatus, uRemark, uCreateTime string query = "INSERT INTO USERINFO VALUES(@uLoginName, @uLoginPWD, @uRealName, @uStatus, @uRemark, @uCreateTime)"; return db.Execute(query, user); } }

接下来我们来看看调用代码和调用结果。

#region 1.0插入数据            UserInfo user = new UserInfo            {                uLoginName = "xiaoxiao",                uLoginPWD = "123",                uStatus = 0,                uRealName = "小小",                uRemark = "Test01",                uCreateTime = DateTime.Now            };            DapperHelper helper = new DapperHelper();            int i = helper.UserInsert(user);            if (i > 0)            {                Console.WriteLine("插入成功");            }            Console.ReadLine();            #endregion

上面两张图中已经显示我们数据插入成功,接着我们来看看插入多条数据。

5.2批量插入

先看DapperHelper中代码:
///         /// 批量插入数据        ///         ///         /// 
public int MultInsertUser(List
ulist) { using (var db = new SqlConnection(sqlConnstr)) { string query = "INSERT INTO USERINFO VALUES(@uLoginName, @uLoginPWD, @uRealName, @uStatus, @uRemark, @uCreateTime)"; return db.Execute(query,ulist); } }

接着我们来看看调用的代码

#region 2.0批量插入            List
ulist = new List
{ new UserInfo(){uLoginName = "xiaohu", uLoginPWD = "555",uStatus = 0 ,uRealName = "小虎", uRemark = "Test01",uCreateTime = DateTime.Now}, new UserInfo(){uLoginName = "yangyang", uLoginPWD = "888",uStatus = 0 ,uRealName = "杨杨", uRemark = "Test01",uCreateTime = DateTime.Now}, }; DapperHelper helper = new DapperHelper(); int i = helper.MultInsertUser(ulist); if (i > 0) { Console.WriteLine("批量数据插入成功"); } Console.ReadLine(); #endregion

接着我们来看看执行结果和数据库中的结果:

5.3接着我们来看看删除一条数据

先看DapperHelper中代码:
///         /// 删除        ///         ///         /// 
public int UserDelete(int Uid) { using (var db=new SqlConnection(sqlConnstr)) { string query = "DELETE USERINFO WHERE uID=@Uid"; var param = new DynamicParameters(); param.Add("Uid", Uid); return db.Execute(query,param); } }

接着看看调用代码:

#region 3.0删除数据            DapperHelper helper = new DapperHelper();            int uid = 7;            int i = helper.UserDelete(uid);            if (i > 0)            {                Console.WriteLine("删除成功");            }            Console.ReadLine();            #endregion

执行结果和数据库中数据如下:

我们可以从数据库中看到uID=7的数据已经被删除。

5.4接着我们来看看批量删除操作:

先看DapperHelper中代码:
public int MultDeleteUser(List
ulist) { using (var db=new SqlConnection(sqlConnstr)) { string query = "DELETE USERINFO WHERE uID=@Uid"; return db.Execute(query, ulist); } }

接着看看调用代码:

List
ulist = new List
{ new UserInfo(){uID=8}, new UserInfo(){uID=9}, }; DapperHelper helper = new DapperHelper(); int i = helper.MultDeleteUser(ulist); if (i > 0) { Console.WriteLine("批量删除成功"); } Console.ReadLine();

我们可以从数据库截图中看到uID=8和uID=9的数据已经被删除。

5.5接下来我们来看看修改的操作。

先看DapperHelper代码

public int UserUpdate(UserInfo user)        {            //uID, uLoginName, uLoginPWD, uRealName, uStatus, uRemark, uCreateTime            using (var db=new SqlConnection(sqlConnstr))            {                string query= "UPDATE USERINFO SET uLoginName=@uLoginName,uLoginPWD=@uLoginPWD,uRealName=@uRealName,uStatus=@uStatus,uRemark=@uRemark,uCreateTime=@uCreateTime WHERE uID=@uID";return db.Execute(query, user);            }        }

接下来看看调用代码:

UserInfo user = new UserInfo

{
uID = 2,
uLoginName = "xiaomogu",
uLoginPWD = "555555",
uStatus = 0,
uRealName = "蘑菇",
uRemark = "测试",
uCreateTime = DateTime.Now
};
DapperHelper helper = new DapperHelper();
int i = helper.UserUpdate(user);
if (i > 0)
{
Console.WriteLine("修改成功");
}
Console.ReadLine();

从数据库图中我们已经可以看到我们已经将uID=2的数据修改成功。

5.6接下来我们来看看查询所有数据操作。

先看DapperHelper代码

public List
GetAll() { using (var db = new SqlConnection(sqlConnstr)) { string query = "SELECT * FROM USERINFO"; return db.Query
(query).ToList(); } }

接着我们来看看调用的代码和执行结果:

DapperHelper helper = new DapperHelper();            var list = helper.GetAll();            foreach (var item in list)            {                Console.WriteLine("用户名:{0},密码:{1}", item.uLoginName, item.uLoginPWD);            }            Console.ReadLine();

5.7最后我们来看看查询多条指定数据的操作:

先看看DapperHelper代码:

///         /// 查询多条指定的数据        ///         /// 查询条件        /// 
public List
GetAllIn(int[] uids) { using (var db=new SqlConnection(sqlConnstr)) { string query = "SELECT * FROM USERINFO WHERE uID IN @uids"; return db.Query
(query, new { uids= uids }).ToList(); } }

接着我们来看看调用代码和执行结果。

int[] ids = new int[] { 10, 11 };            DapperHelper helper = new DapperHelper();            var list = helper.GetAllIn(ids);            foreach (var item in list)            {                Console.WriteLine("用户名:{0},密码:{1}", item.uLoginName, item.uLoginPWD);            }            Console.ReadLine();

四、源码

源码我已经放到了Github上面了,大家有兴趣可以去看看,地址是:https://github.com/xiaoerhao/DapperTest

五、感受

终于写完了,这是我第一次认真去写一篇博客,终于跨出了这一小步,大概花了四个多小时,不过我觉得挺值得的。主要也是为了记录一些自己的所学所收获的东西分享给大家,和大家更好的交流,相互进步,由于自己的能力和水平有限,所以有些地方理解的不够透彻,写出来的东西或许达不到大家的期许,希望大家能够理解和鼓励,不过我的初衷就是希望一些刚上手Dapper的新手更好的入门和把自己所学的东西归纳总结,如果能够帮到大家最好。

转载于:https://www.cnblogs.com/Erhao/p/10042808.html

你可能感兴趣的文章
linux终端介绍
查看>>
通过思科模拟器CISCO PACKET TRACER学习网络2——交换机的基本配置和telnet登陆
查看>>
百度索引量下降的原因及解决方法
查看>>
结束北漂之后的这半年
查看>>
PDF文件编辑技巧之PDF文件去除水印方法
查看>>
我的友情链接
查看>>
启动APACHE出现“error while loading shared libraries: libiconv.so.2”
查看>>
MFS文件系统安装指南
查看>>
查询dsjob
查看>>
Oracle与SQL Server互连
查看>>
JavaScript颜色选择器插件
查看>>
区块链和电子商务 | 大规模电子购物
查看>>
深入理解Fsync
查看>>
c++构造函数详解
查看>>
华为机试再回忆--第一题
查看>>
你真的了解WebSocket吗?
查看>>
网络协议复习一本通B
查看>>
Log
查看>>
微软私有云Azure Pack实践系列之一WAP的安装配置篇
查看>>
定制 LAMP 网站服务平台
查看>>