Web开发:SQLsugar的安装和使用

2025-12-13 0 365

目录

一、安装

二、使用:增删改查(基础写法)

1.连接字符串写法

2.基础增删改查

三、增删查改-封装写法(推荐)

四、更多好玩的写法

1.设置新表名

2.左外连接的三种写法

3.映射处理

五、事务

六、通过数据库生成C#实体类

七、特性

八、过滤器 & SQL打印 & SQL超时

九、小结


一、安装

第一步,在你的项目中找到解决方案,右键-管理解决方案的Nuget

Web开发:SQLsugar的安装和使用

第二步,下载对应的包,注意你的框架是哪个就下载哪个的包,一个项目安装一次包即可

Web开发:SQLsugar的安装和使用

我的是.NET6,因此安装sqlSugarCore

Web开发:SQLsugar的安装和使用

点击应用和确定

Web开发:SQLsugar的安装和使用

安装好后会显示sqlsugar的包

Web开发:SQLsugar的安装和使用

二、使用:增删改查(基础写法)
1.连接字符串 & SqlSugarClient
【SQLserver】
连接本地,以下两种写法都可以,可以用“.”代替主机名称
部分版本要加上 Encrypt=True;TrustServerCertificate=True
ConnectionString = \”server = .; Database = TestDb; Trusted_Connection = SSPI;\”, // 数据库连接字符串
ConnectionString = \”server = DESKTOP-FTH2P3S; Database = TestDb; Trusted_Connection = SSPI;\”, // 数据库连接字符串

private static SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = conn, // 数据库连接字符串
DbType = DbType.SqlServer, // 数据库类型
IsAutoCloseConnection = true, // 是否自动关闭数据库连接
},
db => {
//(A)全局生效配置点,一般AOP和程序启动的配置扔这里面 ,所有上下文生效
//调试SQL事件,可以删掉
db.Aop.OnLogExecuting = (sql, pars) =>
{
//获取原生SQL推荐 5.1.4.63 性能OK
Console.WriteLine(UtilMethods.GetNativeSql(sql,pars));
//获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用
//Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars))
};

//多个配置就写下面
//db.Ado.IsDisableMasterSlaveSeparation=true;
//注意多租户 有几个设置几个
//db.GetConnection(i).Aop
});
【SQLlite】
public static string path = \”Data Source=C:\\\\path\\\\to\\\\your\\\\database\\\\School.db;\”
public static string conn = $\”Data Source={path};\”;

//【开发环境】根目录获取方式参考
string root = Directory.GetCurrentDirectory().Split(\”\\\\bin\”)[0];
//【生产环境】根目录
string root =\”xxx.db\” ; //将db放在和exe并列的文件路径中
AI写代码
bash
2.基础增删改查
using SqlSugar;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
[SugarTable(\”TestTable\”)] // 指定实体类对应的数据库表名
class TestTable
{
[SugarColumn(IsPrimaryKey = true)] // 指定主键列
public string Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Content { get; set; }
public int IsEnable { get; set; }
public int IsDeleted { get; set; }
public string Stage { get; set; }
public string Remarks { get; set; }
}
class Test
{
static void Main(string[] args)
{
// 创建 SqlSugar 实例
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = \”server = DESKTOP-FTH2P3S; Database = TestDb; Trusted_Connection = SSPI;\”, // 数据库连接字符串
DbType = DbType.SqlServer, // 数据库类型
IsAutoCloseConnection = true, // 是否自动关闭数据库连接
});

// 1.插入数据
var model = new TestTable()
{
Id = Guid.NewGuid().ToString(),
Name = \”Tom\”,
Age = 18,
Content = \”Hello World\”,
IsEnable = 1,
IsDeleted = 0,
Stage = \”Stage 1\”,
Remarks = \”Test\”
};
int insert_code = db.Insertable(model).ExecuteCommand();//返回影响行数

// 2.查询数据
var list = db.Queryable<TestTable>().ToList();

// 3.自定义查询SQL
var result = db.SqlQueryable<TestTable>(\”SELECT * FROM TestTable WHERE Age > 30\”).ToList();

// 4.更新数据(先查询实体,然后对需修改的值赋值,再更新)
var updateModel = db.Queryable<TestTable>().Where(it => it.Id == \”8ffd64fc-8aea-4641-a57b-d957ad0dd229\”).First();
if (updateModel != null)
{
updateModel.Name = \”Jerry\”;
var update_code = db.Updateable(updateModel).ExecuteCommand();//返回影响行数
}
// 5.删除数据
var delete_code = db.Deleteable<TestTable>().Where(it => it.Id == \”8ffd64fc-8aea-4641-a57b-d957ad0dd229\”).ExecuteCommand();//返回影响行数
}
}

三、增删查改-封装写法(推荐)
【拓展方法编写】
public static class SqlSugarExtensions
{
public static string conn = \”server = DESKTOP-FTH2P3S; Database = EnterpriseHRM; Trusted_Connection = SSPI;\”;
private static SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = conn, // 数据库连接字符串
DbType = DbType.SqlServer, // 数据库类型
IsAutoCloseConnection = true, // 是否自动关闭数据库连接
},
db => {
db.Aop.OnLogExecuting = (sql, pars) =>
{
//控制台打印sql
Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));
//调试窗口打印sql
Trace.WriteLine($\”【时间】{DateTime.Now}\\n【SQL】{sql}\\n————————\”);
};
});
//重设连接字符串
public static void SetConnecttionString(string conn)
{
db.CurrentConnectionConfig.ConnectionString = conn;
}
// 扩展方法:获取整表数据列表(可自由选择是否带表达式树)
public static List<T> GetList<T>(this T entity, Expression<Func<T, bool>> exp=null) where T : class, new()
{
return db.Queryable<T>().WhereIF(exp!=null,exp).ToList();
}
// 扩展方法:获取第一条数据(携带表达式树)
public static T First<T>(this T entity, Expression<Func<T, bool>> exp=null) where T : class, new()
{
if (exp == null)
{
return db.Queryable<T>().First();
}
return db.Queryable<T>().First(exp);
}
// 扩展方法:判断是否存在数据(命名避免Any和原LINQ表达式冲突)
public static bool AnyData<T>(this T entity, Expression<Func<T, bool>> exp = null) where T : class, new()
{
if (exp == null)
{
return db.Queryable<T>().Any();
}
return db.Queryable<T>().Any(exp);
}

// 扩展方法:判断是否存在数据(命名避免Count和原LINQ表达式冲突)
public static int CountData<T>(this T entity, Expression<Func<T, bool>> exp = null) where T : class, new()
{
if (exp == null)
{
return db.Queryable<T>().Count();
}
return db.Queryable<T>().Count(exp);
}
// 扩展方法:根据主键查询单条记录
public static T GetEntityById<T>(this T entity, object id) where T : class, new()
{
return db.Queryable<T>().InSingle(id);
}
// 扩展方法:更新记录
public static bool Update<T>(this T entity) where T : class, new()
{
return db.Updateable(entity).ExecuteCommand() > 0;
}
// 扩展方法:批量更新记录
public static bool BatchUpdate<T>(this List<T> list) where T : class, new()
{
if (list.Count < 10000)
{
return db.Updateable(list).ExecuteCommand() > 0;
}
return db.Fastest<T>().BulkUpdate(list) > 0;
}
// 扩展方法:插入新记录
public static bool Insert<T>(this T entity) where T : class, new()
{
return db.Insertable(entity).ExecuteCommand() > 0;
}
// 扩展方法:批量插入新记录
public static bool BatchInsert<T>(this List<T> list) where T : class, new()
{
if (list.Count < 10000)
{
return db.Insertable(list).ExecuteCommand() > 0;
}
return db.Fastest<T>().BulkCopy(list) > 0;
}
//扩展方法:保存数据(无则插入有则更新)
public static bool Save<T>(this T entity) where T : class, new()
{
var x = db.Storageable(entity).ToStorage();
int a = x.AsInsertable.ExecuteCommand();//不存在插入
int b = x.AsUpdateable.ExecuteCommand();//存在更新
return a == 1 || b == 1;
}
//扩展方法:保存数据(无则插入有则更新)
public static bool BatchSave<T>(this List<T> list) where T : class, new()
{
if (list.Count < 10000)
{
return db.Storageable(list).ExecuteCommand() > 0;
}
return db.Fastest<T>().BulkMerge(list) > 0;
}
// 扩展方法:根据实体删除记录
public static bool Delete<T>(this T entity) where T : class, new()
{
return db.Deleteable(entity).ExecuteCommand() > 0;
}
// 扩展方法:根据实体批量删除记录
public static bool BatchDelete<T>(this List<T> list) where T : class, new()
{
return db.Deleteable(list).ExecuteCommand() > 0;
}

// 扩展方法:根据表达式删除
public static bool DeleteByExp<T>(this T entity, Expression<Func<T, bool>> exp) where T : class, new()
{
return db.Deleteable<T>().Where(exp).ExecuteCommand()!=0;
}

// 扩展方法:自定义 SQL 查询
public static List<T> QueryBySQL<T>(this T entity, string sql) where T : class, new()
{
return db.SqlQueryable<T>(sql).ToList();
}

//静态方法:执行ADO.NET的SQL操作
public static bool ExecuteSQL(string sql)
{
return db.Ado.ExecuteCommand(sql) > 0;
}

//静态方法:自定义SQL查询,返回一列
public static List<string> QueryStrListBySQL(string sql)
{
return db.Ado.SqlQuery<string>(sql);
}

//静态方法:生成实体类
public static void DbFristToCode(string path)
{
// 生成实体类
db.DbFirst // 使用 DbFirst 工具
.IsCreateAttribute() // 使用属性生成实体类
.CreateClassFile(path); // 输出路径
}

// 扩展方法:对实体进行分页,输入第几页,一页多少数据,输出总条数,总页数
public static (List<T> DataList, int TotalCount, int TotalPage) GetPagedList<T>(this T list, int pageIndex, int pageSize)
{
int totalCount = 0;
int totalPage = 0;
var resultlist = db.Queryable<T>().ToPageList(pageIndex, pageSize, ref totalCount, ref totalPage);
var tuplelist = (DataList: resultlist, TotalCount: totalCount, TotalPage: totalPage);
return tuplelist;
}
}

【调用示例】
UserInfo userInfo = new UserInfo();
var list = userInfo.GetList();
var entity = userInfo.GetListById(\”01A3A618-4496-4820-A164-E3455E7A1E84\”);
entity.UserName = \”刘晓彤\”;
var b = entity.Update();
var listfilter = userInfo.QueryBySQL(\”SELECT * FROM UserInfo where SEX=\’女\’\”);

四、更多好玩的写法
1.设置新表名
db.Queryable<School>().AS(\”Student\”).ToList();
//生成的SQL SELECT [ID],[NAME] FROM Student

2.左外连接的三种写法
【三种写法】

//返回模糊类型
var result = db.Queryable<UserInfo>()
.LeftJoin<Post>((o, d) => o.PostID == d.PostID)
.Select((o, d) => new
{
UserId = o.UserID,
UserName = o.UserName,
PostName = d.PostName
})
.ToList();

//返回实体类
List<UserPostInfo> result2 = db.Queryable<UserInfo>()
.LeftJoin<Post>((o, d) => o.PostID == d.PostID)
.Select<UserPostInfo>() // 直接指定返回的实体类
.ToList();

//表达式联表
var exp=Expressionable.Create<Order, Custom>();
exp.And((o,cus)=>o.CustomId == cus.Id);
exp.AndIF(Name!=null,(o, cus) => o.Name==Name);
var list= db.Queryable<Order>()
.LeftJoin<Custom>(exp.ToExpression())//动态拼出来的条件
.LeftJoin<OrderDetail>((o, cus, oritem) => o.Id == oritem.OrderId)
.Where(o => o.Id == 1)
.ToList();

【多表左外连接】
//多表左外连接
db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId, //左连接 左链接 左联
JoinType.Left, o.CustomId == c.Id
))
.Select((o,i,c)=>new ViewModel{ name=o.Name ..})
.ToList()

3.映射处理
//映射处理
var list=db.Queryable<SchoolA>()
.LeftJoin<StudentA>((x, y) => (x.SchoolId == y.SchoolId))
.Select((x,y) => new UnitView01()
{
Name=x.SchoolName,
Count=100
},
true)//true表示 其余字段根据字段名字自动映射
.ToList();

五、事务
try
{
db.Ado.BeginTran();
db.Insertable(new Order() { …..}).ExecuteCommand();
db.Insertable(new Order() { …..}).ExecuteCommand();
db.Ado.CommitTran();
}
catch (Exception ex)
{
db.Ado.RollbackTran();
throw ex;
}
六、通过数据库生成C#实体类

运行以下代码即可,其中CreateClassFile里面的路径可以写一个文件夹的路径

using ConsoleApp1;
using SqlSugar;
class Program
{
static void Main()
{
// 配置数据库连接字符串
string connectionString = \”server = DESKTOP-FTH2P3S; Database = EnterpriseHRM; Trusted_Connection = SSPI;\”;
var db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = connectionString,
DbType = DbType.SqlServer, // 根据你的数据库类型设置 DbType
IsAutoCloseConnection = true, // 自动释放连接
InitKeyType = InitKeyType.Attribute // 使用 Attribute 方式获取 Key
});
// 生成实体类
db.DbFirst // 使用 DbFirst 工具
.IsCreateAttribute() // 使用属性生成实体类
.CreateClassFile(\”F:\\\\C_program\\\\sqlsugar_demo\\\\repos\\\\ConsoleApp1\\\\ConsoleApp1\\\\GenerateModel\”); // 输出路径
}
}

生成效果如下所示

Web开发:SQLsugar的安装和使用

本地路径

Web开发:SQLsugar的安装和使用

七、特性
[SugarTable(\”dbstudent\”)]//当和数据库名称不一样可以设置表别名 指定表明
public class Student
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//数据库是自增才配自增
public int Id { get; set; }

[SugarColumn(ColumnName =\”StudentName\”)]//数据库与实体不一样设置列名
public string Name { get; set; }

[SugarColumn(InsertSql = \”getdate()\”)] //插入的默认值是当前日期,还支持字符串/数字:\’momo\’ 0 num+1(字段是num)
public DateTime CreateTime2 { get; set; }

//UpdateServerTime =true 更新的时候取服务器时间
//IsOnlyIgnoreInsert =true 插入的时候不插入该列(可用可不用根据需求来)
[SugarColumn(UpdateServerTime =true,IsOnlyIgnoreInsert =true)]// getdate() now() sysdate
public DateTime UpdateTime { get; set; }
}

八、过滤器 & SQL打印 & SQL超时
public static SqlSugarClient db = new SqlSugarClient(
new ConnectionConfig()
{
ConnectionString = conn, // 数据库连接字符串
DbType = DbType.SqlServer, // 数据库类型
IsAutoCloseConnection = true, // 是否自动关闭数据库连接
LanguageType = SqlSugar.LanguageType.Chinese //尽可能使用中文报错
},
db =>
{

//Sql超时
db.Ado.CommandTimeOut = 30;//单位秒

db.QueryFilter.AddTableFilter<UserInfo>(x => x.LeaveTime == null); //查UserInfo表,查的都是x.LeaveTime == null的值

db.Aop.OnLogExecuting = (sql, pars) =>
{
//以下方式三选一即可

//输出sql,查看执行sql 性能无影响
Console.WriteLine(sql);

//获取原生SQL推荐 5.1.4.63 性能OK
Console.WriteLine(UtilMethods.GetNativeSql(sql,pars))

//获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用
Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars))
};

}
);
九、小结
1.连接字符串(db)

SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = \”server = DESKTOP-FTH2P3S; Database = TestDb; Trusted_Connection = SSPI;\”, // 数据库连接字符串
DbType = DbType.SqlServer, // 数据库类型
IsAutoCloseConnection = true, // 是否自动关闭数据库连接
});

2.五大方法(增删改查+自定义SQL查询)

db.Insertable(model).ExecuteCommand();
db.Updateable(updateModel).ExecuteCommand();
db.Queryable<TestTable>().ToList();
db.Deleteable<TestTable>().ExecuteCommand();
db.SqlQueryable<TestTable>(\”sql语句\”).ToList();

原文链接:https://blog.csdn.net/m0_67412019/article/details/135462581

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 Web开发:SQLsugar的安装和使用 https://www.zuozi.net/36740.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务