2020-05-14
418 0国产轻量级ORMSqlSugar实践。拥有高性能,高扩展性,稳定性和国内开发团队的技术支持。功能全面,性能与同样是轻量级ORM的Dapper相比更加出色。
可以从github下载SqlSugar
https://github.com/sunkaixuan/SqlSugar
SqlSugar是.NET版本,SqlSugarCore是.NET CORE版本,根据你的项目选择你的引用dll
Install-Package sqlSugar
Install-Package sqlSugarCore
下载打开Demo项目后,将SqlServerTest设为启动项,将项目里的config.cs文件里的数据库连接修改成自己的数据库地址,然后按F5就可以开始了。
Demo会自动帮你创建数据库和表。
使用ORM最多的功能就是增删改查了,那么我就自己写以下使用sqlSugar实现增删改查吧。
sqlSugar插入操作示例
在测试库SQLSUGAR4XTEST中有一张Order表,尝试为Order表新增一条数据
Order item1 = new Order() { Name = "orderName", Price = 12 }; var result1 = db.Insertable(item1).ExecuteCommand();
运行后成功插入一条记录。
插入的时候有这么几个方法,返回不同的结果:
ExecuteCommand 返回影响行数
ExecuteReutrnIdentity/ExecuteReturnBigIdentity 返回自增列int或long
ExecuteCommandIdentityIntoEntity 回bool, 并将identity赋值到实体
ExecuteReturnEntity 返回实体 , 只是自identity 添加到 参数的实体里面并返回,没有查2次库,所以有些默认值什么的变动是取不到的你们需要手动进行2次查询获取
sqlSugar删除操作示例
var db = GetInstance(); //根据实体删除(实体内主键一定要有值) var dr1 = db.Deleteable<Order>(new Order() { Id = 0 }).ExecuteCommand(); //根据实体集删除 var dr2 = db.Deleteable<Order>(new List<Order>() { new Order(){ Id=0 }, new Order(){ Id=1 } }).ExecuteCommand(); //使用锁 var dr3 = db.Deleteable<Order>(new Order() { Id = 0 }).With(SqlWith.RowLock).ExecuteCommand(); //根据主键删除 var dr4 = db.Deleteable<Order>(1).ExecuteCommand(); //根据主键批量删除 var dr5 = db.Deleteable<Order>(new int[] { 0, 1 }).ExecuteCommand(); //根据表达式删除 var dr6 = db.Deleteable<Order>(x => x.Id == 1).ExecuteCommand(); var dr7 = db.Deleteable<Order>(x => new int[] { 0, 1 }.Contains(x.CustomId)).ExecuteCommand();
以上示例写法是4.1.0.6 版本之后的优化写法,以根据实体删除为例,4.1.0.6版本以前的写法是
var dr1 = db.Deleteable<Order>().(new Order() { Id = 0 }).ExecuteCommand();
sqlSugar更新操作示例
SqlSugar更新分为2大类写法,1种是传实体对象的方式 这种是以实体对象为核心进行更新,不传实体对象这种是以表达式为核心进行更新。
Order updateObj = new Order() { Id = 15, Name = "newName" }; List<Order> updateObjs = new List<Order>() { updateObj }; //根据实体更新(主键要有值,主键是更新条件) var ur1 = db.Updateable(updateObj).ExecuteCommand(); //4.2.3添加了WhereColumns,根据条件列更新对象 var ur2 = db.Updateable(updateObj).WhereColumns(x => new { x.Name }).ExecuteCommand();//单列可以用x=>x.Name //当WhereColumns和UpdateColumns一起用时,需要把wherecolumns中的列加到UpdateColumns中,否则会报错 var ur3 = db.Updateable(updateObj).UpdateColumns(y=>new { y.Name,y.Price }).WhereColumns(x => new { x.Name }).ExecuteCommand(); //只更新实体的Name列,主键要有值 var ur4 = db.Updateable(updateObj).UpdateColumns(y => new { y.Name }).ExecuteCommand(); //使用锁 var ur5 = db.Updateable(updateObj).With(SqlWith.UpdLock).ExecuteCommand(); //批量实体更新 var ur6 = db.Updateable(updateObjs).ExecuteCommand(); //不传对象的用法 var ur7 = db.Updateable<Order>(x => new Order() { Name = "newName", CreateTime = DateTime.Now }).Where(y => y.Id == 1).ExecuteCommand(); //只更新Name var ur8 = db.Updateable<Order>(x => x.Name == "newName").Where(y => y.Id == 15).ExecuteCommand();
sqlSugar更新或插入操作示例
//主键存在库的情况 db.Saveable(updateObj).ExecuteReturnEntity(); //主键不存在库的情况 db.Saveable(new Order() { Name = "" }).ExecuteReturnEntity(); //可以设置插入过滤和指定列 db.Saveable(new Order() { Name = "" }).InsertColumns(it => it.Name).ExecuteReturnEntity(); db.Saveable(new Order() { Name = "" }).InsertIgnoreColumns(it => it.Name).ExecuteReturnEntity(); //也可以设置更新过滤和指定列 db.Saveable(updateObj).UpdateIgnoreColumns(it => it.Name).ExecuteReturnEntity(); db.Saveable(updateObj).UpdateColumns(it => new { it.Name, it.CreateTime }).ExecuteReturnEntity();
sqlSugar查询操作示例
//表达式查询 var lr1 = db.Queryable<Order>().Where(x => x.Id == 1).ToList(); //无锁查询 var lr2 = db.Queryable<Order>().With(SqlWith.NoLock).ToList();
以上就是增删改查的一些基本使用方法,还有很多复杂技巧可以到作者官方文档查看。