- SqlSugar介绍及应用场景
1. 真正可以实现零SQL的ORM 建表、索引和CRUD全部支持
2. 支持 .NET 百万级大数据写入、更新、分表和拥有几十亿查询统计成熟解决方案
3. 支持 SAAS 完整应用 :跨库查询 、审计、租户分库 、租户分表 和 租户数据隔离
4. 支持低代码+工作流 (动态建类 、动态建表、无实体多库兼容CRUD 、 JSON TO SQL 、自定义XML等)
5. 支持ValueObject、鉴别器、仓储、UnitOfWork、DbContext、AOP
6. 支持 DbFirst、CodeFirst和WebFirst 3种模式开发
7. 简单易用、功能齐全、高性能、轻量级、服务齐全、官网教程文档、有专业技术支持一天18小时服务
8. 完美支持AOT:多种数据库
SqlSugar是一款专为.NET平台设计的轻量级ORM(对象关系映射)框架,由果糖大数据科技团队维护和更新。它提供了一种无缝的桥梁,将业务逻辑与数据库交互连接起来,使得开发者无需编写大量繁琐的SQL语句,即可完成数据的CRUD(创建、读取、更新和删除)操作。以下是对SqlSugar的详细介绍及其应用场景:
SqlSugar介绍
-
功能特点:
- 高性能:在大数据量的插入和查询操作中,SqlSugar的性能明显优于其他ORM框架。它优化了SQL生成策略,并在底层对数据库操作进行了精细优化。
- 高扩展性:支持自定义Lamada函数解析、扩展数据类型、支持自定义实体特性、外部缓存等,满足复杂和定制化的需求。
- 多数据库支持:全面支持包括MySql、SqlServer、Sqlite、Oracle在内的多个数据库,并且对国内常见的国产数据库如达梦、人大金仓等也提供良好支持。
- 动态SQL生成:根据查询条件自动构建高效的SQL语句,避免手写SQL的麻烦。
- 代码生成器:内置的代码生成工具可以自动生成基于数据库表的实体类和DAL(数据访问层),节省开发时间。
- 事务管理:提供简便的事务控制,确保多条操作可以在一个原子性、一致性、隔离性和持久性的事务中执行。
- 缓存机制:支持二级缓存,可以显著提高应用性能。
- LINQ查询支持:利用C#的LINQ功能,可以写出更符合编程习惯的查询代码。
-
优点:
- 简单易用:简洁明了的API设计,学习成本低,易于上手。
- 功能全面:虽然SqlSugar小巧,但其功能并不逊色于其他ORM框架。
- 持续更新:框架持续迭代和更新,保持对新技术的支持和兼容。
- 社区活跃:拥有活跃的开发者社区,问题响应及时,用户支持良好。
应用场景
SqlSugar适用于各种类型的应用场景,包括但不限于:
- Web开发:在构建Web应用时,SqlSugar可以帮助开发者快速完成数据库操作,提高开发效率。无论是电商网站中的订单管理、用户行为记录还是报表生成,SqlSugar都能提供强大的支持。
- 桌面应用:对于需要频繁与数据库交互的桌面应用,SqlSugar的高性能和低耦合性使得开发更加高效。
- 移动服务端:在构建移动应用的服务端时,SqlSugar可以简化数据库操作,使开发者更专注于业务逻辑的实现。
- 数据密集型应用:对于需要处理大数据量或进行实时数据分析的应用,SqlSugar的高性能和扩展性能够满足其需求。
- 快速原型开发:在快速搭建数据库相关功能时,SqlSugar的代码生成器和动态SQL生成功能可以显著节省开发时间。
- 维护现有系统:在已有项目中,如果当前的数据库访问层存在低效或不完善的问题,可以考虑使用SqlSugar进行替换,以提升系统性能和可维护性。
综上所述,SqlSugar凭借其高性能、高扩展性、多数据库支持以及简单易用的特点,在.NET开发领域具有广泛的应用前景。
- SqlSugar连接多个数据库
//---------------------多库操作------------------------------
//主db
var db = new SqlSugarClient(new List<ConnectionConfig>()
{
new ConnectionConfig(){ConfigId="A",DbType=SqlSugar.DbType.SqlServer,ConnectionString="Database=netcoredev;Server=.;Integrated Security=false;User ID=sa;Password=1;",IsAutoCloseConnection=true},
new ConnectionConfig(){ConfigId="B",DbType=SqlSugar.DbType.SqlServer,ConnectionString="Database=netcoredevtest1;Server=.;Integrated Security=false;User ID=sa;Password=1;",IsAutoCloseConnection=true },
new ConnectionConfig(){ConfigId="C",DbType=SqlSugar.DbType.SqlServer,ConnectionString="Database=netcoredevtest2;Server=.;Integrated Security=false;User ID=sa;Password=1;",IsAutoCloseConnection=true }
});
//获取子Db
var childA = db.GetConnection("A");
var childB = db.GetConnection("B");
var childC = db.GetConnectionScope("C");//线程安全
//使用子Db用
var lsA = childA.Queryable<Sys_Log>().ToList();
var lsB = childB.Queryable<Sys_Log>().ToList();
var lsC = childC.Queryable<Sys_Log>().ToList();
//-----------------------------多库事务----------------------------
childA.CodeFirst.InitTables<Order>();
childB.CodeFirst.InitTables<Order>();
childC.CodeFirst.InitTables<Order>();
// 开启事务
try
{
db.BeginTran(); //不能是db.Ado.BeginTran
db.GetConnection("A").Insertable(new Order()
{
Id = 1,
CreateTime = DateTime.Now,
CustomId = 1,
Name = "a",
Price = 1
}).ExecuteCommand();
db.GetConnection("B").Insertable(new Order()
{
Id = 2,
CreateTime = DateTime.Now,
CustomId = 1,
Name = "a",
Price = 1
}).ExecuteCommand();
db.GetConnection("C").Insertable(new Order()
{
Id = 55,
CreateTime = DateTime.Now,
CustomId = 1,
Name = "a",
Price = 1
}).ExecuteCommand();
//提交事务
db.CommitTran(); //不能是db.ado.CommitTran
}
catch (Exception ex)
{
//回滚事务
db.RollbackTran();
}
- SqlSugar连接单个数据库实现增删改查
public static void opCURD()
{
//创建数据库对象 (用法和EF Dappper一样通过new保证线程安全)
SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = "Data Source=.;Initial Catalog=netcoredev;Persist Security Info=True;User ID=sa;Password=1;Connect Timeout=500;",
DbType = DbType.SqlServer,
IsAutoCloseConnection = true
},
db =>
{
db.Aop.OnLogExecuting = (sql, pars) =>
{
//获取原生SQL推荐 5.1.4.63 性能OK
Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));
//获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用
//Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars))
};
//注意多租户 有几个设置几个
//db.GetConnection(i).Aop
});
//建库
Db.DbMaintenance.CreateDatabase();//达梦和Oracle不支持建库
//建表(看文档迁移)
Db.CodeFirst.InitTables<Student>(); //所有库都支持
//查询表的所有
var list = Db.Queryable<Student>().ToList();
//插入
Db.Insertable(new Student() { SchoolId = 1, Name = "jack" }).ExecuteCommand();
//更新
Db.Updateable(new Student() { Id = 1, SchoolId = 2, Name = "jack2" }).ExecuteCommand();
//删除
Db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();
Console.WriteLine("恭喜你已经入门了,后面只需要用到什么查文档就可以了。");
Console.ReadKey();
}
- SqlSugar批量操作
海量数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现
当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API
操作数据库达到极限性能
1.1 BulkCopy
大数据插入
|
1.2 BulkUpdate
大数据更新
|
1.3 BulkMerge (5.1.4.109)
大数据 : 插入或者更新
|
1.4 BulkQuery
普通查询就行了性能超快
|
1.5 BulkDelete
直接用分页删除就行了
|
2、WinForm中注意
winform中推荐用异步事件 async await
如果用同步方法要加Task.Run 不然会卡死UI
|
3、产品对比
插入的列越多,越能体现性能
Db.Fastest.BulkCopy 比 EFCore.Bulkextension 快30% 插入的列的数量越多越强
Db.Fastest.BulkUpdate 是 EFCore.Bulkextension 2-3倍
SqlSugar>EFCore.Bulkextension>Dapper (ef plus & dapper plus 收费框架 未进行测试)
- SqlSugar操作数据库表返回DataTable
- 原生 Sql 操作 ,Sql和存储过程
功能介绍
下面的方法支持复杂的Sql 、 返回多个结果集 、存储过程等 、可以理解为了一个高级DbHelper
- 1、用法介绍
|
2、方法列表
方法名 |
描述 |
返回值 |
SqlQuery< T > |
查询所有返回实体集合 |
List |
SqlQuery<T,T2> |
可以返回2个结果集 |
Tuple<List, List> SQLITE(驱动)需要查询前面加上 this.Context.Ado.IsClearParameters=false; |
SqlQuerySingle |
查询第一条记录 |
T |
SqlQuery<dynamic> |
查查询所有返回匿名对象 |
dynamic |
GetDataTable |
查询所有 |
DataTable |
GetDataReader |
读取DR需要手动释放DR |
DataReader |
GetDataSetAll |
获取多个结果集 |
DataSet |
ExecuteCommand |
返回受影响行数,一般用于增删改 |
int |
GetScalar |
获取首行首列 |
object |
GetString |
获取首行首列 |
string |
GetInt |
获取首行首列 |
int |
GetLong |
获取首行首列 |
long |
GetDouble |
获取首行首列 |
Double |
GetDecimal |
获取首行首列 |
Decimal |
GetDateTime |
获取首行首列 |
DateTime |
t3、使用案例
技巧:Sql中的关键词用@可以支持多库
|
Sql 查询用
GetDataTable
SqlQuery
Sql 增删改用
增删 改可以用 ExecuteCommand
4、 调用存储过程
|
5、in参数用法
|
6、SqlServer带Go的脚本处理
|