发布时间:2025-06-24 20:04:32  作者:北方职教升学中心  阅读量:596


通过SqlSugarClient 对象可以完成各种操作。

灵活性降低:对于复杂的查询需求,ORM 可能无法满足或实现起来较为复杂。。Nuget 引入程序集 //2、通过SqlSugarClient 对象可以完成各种操作。教程 - SqlSugar 5x - .NET果糖网 (donet5.com)

使用步骤

1、完成对数据库的常用操作(增删改查)

①新增表数据-Insertable🚩

支持单条插入和批量插入

单条插入:
代码
// See https://aka.ms/new-console-template for more informationusing Models;using SqlSugar;Console.WriteLine("Hello, World!");try{    //1、Left Join - SqlSugar 5x - .NET果糖网 (donet5.com)

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()//那么生成的Sql就是// FROM [Order] o // Left JOIN [OrderItem] i ON ( [o].[Id] = [i].[OrderId] )  // Left JOIN [Custom] c ON ( [o].[CustomId] = [c].[Id] )
//联表查询var query5 = db.Queryable<Order>()    .LeftJoin<Custom>((o,cus) => o.CustomId == cus.Id)//多个条件用&&    .LeftJoin<OrderDetail> ((o,cus,oritem) => o.Id == oritem.OrderId)    .Where(o => o.Id == 1)      .Select((o,cus,oritem) => new ViewOrder {Id=o.Id,CustomName = cus.Name})    .ToList(); // SELECT//   [o].[Id] AS [Id],//   [cus].[Name] AS [CustomName]// FROM//   [Order] o//   Left JOIN [Custom] cus ON ([o].[CustomId] = [cus].[Id])//   Left JOIN [OrderDetail] oritem ON ([o].[Id] = [oritem].[OrderId])// WHERE//   ([o].[Id] = @Id0)

6、

4.5🌟 DbType-指定列的数据类型。注意选中SqlSugarClient点击F12可以查看源代码 ConnectionConfig connectionConfig = new ConnectionConfig() { ConnectionString = "Server=localhost;Database=net-vue;User ID=root;Password=root123;", DbType = DbType.MySql, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = true//自动释放 }; using (SqlSugarClient db=new SqlSugarClient(connectionConfig)) { //1、。注意选中SqlSugarClient点击F12可以查看源代码 ConnectionConfig connectionConfig = new ConnectionConfig() { ConnectionString = "Server=localhost;Database=net-vue;User ID=root;Password=root123;", DbType = DbType.MySql, InitKeyType = InitKeyType.Attribute }; using (SqlSugarClient db=new SqlSugarClient(connectionConfig)) { //操作表 //3、

ORM (Object-Relational Mapping)

概念

ORM 是一种程序技术,用于将关系型数据库中的数据映射到对象上。

4.3🌟 IsIdentity-指定列是否为自增列。非参数化插入(防注入) //优点:综合性能比较平均,列少1万条也不慢,属于万金油写法,不加事务情况下部分库有失败回滚机质//缺点:数据量超过5万以上占用内存会比较大些,内存小可以用下面2种方式处理db.Insertable(List<实体>).ExecuteCommand() db.Insertable(List<实体>).PageSize(1000).ExecuteCommand() //新功能:分页插入 5.1.4.103+//(2)、

缺点

性能开销:相比直接使用 SQL,ORM 会带来一定的性能损耗。关联查询、

增强代码可读性:以面向对象的方式处理数据,更符合编程习惯。新增表数据 var addmodel = new sys_user() { userId = 4, deptId = 0, userName = "111", nickName = "测试SqlSugar", userType = "0", sex = 2, password = "1111", status = 0, }; //常用三种,按需使用 //正常的 db.Insertable<sys_user>(addmodel).ExecuteCommand(); //异步 await db.Insertable(addmodel).ExecuteCommandAsync(); //插入返回自增列 (实体除ORACLE外实体要配置自增,Oracle需要配置序列) db.Insertable(insertObj).ExecuteReturnIdentity(); }}catch (Exception e){ Console.WriteLine( e.Message); throw;}

结果

批量插入语法--copy的官网

还有从一个表导入另一个表(不同实体插入和同实体不同表插入,详见官网)

//(1)、。

核心:以面先对象的思想完成对数据库的操作

常见的ORM

SqlSugar——国内开发者封装设计的

EFCore——EntityFramework Core ——微软提供

Dapper

Dos Orm

。Nuget 引入程序集 //2、文档、基于数据库生成实体对象--DbFirst🚩

代码

//1、连接数据库ConnectionConfig🚩进行配置

代码

// See https://aka.ms/new-console-template for more informationusing SqlSugar;Console.WriteLine("Hello, World!");try{    //1、大数据写入(特色功能:大数据处理上比所有框架都要快30%)//优点:1000条以上性能无敌手//缺点:不支持数据库默认值, API功能简单, 小数据量并发执行不如普通插入,插入数据越大越适合用这个//新功能 5.0.44db.Fastest<实体>().PageSize(100000).BulkCopy(List<实体>);//MySql连接字符串要加AllowLoadLocalInfile=true

②修改表数据-Updateable🚩

细节参考官网:单表更新、基于数据库生成实体对象--DbFirst //models的路径:F:\PracticeSqlSugar\PracticeSqlSugar\Models { //生成数据库全部的表 db.DbFirst .IsCreateAttribute()//创建sqlsugar自带特性 .CreateClassFile(@"F:\PracticeSqlSugar\PracticeSqlSugar\Models"); } //{ // //条件筛选,生成实体(生成什么名字开头的) // db.DbFirst.Where(c=>c.StartsWith("sys_user")).CreateClassFile(@"F:\PracticeSqlSugar\PracticeSqlSugar\Models"); //} }

生成结果

sys_user.cs文件内容

using System;using System.Linq;using System.Text;namespace Models{    ///<summary>    ///用户信息表    ///</summary>    public partial class sys_user    {        public sys_user(){        }        /// <summary>        /// Desc:用户ID        /// Default:        /// Nullable:False        /// </summary>                   public long userId {get;set;}        /// <summary>        /// Desc:部门ID        /// Default:        /// Nullable:True        /// </summary>                   public long? deptId {get;set;}        /// <summary>        /// Desc:用户账号        /// Default:        /// Nullable:False        /// </summary>                   public string userName {get;set;}        /// <summary>        /// Desc:用户昵称        /// Default:        /// Nullable:False        /// </summary>                   public string nickName {get;set;}        /// <summary>        /// Desc:用户类型(00系统用户)        /// Default:0        /// Nullable:True        /// </summary>                   public string userType {get;set;}        /// <summary>        /// Desc:用户邮箱        /// Default:        /// Nullable:True        /// </summary>                   public string email {get;set;}        /// <summary>        /// Desc:手机号码        /// Default:        /// Nullable:True        /// </summary>                   public string phonenumber {get;set;}        /// <summary>        /// Desc:用户性别(0男 1女 2未知)        /// Default:0        /// Nullable:True        /// </summary>                   public int? sex {get;set;}        /// <summary>        /// Desc:头像地址        /// Default:        /// Nullable:True        /// </summary>                   public string avatar {get;set;}        /// <summary>        /// Desc:密码        /// Default:        /// Nullable:True        /// </summary>                   public string password {get;set;}        /// <summary>        /// Desc:帐号状态(0正常 1停用)        /// Default:0        /// Nullable:True        /// </summary>                   public int? status {get;set;}        /// <summary>        /// Desc:删除标志(0代表存在 2代表删除)        /// Default:0        /// Nullable:True        /// </summary>                   public int? delFlag {get;set;}        /// <summary>        /// Desc:最后登录IP        /// Default:        /// Nullable:True        /// </summary>                   public string loginIP {get;set;}        /// <summary>        /// Desc:最后登录时间        /// Default:        /// Nullable:True        /// </summary>                   public DateTime? loginDate {get;set;}        /// <summary>        /// Desc:创建者        /// Default:        /// Nullable:True        /// </summary>                   public string create_by {get;set;}        /// <summary>        /// Desc:创建时间        /// Default:        /// Nullable:True        /// </summary>                   public DateTime? create_time {get;set;}        /// <summary>        /// Desc:更新者        /// Default:        /// Nullable:True        /// </summary>                   public string update_by {get;set;}        /// <summary>        /// Desc:更新时间        /// Default:        /// Nullable:True        /// </summary>                   public DateTime? update_time {get;set;}        /// <summary>        /// Desc:备注        /// Default:        /// Nullable:True        /// </summary>                   public string remark {get;set;}        /// <summary>        /// Desc:所在省        /// Default:        /// Nullable:True        /// </summary>                   public string province {get;set;}        /// <summary>        /// Desc:所在市        /// Default:        /// Nullable:True        /// </summary>                   public string city {get;set;}    }}

实体配置-配置SugarColumn属性

在 SqlSugar 中,SugarColumn 属性用于配置列的元数据信息,这对于 ORM 映射非常重要。

4.7🌟 CSharpType-指定 C# 中的类型
4.8🌟 IsIgnore-指定是否忽略此属性
4.9🌟 Insertable-指定插入时是否包含此列。Nuget 引入程序集 //2、单表删除、连表查询、

SqlSugar:集其他ORM框架优点于一身;足够简单,满足更多的使用场景

SqlSugar框架

SqlSugar 是一款 老牌 .NET开源ORM框架,由果糖大数据科技团队维护和更新 ,开箱即用最易上手的ORM

优点

【生态丰富】【高性能】【超简单】 【功能全面】 【多库兼容】【适合产品】

支持

.net framework .net core3.1 .ne5 .net6 .net7 .net8 .net9

特色

拥有全球最活跃的ORM线上论坛,比EF还要活跃,交流群人数已超过万人 ,技术支持快,口碑好。

易于维护:修改数据库结构时,只需调整映射关系,减少对业务逻辑的影响。注意选中SqlSugarClient点击F12可以查看源代码 ConnectionConfig connectionConfig = new ConnectionConfig() { //DbType = DbType.SqlServer, //ConnectionString = "Data Source=.;Initial Catalog=RotatingWarehouseSystem;User ID=sa;Password=sa123456", ConnectionString = "Server=localhost;Database=net-vue;User ID=root;Password=root123;", DbType = DbType.MySql, InitKeyType = InitKeyType.Attribute }; }catch (Exception e){ Console.WriteLine( e.Message); throw;}

4、JoinTable、

优点

提高开发效率:减少 SQL 语句的编写工作。下面是一些常见的 SugarColumn 属性及其用途:

4.1🌟 ColumnName-指定数据库表中对应的列名。

开源

10年开源信誉值得信赖,从不搞收费,文档也全免费

官网

SqlSugar .Net ORM 5.X 官网 、

原理

数据表与类的映射:数据库中的表对应为类。

主要目的是简化数据库操作,使得开发人员可以像操作对象一样来操作数据库。

4.2🌟 IsNullable-指定列是否可以为 NULL。。
4.10🌟 Updatable-指定更新时是否包含此列。表达式删除 用法 - SqlSugar 5x - .NET果糖网 (donet5.com)

代码
sys_user user = db.Queryable<sys_user>().OrderBy(c => c.userId, OrderByType.Desc).First();  //删除  db.Deleteable<sys_user>(user).ExecuteCommand();
结果

④查询表数据-常用的Queryable🚩

🌟查所有
List<sys_user> users = db.Queryable<sys_user>().ToList();//查所有//select * from sys_user
🌟查总数——Count()
int count =db.Queryable<sys_user>().Count();//查总数    //select count(1) from sys_user 
🌟条件查询——where(条件)
List<sys_user> user = db.Queryable<sys_user>().Where(it => it.sex == 1).ToList();//条件查询      //select * from sys_user where sex = 1
🌟多条件查询——where(条件1&&条件2)
List<sys_user> user = db.Queryable<sys_user>().Where(it => it.userId == 1&&it.sex==1).ToList();//多条件查询    //select * from sys_user where userId = 1 and sex = 1
🌟模糊查询——Where(条件+Contains)
db.Queryable<sys_user>().Where(it => it.avatar.Contains("a")).ToList();//模糊查询//select  * from  sys_user where avatar like %a%
🌟查满足条件的首条——First(条件)
sys_user user = db.Queryable<sys_user>().First(it => it.sex == 1);//查询满足条件第一条      //select top 1 * from sys_user where sex = 1
🌟查满足条件的最后一条——逆序+First(条件)
db.Queryable<sys_user>().OrderBy(it=>it.Id,OrderByType.Desc )// 倒序.First(it => it.sex == 1) //没有返回Null//select top 1 * from sys_user order by id desc where sex = 1
🌟查前几条——Take(number)
List<sys_user> users = db.Queryable<sys_user>().Take(10)ToList();//查前十条//select top 10 * from sys_user
🌟是否存在——Any(条件)
bool isExists=  db.Queryable<sys_user>().Any(it => it.sex ==1);
🌟排序——OrderBy(排序列,类型)

详见:排序 OrderBy - SqlSugar 5x - .NET果糖网 (donet5.com)

var list =db.Queryable<Student>().LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)//两表关联.OrderBy((st,sc)=>st.SchoolId)//写Select前面用法,正常都这么用;按照学校id排序.Select((st,sc)=>new Dto(){ id=it.id ,Name=it.Name}).ToList();
🌟最大值max;最小值min;求和Sum;平均值Avg
db.Queryable<Order>().Max(it=>it.Id);//四个函数用法一样
🌟分页查询——ToPageList(多参数)---可以用 ToOffsetPage 取代 ToPageList

详见分页查询,同步分页和异步分页 - SqlSugar 5x - .NET果糖网 (donet5.com)

//多表分页 var list = db.Queryable<Student>().LeftJoin<School>((st,sc)=>st.SchoolId==sc.Id) .Select((st,sc)=>new{Id=st.Id,Name=st.Name,SchoolName=sc.Name}) .ToPageList(pageIndex, pageSize, ref totalCount,ref totalPage);
🌟多表联查——左连接.LeftJoin或者new JoinQueryInfos

详见联表查询、通过SqlSugarClient 对象可以完成各种操作。

4.4🌟 IsPrimaryKey-指定列是否为主键。。Nuget引入SqlSugarCore程序集(不要引错了!

引入图片中的程序集

引入后结果

3、控制台输出SQL语句-Aop.OnLogExecuting🚩

运行过的增删改查对应的SQL语句可打印到控制台

db.Aop.OnLogExecuting = (sql, par) =>{Console.WriteLine($"SQL语句:{sql}");};
// See https://aka.ms/new-console-template for more informationusing Models;using SqlSugar;Console.WriteLine("Hello, World!");try{    ConnectionConfig connectionConfig = new ConnectionConfig()    {        ConnectionString = "Server=localhost;Database=net-vue;User ID=root;Password=root123;",        DbType = DbType.MySql,        InitKeyType = InitKeyType.Attribute    };    using (SqlSugarClient db=new SqlSugarClient(connectionConfig))    {        db.Aop.OnLogExecuting = (sql, par) =>        {            Console.WriteLine($"SQL语句:{sql}");        };        List<sys_user> users = db.Queryable<sys_user>().ToList();//查所有        int count =db.Queryable<sys_user>().Count();//查总数        List<sys_user> user1 = db.Queryable<sys_user>().Where(it => it.sex == 1).ToList();//条件查询        List<sys_user> user2 = db.Queryable<sys_user>().Where(it => it.userId == 1&&it.sex==1).ToList();//多条件查询        db.Queryable<sys_user>().Where(it => it.avatar.Contains("a")).ToList();//模糊查询        bool isExists=  db.Queryable<sys_user>().Any(it => it.sex ==1);//是否存在    }}catch (Exception  e){    Console.WriteLine( e.Message);    throw;}

结果:

 详细内容见官网哦~

 本文适用小白常用~

参数化内部分页插入(底层是分页插入)//优点:适合插入条数固定,并且条数较少,请求频繁高的功能(最大利用执行计划缓存)//缺点:个别库500以上就开始慢了,要加事务才能回滚 db.Insertable(List<实体>).UseParameter().ExecuteCommand()//5.0.3.8及以上 //(3)、

字段与属性的映射:表中的字段对应为类的属性。

记录与对象的映射:表中的记录对应为对象实例。更新数据 - SqlSugar 5x - .NET果糖网 (donet5.com)

代码
sys_user user = db.Queryable<sys_user>().OrderBy(c => c.userId, OrderByType.Desc).First();  user.sex = 1;  db.Updateable<sys_user>(user).ExecuteCommand();
结果

③删除表数据-Deleteable🚩

细节参考官网:普通删除 、

4.11🌟 DefaultValue-指定默认值
示例
public class User{    [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnName = "user_id")]    public int UserId { get; set; }    [SugarColumn(Length = 50)]    public string Name { get; set; }    [SugarColumn(Length = 100)]    public string Email { get; set; }    [SugarColumn(DbType = "datetime")]    public DateTime CreatedAt { get; set; }    [SugarColumn(DbType = "datetime")]    public DateTime UpdatedAt { get; set; }}

5、

4.6🌟 Length-指定列的最大长度。新建项目

新建一个控制台项目做测试和一个类库Models

2、