一、Dapper是什么
Dapper是一款.Net平台简单(Simple)的对象映射库,并且Dapper拥有着“微型ORM之王”的称号。
就速度而言与手写ADO.NET SqlDateReader相同。
ORM是Object Relational Mapper的缩写,代表着数据库与编程语言之间的映射。
简单来说就是使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀,那么Dapper会是不错的选择。
二、Dapper基本用法
通过NuGet安装:Dapper包,如果要进行mysql连接还需要安装Mysql.Data包
1. 数据库连接配置
<connectionStrings>
<add name="MysqlServer" connectionString="Database=用数据库名称;Data Source=IP;Port=端口; User Id=用户名;Password=密码;Charset=utf8mb4;TreatTinyAsBoolean=false;" /> //Mysql
<add name="LinqConnection" connectionString="Data Source=IP;Initial Catalog=数据库名称; User ID=用户名;Password=密码" providerName="System.Data.SqlClient"/> //sql
</connectionStrings>
2. dapper 数据库连接方法
Mysql连接方法
public class DapperService
{
public static MySqlConnection MySqlConnection()
{
string mysqlConnectionStr = ConfigurationManager.ConnectionStrings["MysqlServer"].ToString();
var connection = new MySqlConnection(mysqlConnectionStr); connection.Open();
return connection;
}
}
mssql连接方法
public class DapperService {
public static SqlConnection MySqlConnection()
{
string mysqlConnectionStr =ConfigurationManager.ConnectionStrings["LinqConnection"].ToString();
var connection = new SqlConnection(mysqlConnectionStr);
connection.Open();
return connection;
}
}
3. 新增方法(单体、批量)
单体
public ActionResult GetDapper(CarModel carModel)
{
try
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
int result = conn.Execute("insert into UserInfo(UserTel,UserName,UserPwd) values (@UserTel,@UserName,@UserPwd)", carModel);
}
return Json("success");
}
catch(Exception e)
{
return Json("failed");
}
}
批量
public ActionResult GetDapper(List<CarModel> carModel)
{
try
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
int result = conn.Execute("insert into UserInfo(UserTel,UserName,UserPwd) values(@UserTel,@UserName,@UserPwd)", carModel);
}
return Json("success");
}
catch(Exception e)
{
return Json("failed");
}
}
4. 删除方法(单体、批量)
单体
public static int Delete(CarModel carModel)
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
return conn.Execute("delete from UserInfo where id=@ID", carModel);
}
}
批量
public static int Delete(List<CarModel> carModel)
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
return conn.Execute("delete from UserInfo where id=@ID", carModel);
}
}
5. 更新方法(单体、批量)
单体
public static int Update(CarModel carModel)
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
return conn.Execute("update UserInfo set name=@name where id=@ID", carModel);
}
}
批量
public static int Update(List<CarModel> carModel)
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
return conn.Execute("update UserInfo set name=@name where id=@ID", carModel);
}
}
启用事务
public static int Update(List<CarModel> carModel)
{
using (SqlConnection connection = new SqlConnection(ConnString))
{
connection.Open();
//启动事务
SqlTransaction transaction = connection.BeginTransaction();
try
{
connection.Execute("update *** set ***='Y' where ID=@ID AND *** = '"+iCaseId+"'", selectItems, transaction);
//完成提交
transaction.Commit();
}
catch (Exception ex)
{
//数据回滚
transaction.Rollback();
// sm.sendAdmMail("InsertSql报错","Func: InsertSql SQL语句:<br/>" + ASql + "<br/>报错!" + ex.Message + "<br/>");
}
finally
{
connection.Close();
}
}
}
6. 查询
无参查询
public static List<CarModel> Query()
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
return conn.Query<CarModel>("select * from UserInfo ").ToList();
}
}
有参查询
public static Person Query(CarModel carModel)
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
return conn.Query<CarModel>("select * from UserInfo where id=@ID",carModel).SingleOrDefault();
}
}
7. Dapper的复杂操作
In操作
public static List<CarModel> QueryIn()
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
var sql = "select * from UserInfo where id in @ids";
return conn.Query<CarModel>(sql, new { ids = new int[2] { 1, 2 }, }).ToList();
}
}
public static List<CarModel> QueryIn(int[] ids)
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
var sql = "select * from UserInfo where id in @ids";
return conn.Query<CarModel>(sql, new { ids }).ToList();
}
}
8. 多语句操作
public ActionResult QueryMultiple()
{
try
{
using (IDbConnection conn = DapperService.MySqlConnection())
{
var sql= "select * from Person; select * from UserInfo";
var multiReader = conn.QueryMultiple(sql);
var personList = multiReader.Read<Person>();
var bookList = multiReader.Read<CarModel>(); multiReader.Dispose();
}
return Json("success");
}
catch(Exception e)
{
return Json("failed");
}
}