SqlSugar4.0ORM框架的优势
为了未来能够更好的⽀持多库分布式的存储,并⾏计算等功能,将SqlSugar3.x全部重写,现有的架构可以轻松扩展多库。
源码下载:
1.性能
性能最好的ORM之⼀,具有超越Dapper的性能 ,⾛的是EMIT够构中间语⾔动态编译到程序集,完成⾼性能的实体绑定,达到原⽣⽔平。
测试⽅式⽤Realease模式,Realease DLL 进⾏的车轮战
2.功能
除了EF以外可以说的是功能最⼤的ORM框架
⽀持 DbFirst、CodeFirst、数据库维护、链式查询、链式更新、链式删除、链式插⼊、实体属性、复杂模型的查询、ADO.NET。特别是批量等功能都是货真价实的并⾮循环操作。
SqlSugar 4.0版本 6⽉底⽀持SqlSever的Core版 ,预计7⽉份⽀持多库,8⽉分开始分布式ORM的开发。 (3.x版本已经⽀持了4种数据库,相对稳定功能简单)
3.语法
完美的语法,可以秒杀现有所有ORM框架
SqlSugar 4.0 三表查询并分页
int total=0;
var list8 = db.Queryable<Student,School,School>((st,sc,sc2) =>st.SchoolId ==sc.Id&&sc.Id ==sc2.Id)                .Select((st, sc, sc2) =>new{st.Name,st.Id,schoolName = sc.Name})
.
ToPageList(1, 2,ref total)
EF ⼆表查询并分页
var queryable = (from a in StudentList
join b in SchoolList1
on a.Id equals b.Id into b1
from b2 in b1.DefaultIfEmpty()
select new
{
a.Id,
a.Name,
t = b2.Name
});
var listp = queryable.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
var total = queryable.Count();
从上⾯的语法可以看出两者之前的差距,3表查询⽐EF2表查询还要简洁
我们在来看⼀下条件拼接的例⼦
SqlSugar语法:
var list = db.Queryable<Student>()
.WhereIF(!string.IsNullOrEmpty(a),it => it.Name == a)
.WhereIF(!string.IsNullOrEmpty(b), it => it.Name == b).ToList();
EF语法:
var queryable = db.Queryable<Student>();
if (!string.IsNullOrEmpty(a)) {
批量更新sql语句
queryable = queryable.Where(it => it.Name == a);
}
if (!string.IsNullOrEmpty(b)) {
queryable = queryable.Where(it => it.Name == b);
}
var list = queryable.ToList();
是不是简单很多呢?
4.轻量级
总⼤⼩只有200多K,⽐EF的⼀个⼩插件都⼩,EF主体有5M
5.持续更新
本来4.X预计3⽉份就可以开发完成的,因为换了新公司半年都是996⼯作制,我只有周⽇和晚上有时间开发,可以说我基本都没有休息过。下半年⼯作不会这么紧,我的时间会更充⾜⼀些。
功能详解
SqlSugar 4.X  总共有九⼤核⼼功能,并且都设计为链式操作,链式操作有什么好处?
第⼀链式操作可以减少⽅法的重载
第⼆链式操作可以让代码更加易读,举个例⼦⼀个⽅法有很多重载,你在写的代码就不清楚这些重载是做嘛的,需要F12到⽅法主体去看备注。
例如:第⼀种写法就能清楚的知道 是否建创属性,并且只创建Student这张表的⽂件,第⼆种⽅法虽然简单不易读
db.DbFirst.IsCreateAttribute().Where("Student").CreateClassFile("c:\\Demo\\5");
db.DbFirst.CreateClassFile(true,"Student","c:\\Demo\\5");
第三链式操更具有扩展性  例如有1234 我可以1和2⼀组,234⼀组 1和4⼀组,如果是重载的⽅式⾄少要有⼗个以上的重载后期将很难维护,功能越多后期易读越差,也不灵活。
1.Queryable
查询的核⼼对象,可以实现多表查询,分组查询,分页,⽀持SqlFunc函数和拉姆达解析,除EF外也是对拉姆达解析⽀持最好的ORM之⼀简单查询
查询所有
var getAll = db.Queryable<Student>().ToList();
⽆锁查询
var getAllNoLock = db.Queryable<Student>().With(SqlWith.NoLock).ToList();
根据主键查询
var getByPrimaryKey = db.Queryable<Student>().InSingle(2)
查询单条没有数据返回NULL, Single超过1条会报错,First不会
var getSingleOrDefault = db.Queryable<Student>().Single();
var getFirstOrDefault = db.Queryable<Student>().First();
IN查询
//Id In (1,2,3)
var in1 = db.Queryable<Student>().In(it=>it.Id,new int[] { 1, 2, 3 }).ToList();
//主键 In (1,2,3)
var in2 = db.Queryable<Student>().In(new int[] { 1, 2, 3 }).ToList();
//Id In (1,2)
int[] array = new int[] { 1, 2 };
var in3 = db.Queryable<Student>().Where(it=>array.Contains(it.Id)).ToList();
NOT IN查询
var in3 = db.Queryable<Student>().Where(it=>!array.Contains(it.Id)).ToList();
多条件查询
var getByWhere = db.Queryable<Student>().Where(it => it.Id == 1 || it.Name == "a").ToList();
使⽤函数 SqlFunc类
var getByFuns = db.Queryable<Student>().Where(it => SqlFunc.IsNullOrEmpty(it.Name)).ToList();
可以使⽤ SUM MAX MIN AVG查询单个字段
var sum = db.Queryable<Student>().Sum(it => it.Id);
Between 1 and 20
var between = db.Queryable<Student>().Where(it => SqlFunc.Between(it.Id, 1, 20)).ToList();
使⽤ AS 取新的表名
var getListByRename = db.Queryable<School>().AS("Student").ToList();
排序
var getAllOrder = db.Queryable<Student>()
.OrderBy(it => it.Id)//asc
.OrderBy(it => it.Name, OrderByType.Desc)//desc
.ToList()
是否存在这条记录
var isAny = db.Queryable<Student>().Where(it => it.Id == -1).Any();
var isAny2 = db.Queryable<Student>().Any(it => it.Id == -1);
获取同⼀天的记录
var getTodayList = db.Queryable<Student>().Where(it => SqlFunc.DateIsSame(it.CreateTime, DateTime.Now)).ToList();多表查询

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。