SqlSugar 2.入门必看
文章目录
- 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.入门必看相关推荐
- 95后数据科学家教你从零自学机器学习,这有3本入门必看书籍
晓查 发自 凹非寺 量子位 编译 | 公众号 QbitAI 厌倦了现在的工作,想转行做数据科学,但是却没有计算机专业的相关学历,应该怎样才能入门? 这类的教程已经有很多.最近一位22岁的数据科学家D ...
- python基础教程书籍推荐-初学者python入门必看书籍推荐(上)
随着最近Python的热度上涨,学习的人数也在增多,也因为Python这门语言的简短.易学.语言优美的优点,吸引了很多人来学习它.初学者想要入门,就必须先通过阅读,学习大量的理论知识对Python有一 ...
- arduino开发ESP8266配置方法,入门必看,esp8266开发板库离线安装包package2.7.1
公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 群里经常有朋友问arduino开发ESP8266的配置方法,今天在之前的文章基础上, ...
- 200528更新arduino开发ESP8266配置方法,入门必看,esp8266开发板库离线安装包package2.7.1...
公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 群里经常有朋友问arduino开发ESP8266的配置方法,今天(200528)在之 ...
- 怎么安装python_零基础入门必看篇:浅析python,PyCharm,Anaconda三者之间关系
今天为大家带来的内容是:零基础入门必看篇:浅析python ,PyCharm,Anaconda三者之间关系 众所周知,Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C, ...
- powershell 开发入门_详谈Ubuntu PowerShell(小白入门必看教程)
早在去年八月份PowerShell就开始开源跨平台了,但是一直没有去尝试,叫做PowerShell Core. 这里打算简单介绍一下如何安装和简单使用,为还不知道PowerShell Core on ...
- IntelliJ IDEA 最常用配置详细图解,新手入门必看
转载自 IntelliJ IDEA 最常用配置详细图解,新手入门必看 刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工. 比如:设置文件字体大小,代 ...
- 五分钟教你使用vue-cli3创建项目(三种创建方式,小白入门必看)
五分钟教你使用vue-cli3创建项目(三种创建方式,小白入门必看) 一.搭建vue环境 安装Nodejs 官网下载Nodejs,如果希望稳定的开发环境则下LTS(Long Time Support) ...
- 语音识别从菜鸟到入门必看的参考书目
原标题:语音识别从菜鸟到入门必看的参考书目 此前研究这一方面的容,搜罗了些资料,在这里整理如下,做毕业设计,写毕业论文的朋友购书时可以参考一下: 一.<MATLAB数字信号处理> 编者:王 ...
最新文章
- vscode使用教程python-VS Code 配置 Python 开发环境
- hdu 3117 Fibonacci Numbers
- Keras之MLPR:利用MLPR算法(3to1【窗口法】+【Input(3)→(12+8)(relu)→O(mse)】)实现根据历史航空旅客数量数据集(时间序列数据)预测下月乘客数量问题
- linux 有用的命令,linux有用命令(持续更新)
- c++ 用类统计不及格人数_统计小课堂13
- Flutter1.12与原生Android交互(kotlin)
- ie代理配置错误_电缆厂组织结构图的7个常犯错误!
- Mysql启动报错解决方案:Failed to open log (file ‘./mysql-bin.000901‘, errno 2)
- c语言 增加 删除 修改的功能 不用链表,C语言的链表的创建、修改、添加与删除...
- problem c: 判断素数的函数_python100天 — Day 6 函数和模块的使用
- js php后端 安全,前端JS RSA加密,PHP后端解密实现密码安全传输
- kettle-spoon安装
- 小球碰撞(面向对象)
- 昆仑通态和S7 1200在线模拟仿真通讯
- python编程入门自学
- 达人篇:5)公差的正态分布与CPK与制程能力(重要)
- Spring Boot中的配置文件使用以及重新加载
- 2020年SEM小搜投放指南:竞价小渠道如何把效果做到极致
- java打印直角三角形解析_编写java程序,打印3个5行直角三角形图案 运行效果如下: 使用 方法 实现 代码截图,必须含有2位学号+姓名_学小易找答案...
- Unity3d与iOS交互开发—接入平台SDK必备技能
热门文章
- 超详细指南:苹果商店美版账号申请与支付宝充值攻略!
- uniapp--腾讯地图驾车路线规划
- 【Matlab】正态分布常用函数normpdf_normcdf_norminv_normrnd_normfit
- AES加密之五种模式
- 中国专科医院行业市场规模及未来发展趋势
- 多元logistic回归模型——spss步骤
- 表单控件——form
- 转载:丫鬟的新衣——劳动合同法的寓言
- 【问题】win10开机慢 底部任务栏出来慢
- python天气预报界面_Python 做 UI 超 easy!(3.1)——天气预报小工具