一、SqlSugar是什么?
做.NET开发的,应该都听说过SqlSugar。它是一款国产ORM框架,官网:
https://www.donet5.com/Home/Doc
说白了就是让你用C#代码操作数据库,不用手写SQL。写起来像这样:
var students = db.Queryable<Student>().Where(it => it.Age > 18).ToList();
不用记SELECT、FROM、WHERE,直接用你熟悉的Lambda表达式,编译还报错。
二、支持多少种数据库?
这是SqlSugar最硬的能力之一——30多种数据库,一套代码通杀。
MySQL、SqlServer、Oracle、PostgreSQL、SQLite这些主流的不说了,关键是国产数据库:达梦、人大金仓、神通、瀚高、GaussDB,全支持。
更狠的是,切换数据库只需要改一行DbType配置,底层SQL自动适配。甲方说要换数据库,你改一行配置就完事。
四、怎么用?多例还是单例?
用起来很简单,NuGet装包后new一个客户端就行。官方提供了两种模式:多例(SqlSugarClient)和单例(SqlSugarScope)。新手直接用多例,每次new一个,简单不出错;想全局共享一个实例就用单例,都行。
// 多例var db = new SqlSugarClient(new ConnectionConfig(){...});// 单例var db = new SqlSugarScope(new ConnectionConfig(){...});
五、以前:一堆WhereIf写到吐
做业务系统,最烦的就是多条件筛选——用户列表页,上面七八个筛选项,每个都可能填也可能不填。
传统的写法,就是一堆if:
var query = db.Queryable<User>();if (!string.IsNullOrEmpty(name)) query = query.Where(it => it.Name.Contains(name));if (minAge.HasValue) query = query.Where(it => it.Age >= minAge);if (maxAge.HasValue) query = query.Where(it => it.Age <= maxAge);if (!string.IsNullOrEmpty(city)) query = query.Where(it => it.City == city);if (vipLevel.HasValue) query = query.Where(it => it.VipLevel == vipLevel);if (startTime.HasValue) query = query.Where(it => it.CreateTime >= startTime);if (endTime.HasValue) query = query.Where(it => it.CreateTime <= endTime);// 还有更多...var result = query.ToList();
六:现在:前端传什么就查什么,一行字段名都不写
前端传的格式
[ { "FieldName": "Name", "ConditionalType": 2, "FieldValue": "张三" }, { "FieldName": "Age", "ConditionalType": 5, "FieldValue": "18" }, { "FieldName": "City", "ConditionalType": 0, "FieldValue": "北京" }]
FieldName:要查询的字段名ConditionalType:操作类型枚举(0=等于、1=不等于、2=模糊、3=大于、4=大于等于、5=小于、6=小于等于...)FieldValue:查询的值
https://www.donet5.com/home/Doc?typeId=2314
后端通用代码(一行字段名都不写死)
var query = _db.Queryable<User>();if (!string.IsNullOrEmpty(dynamics.data)){ var conditions = JsonConvert.DeserializeObject<List<ConditionRequest>>(dynamics.data); var conModels = new List<IConditionalModel>(); foreach (var item in conditions) { conModels.Add(new ConditionalModel { FieldName = item.FieldName, FieldValue = item.FieldValue, ConditionalType = item.ConditionalType }); } query = query.Where(conModels); // 直接传条件集合,SqlSugar自动解析}var result = await query.ToListAsync();
核心优势:
后端完全不用写死任何字段名
加任何新筛选条件,前端自己加,后端一行代码不改
一套动态查询逻辑,通吃项目中所有业务表
ConditionalModel还支持联表字段,比如"order.code"直接写就行
很多人担心ORM有性能损耗,但SqlSugar在底层做了大量优化:缓存、表达式树编译、批量操作……性能表现无限接近原生ADO.NET,甚至在某些场景下比Dapper还快。你要性能,它给你性能;你要方便,它给你方便。
ORM框架没有绝对的好坏,只有合不合适。但对于大多数.NET项目,尤其是需要快速迭代、可能换数据库、动态查询多的项目,SqlSugar真的是一个“选了不会错”的方案。