.NET绿叶社区!
返回

国产轻量级ORMSqlSugar实践

2020-05-14 ORM 轻量级ORM SqlSugar 281 0

国产轻量级ORMSqlSugar实践。拥有高性能,高扩展性,稳定性和国内开发团队的技术支持。功能全面,性能与同样是轻量级ORM的Dapper相比更加出色。

可以从github下载SqlSugar

https://github.com/sunkaixuan/SqlSugar

SqlSugar是.NET版本,SqlSugarCore是.NET CORE版本,根据你的项目选择你的引用dll

国产轻量级ORMSqlSugar实践

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();

以上就是增删改查的一些基本使用方法,还有很多复杂技巧可以到作者官方文档查看。

点赞 收藏

顶部