为什么要写这篇文章

因数我看到很多人虽然用着SqlSugar,但是同时也用着Dapper,因为SqlSugar兼容了Dapper所有API,所以既然你用了SqlSugar那么就没有必要在同一个项目中使用2个ORM

所以这篇文章是给使用SqlSugar或者你想使用SqlSugar的朋友看的

Dapper 介绍

Dapper是一个轻量级开源的ORM类,他是通过扩展IDbConnection提供一些有用的扩展方法去查询您的数据库,所以Ado.Net支持的数据库,他都可以支持。

在速度方面具有“King of Micro ORM”的头衔,几乎与使用原始的ADO.NET数据读取器一样快。很多人第一次使用了他之后,就深深的喜欢上他了。

SqlSugar 介绍

SqlSugar 同样轻量级小巧,功能方面更加全面,需求都是来自1000多开发人员的真实项目需求,在这些需求上进行完美的设计,经过5年多的积累,

可以完美满足企业级的所有需求特别是查询功能,支持了各种类型的返回例如DataTable、List、字典等,还支持各种查询,

例如一次查询多个结果集,当然也支持存储过程

性能对比

在基础功能查询上性能双方是相当接近的,并且在不同CPU多台电脑上进行过大量测试,性能SqlSugar一点不占下风,甚至更好,

在SqlSugar源码中有对比代码,这边我就不多介绍了,性能永远是自个比才是真实的,别人比都是虚假的

移植教程

1、Sql加参数查询

Dapper 使用Sql加参数查询

 1         /// <summary>
2 /// 查询列表
3 /// </summary>
4 /// <param name="sql">查询的sql</param>
5 /// <param name="param">替换参数</param>
6 /// <returns></returns>
7 public static List<T> Query(string sql, object param)
8 {
9 using (SqlConnection con = new SqlConnection(connectionString))
10 {
11 return con.Query<T>(sql, param).ToList();
12 }
13 }

SqlSugar 使用Sql加参数查询

 1         /// <summary>
2 /// 查询列表
3 /// </summary>
4 /// <param name="sql">查询的sql</param>
5 /// <param name="param">替换参数</param>
6 /// <returns></returns>
7 public static List<T> Query(string sql, object param)
8 {
9 using (SqlSugarClient con =new SqlSugar.SqlSugarClient(connectionConfig))
10 {
11 return con.Ado.SqlQuery<T>(sql, param).ToList();
12 }
13 }

其中Object param支持3种类型

1、new {id=1} 匿名对象

2、SugarParameter

3、SugarParameter[] 或者List<SugarParameter >

2、根据Sql查询单条

Dapper根据Sql查询单条

    /// <summary>
/// 查询第一个数据
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static T QueryFirst(string sql, object param)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
return con.QueryFirst<T>(sql, param);
}
}

SqlSugar根据Sql查询单条

 1         /// <summary>
2 /// 查询列表
3 /// </summary>
4 /// <param name="sql">查询的sql</param>
5 /// <param name="param">替换参数</param>
6 /// <returns></returns>
7 public static List<T> Query(string sql, object param)
8 {
9 using (SqlSugarClient con =new SqlSugar.SqlSugarClient(connectionConfig))
10 {
11 return con.Ado.SqlQuerySingle<T>(sql, param).ToList();
12 }
13 }

3、增、删、改

Dapper增、删、改

        /// <summary>
/// 增删改
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static int Execute(string sql, object param)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
return con.Execute(sql, param);
}
}

SqlSugar增、删、改

     /// <summary>
/// 增、删、改
/// </summary>
/// <param name="sql">查询的sql</param>
/// <param name="param">替换参数</param>
/// <returns></returns>
public static int Query(string sql, object param)
{
using (SqlSugarClient con =new SqlSugar.SqlSugarClient(connectionConfig))
{
return con.Ado.ExecuteCommand(sql, param);
}
}

4、DataReader读取数据

Dapper DataReader读取数据

 1     /// <summary>
2 /// Reader获取数据
3 /// </summary>
4 /// <param name="sql"></param>
5 /// <param name="param"></param>
6 /// <returns></returns>
7 public static IDataReader ExecuteReader(string sql, object param)
8 {
9 using (SqlConnection con = new SqlConnection(connectionString))
10 {
11 return con.ExecuteReader(sql, param);
12 }
13 }

SqlSugar  DataReader读取数据

 1         /// <summary>
2 /// 获取DataReader
3 /// </summary>
4 /// <param name="sql">查询的sql</param>
5 /// <param name="param">替换参数</param>
6 /// <returns></returns>
7 public static IDataReader Query(string sql, object param)
8 {
9 using (SqlSugarClient con =new SqlSugar.SqlSugarClient(connectionConfig))
10 {
11 return con.Ado.GetDataReader(sql, param);
12 }
13 }

5、获取首行首列

Dapper获取首行首列

 1       /// <summary>
2 /// Scalar获取数据
3 /// </summary>
4 /// <param name="sql"></param>
5 /// <param name="param"></param>
6 /// <returns></returns>
7 public static object ExecuteScalar(string sql, object param)
8 {
9 using (SqlConnection con = new SqlConnection(connectionString))
10 {
11 return con.ExecuteScalar(sql, param);
12 }
13 }

SqlSugar获取首行首列

 1     /// <summary>
2 /// 获取首行首列
3 /// </summary>
4 /// <param name="sql">查询的sql</param>
5 /// <param name="param">替换参数</param>
6 /// <returns></returns>
7 public static object ExecuteScalar(string sql, object param)
8 {
9 using (SqlSugarClient con =new SqlSugar.SqlSugarClient(connectionConfig))
10 {
11 return con.Ado.GetScalar(sql, param);
12 }
13 }

6、获取存储过程

Dapper获取存储过程

 1      /// <summary>
2 /// 带参数的存储过程
3 /// </summary>
4 /// <param name="sql"></param>
5 /// <param name="param"></param>
6 /// <returns></returns>
7 public static List<T> ExecutePro(string proc, object param)
8 {
9 using (SqlConnection con = new SqlConnection(connectionString))
10 {
11 List<T> list = con.Query<T>(proc,
12 param,
13 null,
14 true,
15 null,
16 CommandType.StoredProcedure).ToList();
17 return list;
18 }
19 }

SqlSugar获取存储过程

 1       /// <summary>
2 /// 获取存储过程
3 /// </summary>
4 /// <param name="sql">查询的sql</param>
5 /// <param name="param">替换参数</param>
6 /// <returns></returns>
7 public static object ExecutePro<T>(string proc, object param)
8 {
9 using (SqlSugarClient con =new SqlSugar.SqlSugarClient(connectionConfig))
10 {
11 return con.Ado.UseStoredProcedure().SqlQuery<T>(proc, param);
12 }
13 }

7、事务执行多个Sql

Dapper事务执行多个Sql

 1   /// <summary>
2 /// 事务1 - 全SQL
3 /// </summary>
4 /// <param name="sqlarr">多条SQL</param>
5 /// <param name="param">param</param>
6 /// <returns></returns>
7 public static int ExecuteTransaction(string[] sqlarr)
8 {
9 using (SqlConnection con = new SqlConnection(connectionString))
10 {
11 using (var transaction = con.BeginTransaction())
12 {
13 try
14 {
15 int result = 0;
16 foreach (var sql in sqlarr)
17 {
18 result += con.Execute(sql, null, transaction);
19 }
20
21 transaction.Commit();
22 return result;
23 }
24 catch (Exception ex)
25 {
26 transaction.Rollback();
27 return 0;
28 }
29 }
30 }
31 }

Sugar事务执行多个Sql

 1         /// <summary>
2 /// 事务1 - 全SQL
3 /// </summary>
4 /// <param name="sqlarr">多条SQL</param>
5 /// <param name="param">param</param>
6 /// <returns></returns>
7 public static int ExecuteTransaction(string[] sqlarr)
8 {
9 using (SqlSugarClient con = new SqlSugarClient(connectionConfig))
10 {
11 con.Ado.BeginTran();
12 using (var transaction = con.Ado.Transaction)
13 {
14 try
15 {
16 int result = 0;
17 foreach (var sql in sqlarr)
18 {
19 result += con.Ado.ExecuteCommand(sql);
20 }
21
22 transaction.Commit();
23 return result;
24 }
25 catch (Exception ex)
26 {
27 transaction.Rollback();
28 return 0;
29 }
30 }
31 }
32 }

SqlSugar参数详解

SqlSugar同样支持游标 、Output、 ReturnValue

var nameP=new SugarParameter("@name", "张三", typeof(string),ParameterDirection.ReturnValue);

移植成SqlSugar ORM有哪些优点

同样是写Sql但是SqlSugar提供了AOP、性能监控、返回多个结果集、SQL分页、一对多、一对一操作

1、SqlSugar支持AOP等事件操作

 1 db.Aop.OnLogExecuted = (sql, pars) => //SQL执行完
2 {
3 Console.Write("time:" + db.Ado.SqlExecutionTime.ToString());//输出SQL执行时间
4 };
5 db.Aop.OnLogExecuting = (sql, pars) => //SQL执行前
6 {
7
8 };
9 db.Aop.OnError = (exp) =>//SQL报错
10 {
11 //exp.sql 这样可以拿到错误SQL
12 };
13 db.Aop.OnExecutingChangeSql = (sql, pars) => //可以修改SQL和参数的值
14 {
15 return new KeyValuePair<string, SugarParameter[]>(sql,pars);
16 };

除了这些事件外 SqlSugar还支持了性能监控,对于性能差的Sql或者存储过程都能很好的跟踪

 1    SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
2 {
3 DbType = DbType.SqlServer,
4 ConnectionString = Config.ConnectionString,
5 InitKeyType = InitKeyType.Attribute,
6 IsAutoCloseConnection = true
7
8 });
9 db.Aop.OnLogExecuted = (sql, p) =>
10 {
11 //执行时间超过1秒
12 if (db.Ado.SqlExecutionTime.TotalSeconds > 1)
13 {
14 //代码CS文件名
15 var fileName= db.Ado.SqlStackTrace.FirstFileName;
16 //代码行数
17 var fileLine = db.Ado.SqlStackTrace.FirstLine;
18 //方法名
19 var FirstMethodName = db.Ado.SqlStackTrace.FirstMethodName;
20 //db.Ado.SqlStackTrace.MyStackTraceList[1].xxx 获取上层方法的信息
21 }
22 };

因为内容比较多一下子写不完 ,没关注的点一波关注

源码下载:https://github.com/sunkaixuan/SqlSugar

最新文章

  1. [LeetCode] Battleships in a Board 平板上的战船
  2. 转:mysql根据经纬度查找排序
  3. iOS真机运行 Xcode报错(libpng error: CgBI: unhandled critical chunk)问题已解决;
  4. 使用内存虚拟硬盘 提高ArcGIS server并发性能的一种方法
  5. sscanf函数和正则表达式
  6. context:annotation-config 与context:component-scan
  7. 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&amp;&amp;向社区贡献代码
  8. Matlab验证公式取值范围
  9. 代理模式(proxy)
  10. MySQL 资源大全中文版
  11. Environment Configuration Files
  12. MVC3+EF5.0 code first+Flexigrid+ajax请求+jquery dialog 增删改查
  13. JavaScript 的使用基础总结①
  14. Django代码注意
  15. ArrayList 和 LinkedList 源码分析
  16. 逆向-攻防世界-logmein
  17. .net core 2.x - 日志 - to elasiticsearch
  18. 字符串相关的hash值(一)
  19. mongodb4.0.2 复制集主从部署
  20. python redis 操作

热门文章

  1. 理解 ASP.NET Core: 验证
  2. SQL SERVER数据库Left Join用法
  3. CSS @property - 实验性
  4. No matching distribution found for Tensorflow
  5. 超强工具集——GitHub 热点速览 Vol.47
  6. Java中的位掩码BitMask
  7. iOS如何实现语音播报及后台播放
  8. Docker基础知识及入门
  9. JS 使用xlsx.core.js 数据导出到excel
  10. SQL,T-SQL简介