一、什么是Dapper
Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。
二、Dapper的优点
- 轻量。只有一个Sqlmapper.cs,编译后就40K的一个很小的dll;
- 速度快。Dapper的速度接近于IDataReader,去列表的速度超过了DataTable;
- 支持多种数据库。Dapper可以在所有的Ado.Net Providers下工作,包括sqllite,sqlce,firebird,oracle,mysql,postgrasql,sqlserver;
- 可以映射一对一,一对多,多对多等多种关系;
- 性能高。通过Emit反射IDataReader的序列队列,来快速得到和产生对象,性能不错;
- 支持FrameWork2.0,3.0,3.5,4.0,4.5;
- Dapper语法十分简单。并且无须迁就数据库的设计。
三、使用方法
1、添加NuGet程序包Dapper
2、配置文件添加连接数据库的字符串
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
<connectionStrings>
<add name="MyStrConn" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DHR_DB;Integrated Security=True" />
</connectionStrings>
</configuration>
3、添加DapperTools.cs(添加、批量添加、删除、批量删除、修改、批量修改、查询、查询in的操作、多语句操作)
public static string ConnectionString = ConfigurationManager.ConnectionStrings["MyStrConn"].ConnectionString;
/// <summary>
/// 添加.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
/// <param name="t">传入实体类型.</param>
/// <returns>int.</returns>
public static int Add<T>(string sql, T t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 批量添加.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
/// <param name="t">传入泛型类.</param>
/// <returns>int.</returns>
public static int Add<T>(string sql, List<T> t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 删除.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
/// <param name="t">传入实体类型.</param>
/// <returns>int.</returns>
public static int Delete<T>(string sql, T t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 批量删除.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
/// <param name="t">传入泛型类.</param>
/// <returns>int.</returns>
public static int Delete<T>(string sql, List<T> t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 修改.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
/// <param name="t">传入实体类型.</param>
/// <returns>int.</returns>
public static int Update<T>(string sql, T t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 批量修改.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
/// <param name="t">传入泛型类.</param>
/// <returns>int.</returns>
public static int Update<T>(string sql, List<T> t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 查询.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
/// <returns>泛型类.</returns>
public static List<T> Query<T>(string sql)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Query<T>(sql).ToList();
}
}
/// <summary>
/// 查询指定数据.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
/// <param name="t">传入泛型类.</param>
/// <returns>类.</returns>
public static T Query<T>(string sql, T t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Query<T>(sql, t).SingleOrDefault();
}
}
/// <summary>
/// 查询的in操作.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
/// <returns>泛型类.</returns>
public static List<T> Query<T>(string sql, int[] ids)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Query<T>(sql, new { ids }).ToList();
}
}
/// <summary>
/// 多语句操作.
/// </summary>
/// <typeparam name="T">实体类型.</typeparam>
/// <param name="sql">传入sql执行语句.</param>
public static void QueryMultiple(string sql)
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
var multiReader = connection.QueryMultiple(sql);
var userInfo = multiReader.Read<UserInfo>();
var student = multiReader.Read<Student>();
multiReader.Dispose();
}
}
}