真正实现零sql
查询速度快于EF
支持【低代码】模式
支持多种数据库
使用配置
- 根据使用需求导入NuGet包 .net core
SqlSugarCore
或者 .net frameworkSqlSugar
- 配置文件
appsettings.json
设置链接字符串
"ConnectionStrings": {
"sqlcon": "Server=.;User Id=sa;Password=123456;Database=UserSetting;Persist Security Info=True;Encrypt=false"
},
- 声明静态类服务 扩展功能(类似于链接数据库操作)
其他配置不需要改动(可以直接粘贴说明文档中的方法,只需要改动标注部分)
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
}
}
- 入口文件 注册SqlSugar服务
- 根据创建完成 SqlSugarSetup类=>
- 在
Program.cs
中引用Models(因为案例是创建的功能类,在Models下(需要进行引用))=> - 注册服务(并且将配置文件传递给注册的功能类)
配置完成,可以进行使用了!
简单使用
DbFirst生成实体类
ISqlSugarClient是一个.NET标准库,提供了一种简单易用的方式来与SQL数据库进行交互,使用的是SugarORM ORM库。它允许您执行SQL查询、插入、更新和删除数据,并使用LINQ表达式从数据库中检索数据。
- 通过依赖注入使用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生成数据库表(待补充)
操作数据库
操作数据库可以查询官方文档很全,以下举了一些例子
查询
查询条数
//查询条数
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});