SqlSugar

真正实现零sql
查询速度快于EF
支持【低代码】模式
支持多种数据库

使用配置

  1. 根据使用需求导入NuGet包 .net core SqlSugarCore或者 .net framework SqlSugar
    请添加图片描述
  2. 配置文件appsettings.json设置链接字符串
    请添加图片描述
  "ConnectionStrings": {
    "sqlcon": "Server=.;User Id=sa;Password=123456;Database=UserSetting;Persist Security Info=True;Encrypt=false"
  },
  1. 声明静态类服务 扩展功能(类似于链接数据库操作)

请添加图片描述其他配置不需要改动(可以直接粘贴说明文档中的方法,只需要改动标注部分)

public static class SqlSugarSetup
	{
		public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration, string dbName = "sqlcon")
		{
			//如果多个数数据库传 List<ConnectionConfig>
			var configConnection = new ConnectionConfig()
			{
				DbType = SqlSugar.DbType.SqlServer,//链接的数据库类型
				ConnectionString = configuration.GetConnectionString(dbName),
				IsAutoCloseConnection = true,
			};
			SqlSugarScope sqlSugar = new SqlSugarScope(configConnection, /*单例注册参数配置服务*/
				db =>
				{
					//单例参数配置,所有上下文生效
					db.Aop.OnLogExecuting = (sql, pars) =>
					{
						//Console.WriteLine(sql);//输出sql
					};
				});
			services.AddSingleton<ISqlSugarClient>(sqlSugar);//这边是SqlSugarScope用AddSingleton
		}
	}
  1. 入口文件 注册SqlSugar服务
    请添加图片描述
  • 根据创建完成 SqlSugarSetup类=>
  • Program.cs中引用Models(因为案例是创建的功能类,在Models下(需要进行引用))=>
  • 注册服务(并且将配置文件传递给注册的功能类)

配置完成,可以进行使用了!

简单使用

DbFirst生成实体类

ISqlSugarClient是一个.NET标准库,提供了一种简单易用的方式来与SQL数据库进行交互,使用的是SugarORM ORM库。它允许您执行SQL查询、插入、更新和删除数据,并使用LINQ表达式从数据库中检索数据。

  1. 通过依赖注入使用SqlSugar
//依赖注入SqlSugar
public readonly ISqlSugarClient db;
public UserController(ISqlSugarClient sugarClient)
{
	db = sugarClient;
}

//创建实体类
//创建类的文件 调用时创建(只创建一次) 第一个参数是地址,第二个参数是命名空间
db.DbFirst.CreateClassFile(@"D:\wuhan\.NET Core\Use_SqlSugar240102\Use_SqlSugar240102\Models","Models");

CodeFist生成数据库表(待补充)

操作数据库

操作数据库可以查询官方文档很全,以下举了一些例子

辅助文档
官方文档安装使用
SqlSugar
Free Sql

查询

查询条数
//查询条数
int lcounnt=db.Queryable<UserInfo>().Count();
查询单表(带where条件)多条件使用&&链接
//查询单表(带where条件)多条件使用&&链接
var list1= db.Queryable<UserInfo>().Where(u => u.uid < 3 && u.phone!="11111111111").ToList();
动态or查询
//动态or查询 OrIF(只有符合条件才会拼接or后面的语句)
//作为查询语句的一部分 OrIF(or) AndIF(and)
var exp = Expressionable.Create<UserInfo>().OrIF(vadata.role_id > 0, u => u.role_id == vadata.role_id);
exp.AndIF(!string.IsNullOrEmpty(vadata.uname), u => u.uname.Contains(vadata.uname));

在 SQLSugar 中,Expressionable.Create<Student>() 是用来创建一个 ICache<T> 接口的实例,用于在后续操作中进行缓存操作。
Student 类型的实体对象将会被序列化为数据库中的 SQL 语句和参数,以便进行数据库操作。
Expressionable.Create<Student>() 方法的作用是返回一个 Expression 对象,该对象表示了一个类型为 Student 的实体对象的表达式。
通过这个表达式,我们可以对实体对象进行操作,例如设置属性值、调用方法等,这些操作最终会被序列化为数据库操作的 SQL 语句和参数,从而实现对实体对象的数据库操作。
Expressionable.Create<Student>() 方法是 SQLSugar 中一个非常重要的方法,用于创建实体对象的表达式,从而进行数据库操作。

联表查询

LeftJoin左连接 RightJoin右连接

//联表查询
var list =db.Queryable<UserInfo>().Where(exp.ToExpression()).LeftJoin<RoleInfo>((u, r) => (u.role_id == r.rid))
	.Select((u, r) => new
	{
		u.uid,
		u.uname,
		u.phone,
		r.rname,
		u.isautonym
	}).ToPageList(page, limit, ref count).ToList();
in查询
string[] ids = id.Split(',');
//in 查询
List<UserInfo> usi= db.Queryable<UserInfo>().Where(it => ids.Contains(it.uid.ToString())).ToList();

添加

忽略插入某几列
//忽略 name testid ExecuteReturnIdentity() 返回主键值
db.Insertable(insertObj).IgnoreColumns("Name", "TestId").ExecuteReturnIdentity();

//忽略uid 返回影响行数
n = db.Insertable(u).IgnoreColumns(i => i.uid).ExecuteCommand();
有主键的表的插入(需要声明主键,进行实体配置)

需要对实体模型进行配置主键及自增特性
请添加图片描述

//操作添加
n = db.Insertable<UserInfo>(u).ExecuteCommand();
//模型类
[SugarColumn(IsPrimaryKey = true,IsIdentity =true)]
无实体插入中 匿名对象创建
db.InsertableByDynamic(new   { name="",price=1 }).AS("OrderInfo").ExecuteCommand();

修改(需要声明主键,进行实体配置)

db.Updateable(u).ExecuteCommand();
null值列不更新(并且数据库存在默认值为0时也不更新)
db.Updateable(u).IgnoreColumns(ignoreAllNullColumns: true, ignoreAllDefaultValue: true).ExecuteCommand();
只修改某几列
var result=db.Updateable(u).UpdateColumns(it => new { it.Name,it.CreateTime }).ExecuteCommand();
忽略修改某几列
var result=db.Updateable(u).IgnoreColumns(it => new { it.CreateTime,it.TestId }).ExecuteCommand()
添加或修改(自判断)

如果主键=0/null 表示插入 否则为修改

//u为修改的实体模型
db.Storageable(u).DefaultAddElseUpdate().ExecuteCommand();

删除

int id=10;
//uid为数据库中的字段 删除单条
int n=db.Deleteable<UserInfo>(new UserInfo {uid=id }).ExecuteCommand();

//删除集合
string[] ids = id.Split(',');
List<UserInfo> ulist= db.Queryable<UserInfo>().Where(it => ids.Contains(it.uid.ToString())).ToList();
db.Deleteable<UserInfo>(ulist).ExecuteCommand();

//根据主键
db.Deleteable<Student>().In(1).ExecuteCommand();
 
//无主键用法
db.Deleteable<Order>().In(it=>it.Id,1).ExecuteCommand();


//根据主键数组
db.Deleteable<Student>().In(new int[] { 1, 2 }).ExecuteCommand();
 
//无主键用法
db.Deleteable<Student>().In(it=>it.Id,new int[] { 1, 2 }).ExecuteCommand();
 
//Oracle用户注意:这种方式只能删除1000,用达式方式.Where(it=>ids.Contains(it.Id)支持1000以上


//根据表达式
db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();

执行sql语句(通常用于插入/更新)

//调用sql语句
db.Ado.ExecuteCommand($" insert into UserInfo values('{u.nikename}','{u.uname}','{u.phone}',{u.role_id},{u.isautonym},'{u.authority}','{u.wids}')");

调用存储过程

//简单用法
var dt = db.Ado.UseStoredProcedure().GetDataTable("sp_school",new{name="张三",age=0}); 
  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值