一、什么是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]() NULL,
[uLoginPWD] [nvarchar]() NULL,
[uRealName] [nvarchar]() 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
/// <summary>
/// 主键
/// </summary>
public int uID { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string uLoginName { get; set; }
/// <summary>
/// 密码
/// </summary>
public string uLoginPWD { get; set; }
/// <summary>
/// 真实名字
/// </summary>
public string uRealName { get; set; }
/// <summary>
/// 状态,0表示正常,1表示删除
/// </summary>
public int uStatus { get; set; }
/// <summary>
/// 备注
/// </summary>
public string uRemark { get; set; }
/// <summary>
/// 创建时间
/// </summary>
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";
/// <summary>
/// 新增
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
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 = "",
uStatus = ,
uRealName = "小小",
uRemark = "Test01",
uCreateTime = DateTime.Now
};
DapperHelper helper = new DapperHelper();
int i = helper.UserInsert(user);
if (i > )
{
Console.WriteLine("插入成功");
}
Console.ReadLine();
#endregion

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

5.2批量插入

先看DapperHelper中代码:
 /// <summary>
/// 批量插入数据
/// </summary>
/// <param name="ulist"></param>
/// <returns></returns>
public int MultInsertUser(List<UserInfo> 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<UserInfo> ulist = new List<UserInfo> {
new UserInfo(){uLoginName = "xiaohu", uLoginPWD = "",uStatus = ,uRealName = "小虎", uRemark = "Test01",uCreateTime = DateTime.Now},
new UserInfo(){uLoginName = "yangyang", uLoginPWD = "",uStatus = ,uRealName = "杨杨", uRemark = "Test01",uCreateTime = DateTime.Now},
};
DapperHelper helper = new DapperHelper();
int i = helper.MultInsertUser(ulist);
if (i > )
{
Console.WriteLine("批量数据插入成功");
}
Console.ReadLine();
#endregion

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

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

先看DapperHelper中代码:
  /// <summary>
/// 删除
/// </summary>
/// <param name="Uid"></param>
/// <returns></returns>
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 = ;
int i = helper.UserDelete(uid);
if (i > )
{
Console.WriteLine("删除成功");
}
Console.ReadLine();
#endregion

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

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

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

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

接着看看调用代码:

 List<UserInfo> ulist = new List<UserInfo> {
new UserInfo(){uID=},
new UserInfo(){uID=},
};
DapperHelper helper = new DapperHelper();
int i = helper.MultDeleteUser(ulist);
if (i > )
{
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<UserInfo> GetAll()
{
using (var db = new SqlConnection(sqlConnstr))
{
string query = "SELECT * FROM USERINFO";
return db.Query<UserInfo>(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代码:

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

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

 int[] ids = new int[] { ,  };
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的新手更好的入门和把自己所学的东西归纳总结,如果能够帮到大家最好。

ORM之轻量级框架--Dapper的更多相关文章

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

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

  2. FluentData,一个轻量级开源的.NET ORM数据持久化框架

    FluentData:一种使用Fluent API的新型轻量级ORM模型  FluentData 是微型 ORM(micro-ORM)家族的一名新成员,旨在比大型 ORM(full ORM)更加易用. ...

  3. c# 国内外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver数据常规插入测试性能对比

    c# 国内外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver数据常规插入测试性能对比对比 在6.22 号发布了 c# sqlsugar,his ...

  4. FluentData,它是一个轻量级框架,关注性能和易用性。

    http://www.cnblogs.com/zengxiangzhan/p/3250105.html FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.M ...

  5. Net系列框架-Dapper+简单三层架构

    Net系列框架-Dapper+简单三层架构 工作将近6年多了,工作中也陆陆续续学习和搭建了不少的框架,后续将按由浅入深的方式,整理出一些框架源码,所有框架源码本人都亲自调试通过,如果有问题,欢迎联系我 ...

  6. Net系列框架-Dapper+AutoFac 基于接口

    Net系列框架-Dapper+AutoFac 基于接口 工作将近6年多了,工作中也陆陆续续学习和搭建了不少的框架,后续将按由浅入深的方式,整理出一些框架源码,所有框架源码本人都亲自调试通过,如果有问题 ...

  7. 初步了解学习flask轻量级框架,

    关于flask我有话说 flask作为一个轻量级框架,它里面有好多扩展包需要下载,比较麻烦,而且有的时候flask需要在虚拟环境下运行,但是他的优点还是有滴 ,只要是用过Django的人,都会觉得fl ...

  8. DDD实战进阶第一波(四):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架三)

    上一篇文章我们讲了经典DDD架构对比传统三层架构的优势,以及经典DDD架构每一层的职责后,本篇文章将介绍基础结构层中支持DDD的轻量级框架的主要代码. 这里需要说明的是,DDD轻量级框架能够体现DDD ...

  9. DDD实战进阶第一波(三):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架二)

    了解了DDD的好处与基本的核心组件后,我们先不急着进入支持DDD思想的轻量级框架开发,也不急于直销系统需求分析和具体代码实现,我们还少一块, 那就是经典DDD的架构,只有了解了经典DDD的架构,你才能 ...

随机推荐

  1. mysql 30大优化策略

    mysql 30大优化策略 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 wher ...

  2. 智能指针auto_ptr & shared_ptr

    转载:智能指针auto_ptr 很多人听说过标准auto_ptr智能指针机制,但并不是每个人都天天使用它.这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生 ...

  3. CentOS7搭建LAMP实战

    环境配置从官网下载稳定的源码包解压预编译编译编译安装启动服务 环境配置 # yum install -y vim wget links //安装一下基本工具# systemctl stop firew ...

  4. Python_小学口算题库生成器

    import random import os import tkinter import tkinter.ttk from docx import Document columnsNumber = ...

  5. Spring Boot实战笔记(三)-- Spring常用配置(Bean的初始化和销毁、Profile)

    一.Bean的初始化和销毁 在我们的实际开发的时候,经常会遇到Bean在使用之前或之后做些必要的操作,Spring对Bean的生命周期操作提供了支持.在使用Java配置和注解配置下提供如下两种方式: ...

  6. Redis之实战篇(与Mybatis整合)

    摘要: 现在市面流行的java框架,一个是ssh(spring.struts2.hibernate),另一个是ssm(spring.springmvc.mybatis),由于之前已经有整合过ssm框架 ...

  7. YII框架视图模块化

    在实际项目开发中,有很多地方我们在不同页面我们会重复利用它,如菜单栏... 下面是将这类型进行模块化处理,使其能在不同页面中重复利用... 案例: 效果图如下: 1.在YII中的路径如下: 2.在le ...

  8. Fastjson 专题

    JSONObject.toJSONString(Object object, SerializerFeature... features) SerializerFeature有用的一些枚举值 Quot ...

  9. +function ($) { "use strict";}(window.jQuery);全面分析

    +function ($) { "use strict"; }(window.jQuery); 怎么理解? 匿名函数闭包 我们先来理一理函数表达式和函数声明的区别 函数表达式: 函 ...

  10. ajax技术基础详解

    一.概述 1.什么是ajax 可以与服务器进行[异步]交互的技术,浏览器无需刷新 2.什么时候出现ajax? -- XMLHttp 微软 1999年微软公司发布IE5版本,内嵌了ajax技术 什么时候 ...