什么是dapper

在维护一些较老的项目的时候,往往我们会用很多sql那么这个时候我们要考虑优化这些项目的时候,我们就可以使用dapper

dapper 是一款轻量级的ORM框架,它的优势很多轻量级,速度快,而且还支持不同的数据库,github地址如下:

https://github.com/StackExchange/Dapper

准备工作

本次为了演示,我们引用NUnit做单测,通过SQL Server Profiler来监控生成的sql语句。

dapper引用也特别方面我们可以通过NuGet下载引用dapper程序包,然后我们在类里引用using Dapper;就可以了。

数据库表结构如下:

另外我们还要创建一个名为DapperTestModel 的实体

public class DapperTestModel
{
public int Id { get; set; }
public string Message { get; set; }
}

让我们准备好链接字符串开始本次演示吧

private string connString =
System.Configuration.ConfigurationManager.ConnectionStrings["sqlConnectionString"].ConnectionString;

编辑

编辑代码如下,我们把新增和修改的方法写在一起,通过判断ID是否为0来觉得是新增还是修改。首先我们演示新增方法

        [Test]
public void Edit()
{
int ID = 0;
string sql = "insert into dappertest([Message])values(@Message)";
using (IDbConnection conn = new SqlConnection(connString))
{
if (ID > 0)
{
sql = "update dappertest set [Message]=@Message where Id=@ID";
conn.Execute(sql, new {ID = ID, Message = "修改这句话"});
}
else
{
conn.Execute(sql, new { Message = "添加一句话" });
}
} }

这里我们看到dapper很方便的一点就是我们可以使对象来代替参数,这里我们就可以通过匿名对象来传递参数

好了我们执行单测,看看数据库中执行的语句

exec sp_executesql N'insert into dappertest([Message])values(@Message)',N'@Message nvarchar(4000)',@Message=N'添加一句话'

我们在去数据库中查看一下数据

接着我们去修改ID来看看修改方法

exec sp_executesql N'update dappertest set [Message]=@Message where Id=@ID',N'@ID int,@Message nvarchar(4000)',@ID=10,@Message=N'修改这句话'

我们再去数据库中查看一下数据情况

查询

dapper的查询功能也很灵活,比如我们需要获取一个list列表,如果换成使用DBHelper类,我们可能需要先查询一个DateSet然后再将其转成list,那么使用dapper我们可以直接转成list,我们来看看具体的实现代码

        [Test]
public void GetList()
{
using (IDbConnection conn = new SqlConnection(connString))
{
string sql = "select ID,[Message] from dappertest";
List<DapperTestModel> dapperList = conn.Query<DapperTestModel>(sql).ToList();
}
}

我们在看看数据库中的执行情况

select ID,[Message] from dappertest

删除

删除和新增修改的方式一致,代码如下

        [Test]
public void Delete()
{
int ID = 10; using (IDbConnection conn = new SqlConnection(connString))
{
int retrunCount = 0;
string sql = "delete from dappertest where id=@ID";
retrunCount = conn.Execute(sql, new { ID = ID });
} }

同样的我们看看数据库中的执行语句

exec sp_executesql N'delete from dappertest where id=@ID',N'@ID int',@ID=10

我们再查询看看

存储过程

我们再来看看存储过程的调用,首先我们在数据库中添加一个简单的存储过程

CREATE PROCEDURE DapperInsert
@Message nvarchar(200)
AS
insert into dappertest([message])
values(@Message)

然后我们去调用这个存储过程

        [Test]
public void PInsert()
{
using (IDbConnection conn = new SqlConnection(connString))
{
conn.Execute("DapperInsert",new {Message="这是存储过程新增的"}, null, null,CommandType.StoredProcedure);
}
}

同样的我们看看数据库中的执行情况

exec DapperInsert @Message=N'这是存储过程新增的'

事务

在平常的业务系统中,我们或多或少会用到事务,那么接下来我们演示一下在dapper中事务的调用

       [Test]
public void Insert()
{
using (IDbConnection conn = new SqlConnection(connString))
{
conn.Open();
//开始事务
IDbTransaction transaction = conn.BeginTransaction();
try
{
string sql = "insert into dappertest([Message])values(@Message)";
string sql2 = "insert into dappertest([Message])values(@Message)";
conn.Execute(sql, new { Message ="再次新增一句话" }, transaction);
conn.Execute(sql2, new { Message=""}, transaction);
//提交事务
transaction.Commit();
}
catch (Exception ex)
{
//出现异常,事务Rollback
transaction.Rollback();
throw new Exception(ex.Message);
}
}
}

我们故意使其在第二次新增的时候报错



我们看看数据库中的执行情况,这里数据库会执行了两次

第一次

exec sp_executesql N'insert into dappertest([Message])values(@Message)',N'@Message nvarchar(4000)',@Message=N'再次新增一句话'

第二次

insert into dappertest([Message])values()

这里我们失败回滚了,我们在看看数据库中的情框



我们看到数据库中果然没有新增数据,我们目的也达到了。

总结

本次我给大家带来了一些dapper的简单应用包括简单逻辑调用存储过程的调用,以及事务的调用,从我们的简单示例中我们看到,dapper是一款十分优秀的轻量级的ORM框架,如果我们需要维护那种sql语句特别多的项目时,可以考虑使用dapper,使用dapper我们可以通过对象很灵活的去给我们的sql语句或者存储过程传递参数,也可以很灵活的转换类型。

查漏补缺系列之dapper初体验的更多相关文章

  1. Go语言知识查漏补缺|基本数据类型

    前言 学习Go半年之后,我决定重新开始阅读<The Go Programing Language>,对书中涉及重点进行全面讲解,这是Go语言知识查漏补缺系列的文章第二篇,前一篇文章则对应书 ...

  2. 【Android面试查漏补缺】之事件分发机制详解

    前言 查漏补缺,查漏补缺,你不知道哪里漏了,怎么补缺呢?本文属于[Android面试查漏补缺]系列文章第一篇,持续更新中,感兴趣的朋友可以[关注+收藏]哦~ 本系列文章是对自己的前段时间面试经历的总结 ...

  3. CSS基础面试题,快来查漏补缺

    本文大部分问题来源:50道CSS基础面试题(附答案),外加一些面经. 我对问题进行了分类整理,并给了自己的回答.大部分知识点都有专题链接(来源于本博客相关文章),用于自己前端CSS部分的查漏补缺.虽作 ...

  4. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  5. oracle 12c 学习系列(1)–12c初体验

    详见原文博客链接地址: oracle 12c 学习系列(1)–12c初体验

  6. js基础查漏补缺(更新)

    js基础查漏补缺: 1. NaN != NaN: 复制数组可以用slice: 数组的sort.reverse等方法都会改变自身: Map是一组键值对的结构,Set是key的集合: Array.Map. ...

  7. Entity Framework 查漏补缺 (一)

    明确EF建立的数据库和对象之间的关系 EF也是一种ORM技术框架, 将对象模型和关系型数据库的数据结构对应起来,开发人员不在利用sql去操作数据相关结构和数据.以下是EF建立的数据库和对象之间关系 关 ...

  8. 2019Java查漏补缺(一)

    看到一个总结的知识: 感觉很全面的知识梳理,自己在github上总结了计算机网络笔记就很累了,猜想思维导图的方式一定花费了作者很大的精力,特共享出来.原文:java基础思维导图 自己学习的查漏补缺如下 ...

  9. 20165223 week1测试查漏补缺

    week1查漏补缺 经过第一周的学习后,在蓝墨云班课上做了一套31道题的小测试,下面是对测试题中遇到的错误的分析和总结: 一.背记题 不属于Java后继技术的是? Ptyhon Java后继技术有? ...

随机推荐

  1. 201521123008《Java程序设计》第五周实验总结

    1.本章学习总结 2.书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 不能.Sy ...

  2. 201521123072《java程序设计》第十三周学习总结

    201521123072<java程序设计>第十三周学习总结 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 ...

  3. Java课程设计——计算数学表达式的程序(201521123051 谢庆圆)

    计算数学表达式的程序(201521123051 谢庆圆) 1.团队课程设计博客链接 团队课程设计博客链接 2.个人负责模块或任务说明 1.计算数字表达式中操作按钮的实现(右容器) 2.. 注册监听器以 ...

  4. 201521123110《Java程序设计》第12周学习总结

    1. 本周学习总结 2. 书面作业 1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 1.1 生成的三个学生对象,使用PrintWriter的printl ...

  5. web前端 学习线路

    1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的 ...

  6. PHPStorm调试PHP代码~实际操作+mark~~

    因为wamp自己已经下载了xdebug,只要配置开启就行了. 1. 配置php.ini(有就打开注释,没有就加上) XDEBUG Extension[xdebug]zend_extension =&q ...

  7. 可能是讲解ARM中断和中断嵌套最通俗易懂的文章

    几天前一个学生问我ARM中断嵌套的问题,我才发现原来在我心中理所当然的事对学生来说理解实属不易.  ARM有七种模式,我们这里只讨论SVC.IRQ和FIQ模式.  我们可以假设ARM核心有两根中断引脚 ...

  8. 多线程简单实例(1)真的需要synchronized么?

    说道多线程的安全问题,很多人想到就就是加锁.用到synchronized关键字. 那就要先说说synchronized问什么能够保证线程安全了. 首先要了解线程的工作方式:线程工作分为工作内存和主内存 ...

  9. 你真的会阅读Java的异常信息吗?

    给出如下异常信息: java.lang.RuntimeException: level 2 exception at com.msh.demo.exceptionStack.Test.fun2(Tes ...

  10. 项目管理软件之争,禅道和JIRA大对比

    本文摘要: 一. 产品介绍 二. 界面设计 1. 界面颜色设计 2. 布局结构 三. 功能区别 四. 价格对比 五. 后期服务 六. 优缺点 七. 总结 说到项目管理软件,不得不提的是禅道和JIRA. ...