.Net使用Dapper框架(快速上手)

本文详细介绍了Dapper这个轻量级ORM库的特点,包括其速度、多数据库支持和灵活性。接着,通过实例展示了如何使用Dapper进行数据操作,如Execute方法的INSERT、UPDATE、DELETE及存储过程,以及Query系列方法的查询功能。此外,还涵盖了参数处理、异步操作、事务处理等内容,为.NET开发者提供了全面的Dapper使用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dapper:小型ORM,速度快,支持多数据库,灵活性高,性能高,支持多个.net版本,语法简单,可扩展性强

目录

一、Dapper特点

二、常用方法

1.准备

2. Execute

INSERT语句

UPDATE语句

DELETE语句

有参存储过程

2.Query

查询匿名类型

查询强类型 

查询多映射(一对一) 

 查询多映射(一对多)

3.QueryFirst

First, Single和Default比较

查询匿名类型

查询强类型

4.QueryFirstOrDefault

First, Single和Default比较

查询匿名类型

查询强类型

5.QuerySingle

查询匿名类型

查询强类型

6.QuerySingleOrDefault

查询匿名类型

查询强类型

7.QueryMultiple

QueryMultiple方法

三、参数

1.匿名类型参数

单次执行

多次执行

2.动态类型参数

单次执行

多次执行

3.列表类型参数

4.字符串类型参数

四、异步

五、Dapper支持事务和范围事务

1.事务

2.范围事务

六、缓冲

七、存储过程

总结


一、Dapper特点

   Dapper 特点
   小型ORM:Dapper是一个轻型的ORM类。源码代码量少,编译后就40K的一个很小的Dll.;
   速度快:Dapper的速度接近与IDataReader,取列表的数据超过了DataTable;
   支持多数据库:Dapper支持Mysql,SqlLite,Mssql,Oracle等一系列的数据库;
   灵活性高:支持一对多 多对多的关系,无XML无属性。代码以前怎么写现在还怎么写;
   性能高:通过Emit反射IDataReader的序列队列,来快速的得到和产生对象;
   支持.net版本:支持多个版本.Net,如:.Net Framework和.Net Core;
   可扩展性强:语法简单,并且无须迁就数据库的设计。

二、常用方法

1.准备

安装

本文使用的是.Net6版本,通过NuGet安装相应版本的Dapper和MySql.Data:

dotnet add package Dapper --version 2.0.123
dotnet add package MySql.Data --version 8.0.32.1

创建表格,这里使用的是MySql5.5:

/* 创建表 */
CREATE TABLE `assignment` (
  `assignmentNo` decimal(4,0) NOT NULL,
  `empno` varchar(10) DEFAULT NULL,
  `content` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`assignmentNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `dept` (
  `deptno` decimal(4,0) NOT NULL,
  `deptname` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`deptno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `emp` (
  `empno` decimal(4,0) NOT NULL,
  `ename` varchar(10) DEFAULT NULL,
  `job` varchar(20) DEFAULT NULL,
  `hiredate` datetime DEFAULT NULL,
  `sal` decimal(10,0) DEFAULT NULL,
  `deptno` decimal(4,0) DEFAULT NULL,
  PRIMARY KEY (`empno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Dapper使用三个步骤
创建一个IDbConnection接口对象;
编写一个查询SQL来执行CRUD操作;
将查询SQL作为Execute方法的参数传递。

2. Execute

Execute 是一个可以从 IDbConnection 类型的任意对象调用的扩展方法,它可以执行一个或多个命令并返回受影响的行数。

参数:

参数 含义
sql 要执行的命令文本
param 命令参数(默认为null
transaction 需要使用的事务(默认为null
commandTimeout 命令执行超时时间(默认为null
commandType 命令类型(默认为null

代码如下(示例):

INSERT语句

执行单次INSERT语句

string sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) Values (@empno,@ename,@job,@hiredate,@sal);";
using (var connection = BaseRepository.GetMySqlConnection())
{
	connection.Open();

	var affectedRows = connection.Execute(sql, new { empno = 7369, ename = "SMITH", job = "SALESMAN", hiredate = "2022-4-1", sal = 9000 });
}

 执行多次INSERT语句 

string sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) Values (@empno,@ename,@job,@hiredate,@sal);";

using (var connection = BaseRepository.GetMySqlConnection())
{
	connection.Open();

	var affectedRows = connection.Execute(sql,
		new[]
		{
			new { empno = 7779 , ename = "宋江",job= "SALESMAN", hiredate="2022-5-1",sal =9000 },
			new { empno = 7780 , ename = "李逵",job= "SALESMAN", hiredate="2022-6-1",sal =9000 },
			new { empno = 7781 , ename = "关胜",job= "SALESMAN", hiredate="2022-6-1",sal =9000 },
			new { empno = 7782 , ename = "白日鼠",job= "SALESMAN", hiredate="2022-6-1",sal =9000 },
		});
}

UPDATE语句

执行单次UPDATE语句 

string sql = "UPDATE emp SET ename =@ename WHERE empno =@empno";
using (var connection = BaseRepository.GetMySqlConnection())
{
	connection.Open();
	var affectedRows = connection.Execute(sql, new { empno = 7369, ename = "yulan" });
}

执行多次UPDATE语句 

string sql = "UPDATE emp SET ename =@ename WHERE empno =@empno";
using (var connection = BaseRepository.GetMySqlConnection())
{
	connection.Open();
	var affectedRows = connection.Execute(sql,
		new[]
		{
			new { empno =7369,ename ="卢俊义" },
			new { empno =7777,ename ="林冲"}
		});
}

DELETE语句

执行单次DELETE语句 

string sql = "DELETE FROM emp WHERE empno =@empno";
using (var connection = BaseRepository.GetMySqlConnection())
{
	connection.Open();
	var affectedRows = connection.Execute(sql, new { empno = 7780 });
}

执行多次DELETE语句 

string sql = "DELETE FROM emp WHERE empno =@empno";
using (var connection = BaseRepository.GetMySqlConnection())
{
	connection.Open();
	var affectedRows = connection.Execute(sql,
		new[]
		{
			new{ empno = 7781 },
			new{ empno = 7782 }
		});
}

有参存储过程

执行单次存储过程 

string sql = "sp_GetEmpInfo";
using (var connection = BaseRepository
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值