博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查漏补缺系列之dapper初体验
阅读量:5235 次
发布时间:2019-06-14

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

什么是dapper

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

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

准备工作

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

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

数据库表结构如下:

774226-20171022195833849-996946860.png

另外我们还要创建一个名为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'添加一句话'

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

774226-20171022195839037-1413639572.png

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

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

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

774226-20171022195844646-1176735082.png

查询

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
dapperList = conn.Query
(sql).ToList(); } }

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

select ID,[Message] from dappertest

774226-20171022195844646-1176735082.png

删除

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

[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

我们再查询看看

774226-20171022195850584-529193842.png

存储过程

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

CREATE PROCEDURE DapperInsert@Message nvarchar(200)ASinsert 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'这是存储过程新增的'

774226-20171022195856193-1843767087.png

事务

在平常的业务系统中,我们或多或少会用到事务,那么接下来我们演示一下在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);                }            }        }

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

774226-20171022195828506-827647190.png
我们看看数据库中的执行情况,这里数据库会执行了两次
第一次

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

第二次

insert into dappertest([Message])values()

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

774226-20171022195856193-1843767087.png
我们看到数据库中果然没有新增数据,我们目的也达到了。

总结

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

转载于:https://www.cnblogs.com/chen-jie/p/dapper.html

你可能感兴趣的文章
Cracking The Coding Interview 1.1
查看>>
mysql安装linux_二进制包安装
查看>>
POJ 3280 Cheapest Palindrome
查看>>
vb.net 浏览文件夹读取指定文件夹下的csv文件 并验证,显示错误信息
查看>>
NetworkInterface的使用
查看>>
JQuery Ajax()方法
查看>>
元素自动居中显示
查看>>
JDBC 时间处理
查看>>
hadopp 环境搭建
查看>>
【2018】听懂你能看懂的句子
查看>>
mybatis源代码分析:深入了解mybatis延迟加载机制
查看>>
Flask三剑客
查看>>
Hibernate-缓存
查看>>
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
【BZOJ3052】【UOJ#58】【WC2013】糖果公园(树上莫队)
查看>>
荷兰国旗问题
查看>>
Process 启动参数问题
查看>>
提高PHP性能的10条建议
查看>>
我,不会吵,不会闹,心痛了用沉默代替
查看>>
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>