文章目录

  • 1.上下文概念
  • 2.创建对象
    • 2.1 SqlSugarClient
      • 2.1.1 静态方法案例
      • 2.1.2 SqlSugar.IOC注入案例
      • 2.1.3 .NET IOC注入案例
    • 2.2 SqlSugarScope
      • 2.2.1 静态字段案例
      • 2.2.2 SqlSugar.IOC注入案例
      • 2.2.3 .NET IOC注入案例
  • 3.连接参数
  • 4.设置超时时间
  • 5.验证连接是否成功
  • 6.打印Sql
  • 7.国际化
  • 8.长连接、短连接用法
    • 8.1 自动释放(短连接,推荐这样使用)
    • 8.2 如何使用长连接
    • 8.3 使用场景
  • 9.配置最小时间

1.上下文概念

  • 同步情况:在同一个线程是同一个上下文
  • 异步情况:在同一串await中是一个上下文(await会改变线程,和同步是不一样的)

2.创建对象

2.1 SqlSugarClient

优点:

  • 性能比SqlSugarScope有5%的提升

缺点:

  • 不能使用单例
  • db不能跨上下文使用,每次需要new一个新对象
  • 偶发错误难排查,适合有经验的用户

2.1.1 静态方法案例

创建对象:

public class Sugar{public static SqlSugarClient GetInstance(){SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){DbType = SqlSugar.DbType.MySql,ConnectionString = "server = 127.0.0.1; Database = sugarlearn; Uid = root; Pwd = root; AllowLoadLocalInfile = true;",InitKeyType = InitKeyType.Attribute,IsAutoCloseConnection = true,LanguageType= LanguageType.Default});//每次Sql执行前事件db.Aop.OnLogExecuting = (sql, pars) =>{var queryString = new KeyValuePair<string, SugarParameter[]>(sql, pars);if (sql.StartsWith("UPDATE") || sql.StartsWith("INSERT")){Console.ForegroundColor = ConsoleColor.Blue;Console.WriteLine($"==============新增/修改操作==============");}if (sql.StartsWith("DELETE")){Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine($"==============删除操作==============");}if (sql.StartsWith("SELECT")){Console.ForegroundColor = ConsoleColor.Green;Console.WriteLine($"==============查询操作==============");}//ToSqlExplain 在标题6中有完整代码Console.WriteLine(ToSqlExplain.GetSql(queryString));//输出sqlConsole.ForegroundColor = ConsoleColor.White;};//SQL执行完db.Aop.OnLogExecuted = (sql, pars) =>{//执行时间超过1秒if (db.Ado.SqlExecutionTime.TotalSeconds > 1){//代码CS文件名var fileName = db.Ado.SqlStackTrace.FirstFileName;//代码行数var fileLine = db.Ado.SqlStackTrace.FirstLine;//方法名var FirstMethodName = db.Ado.SqlStackTrace.FirstMethodName;//sqlvar exesql = sql;//参数var sqlpars = pars;//db.Ado.SqlStackTrace.MyStackTraceList[1].xxx 获取上层方法的信息}};//SQL报错db.Aop.OnError = (exp) =>{Console.WriteLine(exp.Sql);//exp.sql 这样可以拿到错误SQL            };return db;}}

调用对象:

static void Main(string[] args)
{var db = Sugar.GetInstance();bool connect = db.Ado.IsValidConnection(); //验证连接是否成功List<Student> list = db.Queryable<Student>().ToList(); //查询Student表中所有数据Console.ReadLine();
}

2.1.2 SqlSugar.IOC注入案例

创建对象:

//Program.cs中添加如下代码SugarIocServices.AddSqlSugar(new IocConfig()
{//ConfigId="db01"  多租户用到ConnectionString = "server=127.0.0.1;Database=ToDoDB;Uid=root;Pwd=root; AllowLoadLocalInfile=true;",DbType = IocDbType.MySql,IsAutoCloseConnection = true//自动释放
}); //多个库就传List<IocConfig>//配置参数
SugarIocServices.ConfigurationSugar(db =>
{db.Aop.OnLogExecuting = (sql, p) =>{Console.WriteLine(sql);};//设置更多连接参数//db.CurrentConnectionConfig.XXXX=XXXX//db.CurrentConnectionConfig.MoreSettings=new ConnMoreSettings(){}//二级缓存设置//db.CurrentConnectionConfig.ConfigureExternalServices = new ConfigureExternalServices()//{// DataInfoCacheService = myCache //配置我们创建的缓存类//}//读写分离设置//laveConnectionConfigs = new List<SlaveConnectionConfig>(){...}/*多租户注意*///单库是db.CurrentConnectionConfig //多租户需要db.GetConnection(configId).CurrentConnectionConfig
});

调用对象:

public class TestController : ControllerBase
{private static readonly SqlSugarClient db = DbScoped.Sugar;public TestController(){}public JsonResult Test(){var cs = db.Queryable<Student>().ToList();return new JsonResult(cs);}
}

2.1.3 .NET IOC注入案例

注意:SqlSugarClient用 AddScoped 每次请求一个实例

创建对象:

public static class SqlsugarSetup{public static void AddSqlsugarSetup(this IServiceCollection services){SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = "server=127.0.0.1;Database=ToDoDB;Uid=root;Pwd=root; AllowLoadLocalInfile=true;",DbType = DbType.MySql,IsAutoCloseConnection = true,});//每次Sql执行前事件db.Aop.OnLogExecuting = (sql, pars) =>{var queryString = new KeyValuePair<string, SugarParameter[]>(sql, pars);if (sql.StartsWith("UPDATE") || sql.StartsWith("INSERT")){Console.ForegroundColor = ConsoleColor.Blue;Console.WriteLine($"==============新增/修改操作==============");}if (sql.StartsWith("DELETE")){Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine($"==============删除操作==============");}if (sql.StartsWith("SELECT")){Console.ForegroundColor = ConsoleColor.Green;Console.WriteLine($"==============查询操作==============");}//ToSqlExplain 在标题6中有完整代码Console.WriteLine(ToSqlExplain.GetSql(queryString));//输出sqlConsole.ForegroundColor = ConsoleColor.White;};//每次Sql执行后事件db.Aop.OnLogExecuted = (sql, pars) =>{//执行时间超过10秒if (db.Ado.SqlExecutionTime.TotalSeconds > 10){Console.WriteLine(sql);}};//SQL报错db.Aop.OnError = (exp) =>{Console.WriteLine(exp.Sql);//exp.sql 这样可以拿到错误SQL            };services.AddScoped<ISqlSugarClient>(it => { return db; });}}

Program.cs 依赖注入:

builder.Services.AddSqlsugarSetup();

调用对象:

private readonly ISqlSugarClient db;
public ToDoService(ISqlSugarClient _sqlSugarClient)
{db = _sqlSugarClient;
}public void Test()
{var list = db.Queryable<Student>();
}

2.2 SqlSugarScope

优点:

  • 必须使用单例模式
  • 推荐没有.NET开发经验的新手使用
  • 不用考虑任何线程问题,无脑使用,简单省事,较强性能
    支持同一个上下文共享事务

缺点:

  • 不使用单例模式,SqlSugarScope 一直 new 会存在内存泄露问题

2.2.1 静态字段案例

创建对象:

public class Sugar{public static SqlSugarScope db = new SqlSugarScope(new ConnectionConfig(){ConnectionString = "server = 127.0.0.1; Database = sugarlearn; Uid = root; Pwd = root; AllowLoadLocalInfile = true;",//连接符字串DbType = DbType.MySql,//数据库类型IsAutoCloseConnection = true //不设成true要手动close},db =>{//调试SQL事件db.Aop.OnLogExecuting = (sql, pars) =>{var queryString = new KeyValuePair<string, SugarParameter[]>(sql, pars);if (sql.StartsWith("UPDATE") || sql.StartsWith("INSERT")){Console.ForegroundColor = ConsoleColor.Blue;Console.WriteLine($"==============新增/修改操作==============");}if (sql.StartsWith("DELETE")){Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine($"==============删除操作==============");}if (sql.StartsWith("SELECT")){Console.ForegroundColor = ConsoleColor.Green;Console.WriteLine($"==============查询操作==============");}//ToSqlExplain 在标题6中有完整代码Console.WriteLine(ToSqlExplain.GetSql(queryString));//输出sqlConsole.ForegroundColor = ConsoleColor.White;};db.Aop.OnLogExecuted = (sql, pars) =>{//执行时间超过1秒if (db.Ado.SqlExecutionTime.TotalSeconds > 1){//代码CS文件名var fileName = db.Ado.SqlStackTrace.FirstFileName;//代码行数var fileLine = db.Ado.SqlStackTrace.FirstLine;//方法名var FirstMethodName = db.Ado.SqlStackTrace.FirstMethodName;//sqlvar exesql = sql;//参数var sqlpars = pars;//db.Ado.SqlStackTrace.MyStackTraceList[1].xxx 获取上层方法的信息}};});}

调用方法一(类调用):

class Program{static void Main(string[] args){bool connect = Sugar.db.Ado.IsValidConnection(); //验证连接是否成功List<Student> list = Sugar.db.Queryable<Student>().ToList(); //查询Student表中所有数据Console.ReadLine();}}

调用方法二(继承方式单例):

class Program : Sugar{static void Main(string[] args){bool connect = db.Ado.IsValidConnection(); //验证连接是否成功List<Student> list = db.Queryable<Student>().ToList(); //查询Student表中所有数据Console.ReadLine();}}

2.2.2 SqlSugar.IOC注入案例

创建对象:

//Program.cs中添加如下代码SugarIocServices.AddSqlSugar(new IocConfig()
{//ConfigId="db01"  多租户用到ConnectionString = "server=127.0.0.1;Database=ToDoDB;Uid=root;Pwd=root; AllowLoadLocalInfile=true;",DbType = IocDbType.MySql,IsAutoCloseConnection = true//自动释放
}); //多个库就传List<IocConfig>//配置参数
SugarIocServices.ConfigurationSugar(db =>
{db.Aop.OnLogExecuting = (sql, p) =>{Console.WriteLine(sql);};//设置更多连接参数//db.CurrentConnectionConfig.XXXX=XXXX//db.CurrentConnectionConfig.MoreSettings=new ConnMoreSettings(){}//二级缓存设置//db.CurrentConnectionConfig.ConfigureExternalServices = new ConfigureExternalServices()//{// DataInfoCacheService = myCache //配置我们创建的缓存类//}//读写分离设置//laveConnectionConfigs = new List<SlaveConnectionConfig>(){...}/*多租户注意*///单库是db.CurrentConnectionConfig //多租户需要db.GetConnection(configId).CurrentConnectionConfig
});

调用对象:

public class TestController : ControllerBase
{private static readonly SqlSugarScope db = DbScoped.SugarScope;public TestController(){}public JsonResult Test(){var cs = db.Queryable<Student>().ToList();return new JsonResult(cs);}
}

2.2.3 .NET IOC注入案例

注意:SqlSugarScope用单例AddSingleton 单例

创建对象:

public static class SqlsugarSetup{public static void AddSqlsugarSetup(this IServiceCollection services){SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig(){DbType = SqlSugar.DbType.MySql,ConnectionString = "server = 127.0.0.1; Database = ToDoDB; Uid = root; Pwd = root; AllowLoadLocalInfile = true;",IsAutoCloseConnection = true,},db =>{//每次Sql执行前事件db.Aop.OnLogExecuting = (sql, pars) =>{var queryString = new KeyValuePair<string, SugarParameter[]>(sql, pars);if (sql.StartsWith("UPDATE") || sql.StartsWith("INSERT")){Console.ForegroundColor = ConsoleColor.Blue;Console.WriteLine($"==============新增/修改操作==============");}if (sql.StartsWith("DELETE")){Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine($"==============删除操作==============");}if (sql.StartsWith("SELECT")){Console.ForegroundColor = ConsoleColor.Green;Console.WriteLine($"==============查询操作==============");}//ToSqlExplain 在标题6中有完整代码Console.WriteLine(ToSqlExplain.GetSql(queryString));//输出sqlConsole.ForegroundColor = ConsoleColor.White;};//SQL执行完db.Aop.OnLogExecuted = (sql, pars) =>{//执行时间超过1秒if (db.Ado.SqlExecutionTime.TotalSeconds > 1){//代码CS文件名var fileName = db.Ado.SqlStackTrace.FirstFileName;//代码行数var fileLine = db.Ado.SqlStackTrace.FirstLine;//方法名var FirstMethodName = db.Ado.SqlStackTrace.FirstMethodName;//sqlvar exesql = sql;//参数var sqlpars = pars;//db.Ado.SqlStackTrace.MyStackTraceList[1].xxx 获取上层方法的信息}};//SQL报错db.Aop.OnError = (exp) =>{Console.WriteLine(exp.Sql);//exp.sql 这样可以拿到错误SQL            };});services.AddSingleton<ISqlSugarClient>(sqlSugar);//这边是SqlSugarScope用AddSingleton}}

Program.cs 依赖注入:

builder.Services.AddSqlsugarSetup();

调用对象:

private readonly ISqlSugarClient db;
public ToDoService(ISqlSugarClient _sqlSugarClient)
{db = _sqlSugarClient;
}public void Test()
{var list = db.Queryable<Student>();
}

3.连接参数

名称 描述 必填
DbType 数据库类型
ConnectionString 连接字符串
IsAutoCloseConnection 手动释放(长连接),自动释放(短连接) 推荐自动释放 true
ConfigureExternalServices 一些扩展层务的集成
MoreSettings 更多设置 比如:配置最小时间
SlaveConnectionConfigs 主从设置
LanguageType 错误提示设置语言 中文、英文、中英文混合

4.设置超时时间

默认是30秒

  • 方法一:在连接字符串中添加 Connect Timeout=30;
  • 方法二:创建对象中添加代码
db.Ado.CommandTimeOut = 30;//单位秒

5.验证连接是否成功

//true:代表连接成功
bool connect = db.Ado.IsValidConnection();

6.打印Sql

Sql执行前的事件
在 db.Aop.OnLogExecuting 中拼接出完整Sql

 //每次Sql执行前事件
db.Aop.OnLogExecuting = (sql, pars) =>
{var queryString = new KeyValuePair<string, SugarParameter[]>(sql, pars);//ToSqlExplain 在标题6中有完整代码Console.WriteLine(ToSqlExplain.GetSql(queryString));//输出sql
};

ToSqlExplain.GetSql类中的方法(拼接出完整的Sql,方便查看)

public class ToSqlExplain{public static string GetSql(KeyValuePair<string, SugarParameter[]> queryString){var sql = queryString.Key;//sql语句var par = queryString.Value;//参数//字符串替换MethodConst1x会替换掉MethodConst1所有要从后往前替换,不能用foreach,后续可以优化for (int i = par.Length - 1; i >= 0; i--){if (par[i].ParameterName.StartsWith("@") && par[i].ParameterName.Contains("UnionAll")){sql = sql.Replace(par[i].ParameterName, par[i].Value.ToString());}}for (int i = par.Length - 1; i >= 0; i--){if (par[i].ParameterName.StartsWith("@Method")){sql = sql.Replace(par[i].ParameterName, "'" + par[i].Value.ToString() + "'");}}for (int i = par.Length - 1; i >= 0; i--){if (par[i].ParameterName.StartsWith("@Const")){sql = sql.Replace(par[i].ParameterName, par[i].Value.ToString());}}for (int i = par.Length - 1; i >= 0; i--){if (par[i].ParameterName.StartsWith("@")){//值拼接单引号 拿出来的sql不会报错sql = sql.Replace(par[i].ParameterName, "'" + Convert.ToString(par[i].Value) + "'");}}return sql;}}

7.国际化

创建对象的时候指定语言

  • 枚举说明
public enum LanguageType{Default=0, //中&英Chinese=1, //处理过的异常尽量中文,未处理的还是英文English=2 //全部英文}
  • 用法:
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = Config.ConnectionString,DbType = DbType.SqlServer,LanguageType=LanguageType.English,//只显示英文IsAutoCloseConnection = true });

8.长连接、短连接用法

8.1 自动释放(短连接,推荐这样使用)

  • 不需要再去写 Using 或者 Open 或者 Close
  • 没有事务的情况,每次操作自动调用 Open 或者 Close
  • 有事务的情况下,开启事务调用 Open ,提交或回滚事务调用 Close
IsAutoCloseConnection = true//自动释放

8.2 如何使用长连接

  • 事务中默认是长连接,结束后会自动关闭
  • 创建对象的时候,IsAutoCloseConnection = false 即是手动释放
  • 自动释放模式中,不使用事务的情况,可以使用 OpenAlways实现长连接
//5.0.6.3using (db.Ado.OpenAlways()) {db.Queryable...db.Insertable...}

8.3 使用场景

  • 插入一个局部临时表,如果不在一个会话中,查询不到,这时候可以将临时表操作和之后的操作放在一起,使用 db.Ado.OpenAlways() 实现长连接

9.配置最小时间

针对时间类型的字段
推荐还是使用默认的,这样多种数据库使用不会报错
如果需要强制指定,再添加此代码

//5.0.8.1
db.CurrentConnectionConfig.MoreSettings = new ConnMoreSettings{DbMinDate = DateTime.MinValue//默认最小时间是 1900-01-01 00:00:00.000 };

SqlSugar 2.入门必看相关推荐

  1. 95后数据科学家教你从零自学机器学习,这有3本入门必看书籍

    晓查 发自 凹非寺  量子位 编译 | 公众号 QbitAI 厌倦了现在的工作,想转行做数据科学,但是却没有计算机专业的相关学历,应该怎样才能入门? 这类的教程已经有很多.最近一位22岁的数据科学家D ...

  2. python基础教程书籍推荐-初学者python入门必看书籍推荐(上)

    随着最近Python的热度上涨,学习的人数也在增多,也因为Python这门语言的简短.易学.语言优美的优点,吸引了很多人来学习它.初学者想要入门,就必须先通过阅读,学习大量的理论知识对Python有一 ...

  3. arduino开发ESP8266配置方法,入门必看,esp8266开发板库离线安装包package2.7.1

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 群里经常有朋友问arduino开发ESP8266的配置方法,今天在之前的文章基础上, ...

  4. 200528更新arduino开发ESP8266配置方法,入门必看,esp8266开发板库离线安装包package2.7.1...

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 群里经常有朋友问arduino开发ESP8266的配置方法,今天(200528)在之 ...

  5. 怎么安装python_零基础入门必看篇:浅析python,PyCharm,Anaconda三者之间关系

    今天为大家带来的内容是:零基础入门必看篇:浅析python ,PyCharm,Anaconda三者之间关系 众所周知,Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C, ...

  6. powershell 开发入门_详谈Ubuntu PowerShell(小白入门必看教程)

    早在去年八月份PowerShell就开始开源跨平台了,但是一直没有去尝试,叫做PowerShell Core. 这里打算简单介绍一下如何安装和简单使用,为还不知道PowerShell Core on ...

  7. IntelliJ IDEA 最常用配置详细图解,新手入门必看

    转载自   IntelliJ IDEA 最常用配置详细图解,新手入门必看 刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工. 比如:设置文件字体大小,代 ...

  8. 五分钟教你使用vue-cli3创建项目(三种创建方式,小白入门必看)

    五分钟教你使用vue-cli3创建项目(三种创建方式,小白入门必看) 一.搭建vue环境 安装Nodejs 官网下载Nodejs,如果希望稳定的开发环境则下LTS(Long Time Support) ...

  9. 语音识别从菜鸟到入门必看的参考书目

    原标题:语音识别从菜鸟到入门必看的参考书目 此前研究这一方面的容,搜罗了些资料,在这里整理如下,做毕业设计,写毕业论文的朋友购书时可以参考一下: 一.<MATLAB数字信号处理> 编者:王 ...

最新文章

  1. vscode使用教程python-VS Code 配置 Python 开发环境
  2. hdu 3117 Fibonacci Numbers
  3. Keras之MLPR:利用MLPR算法(3to1【窗口法】+【Input(3)→(12+8)(relu)→O(mse)】)实现根据历史航空旅客数量数据集(时间序列数据)预测下月乘客数量问题
  4. linux 有用的命令,linux有用命令(持续更新)
  5. c++ 用类统计不及格人数_统计小课堂13
  6. Flutter1.12与原生Android交互(kotlin)
  7. ie代理配置错误_电缆厂组织结构图的7个常犯错误!
  8. Mysql启动报错解决方案:Failed to open log (file ‘./mysql-bin.000901‘, errno 2)
  9. c语言 增加 删除 修改的功能 不用链表,C语言的链表的创建、修改、添加与删除...
  10. problem c: 判断素数的函数_python100天 — Day 6 函数和模块的使用
  11. js php后端 安全,前端JS RSA加密,PHP后端解密实现密码安全传输
  12. kettle-spoon安装
  13. 小球碰撞(面向对象)
  14. 昆仑通态和S7 1200在线模拟仿真通讯
  15. python编程入门自学
  16. 达人篇:5)公差的正态分布与CPK与制程能力(重要)
  17. Spring Boot中的配置文件使用以及重新加载
  18. 2020年SEM小搜投放指南:竞价小渠道如何把效果做到极致
  19. java打印直角三角形解析_编写java程序,打印3个5行直角三角形图案 运行效果如下: 使用 方法 实现 代码截图,必须含有2位学号+姓名_学小易找答案...
  20. Unity3d与iOS交互开发—接入平台SDK必备技能

热门文章

  1. 超详细指南:苹果商店美版账号申请与支付宝充值攻略!
  2. uniapp--腾讯地图驾车路线规划
  3. 【Matlab】正态分布常用函数normpdf_normcdf_norminv_normrnd_normfit
  4. AES加密之五种模式
  5. 中国专科医院行业市场规模及未来发展趋势
  6. 多元logistic回归模型——spss步骤
  7. 表单控件——form
  8. 转载:丫鬟的新衣——劳动合同法的寓言
  9. 【问题】win10开机慢 底部任务栏出来慢
  10. python天气预报界面_Python 做 UI 超 easy!(3.1)——天气预报小工具