SqlSugar 集成
1 关于 SqlSugar
SqlSugar
是 .NET/C# 平台非常优秀的 ORM
框架,目前 Nuget
总下载突破 700K,Github 关注量也高达 3.2K,是目前当之无愧的国产优秀 ORM 框架之一。
SqlSugar
官方地址:果糖网 ( SqlSugar 官网 ) .NET论坛 .NET学习
SqlSugar
与 EF 优势: 性能比 EF 更快、语法上手更容易
SqlSugar
与 Dapper
优势: SqlSugar
功能更加丰富,性能丝毫不逊色于 Dapper
,并且批量操作性能更好
2 如何集成
在 Furion
框架中,已经推出 SqlSugar
拓展包 Furion.Extras.DatabaseAccessor.SqlSugar。
2.1 注册 SqlSugar
服务
使用非常简单,只需要在 Startup.cs
中添加 services.AddSqlSugar(config)
即可。如:
services.AddSqlSugar(new ConnectionConfig
{ConnectionString = "Server=.xxxxx",//连接符字串DbType = DbType.SqlServer,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息
});
同时也可以添加更多配置,如:
services.AddSqlSugar(new ConnectionConfig
{ConnectionString = "Server=.xxxxx",//连接符字串DbType = DbType.SqlServer,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息
},
db =>
{//处理日志事务db.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine(sql);Console.WriteLine(string.Join(",", pars?.Select(it => it.ParameterName + ":" + it.Value)));Console.WriteLine();};
});
安装拓展包位置
在 Furion
框架中,推荐将拓展包 Furion.Extras.DatabaseAccessor.SqlSugar
安装到 Furion.Core
层中。
3 基本使用
在使用之前,我们可以通过构造函数注入 ISqlSugarRepository<TEntity>
接口,如:
private readonly ISqlSugarRepository<Person> repository; // 仓储对象:封装简单的CRUD
private readonly ISqlSugarClient db; // 核心对象:拥有完整的SqlSugar全部功能
public PersonService(ISqlSugarRepository<Person> sqlSugarRepository)
{repository = sqlSugarRepository;db = repository.Context; // 推荐操作
}
4 数据库操作示例
// ================== SqlSugarClient ================
//查询功能
var data1 =db.Queryable<Student>().First(it=>it.Id==1); //db.GetById(1);
var data2 = db.Queryable<Student>().ToList();// db.GetList();
var data3 = db.GetList(it => it.Id == 1);
var data4 = db.GetSingle(it => it.Id == 1);
var p = new PageModel() { PageIndex = 1, PageSize = 2 };
var data5 = db.GetPageList(it => it.Name == "xx", p);//p.PageCount
var data6 = db.GetPageList(it => it.Name == "xx", p, it => it.Name, OrderByType.Asc);
List<IConditionalModel> conModels = new List<IConditionalModel>();
conModels.Add(new ConditionalModel(){FieldName="id",ConditionalType=ConditionalType.Equal,FieldValue="1"});//id=1
var data7 = db.GetPageList(conModels, p, it => it.Name, OrderByType.Asc);
// ================== 简单仓储 ================
//插入
repository.Insert(insertObj);
repository.InsertRange(InsertObjs);
var id = repository.InsertReturnIdentity(insertObj);
repository.AsInsertable(insertObj).ExecuteCommand();
//删除
repository.Delete(insertObj);
repository.DeleteById(1);
repository.DeleteByIds(new object [] { 1, 2 }); //数组带是 ids方法 ,封装传 object [] 类型
repository.Delete(it => it.Id == 1);
repository.AsDeleteable().Where(it => it.Id == 1).ExecuteCommand();
//更新
repository.Update(insertObj);
repository.UpdateRange(InsertObjs);
repository.Update(it => new Order() { Name = "a", }, it => it.Id == 1);
repository.AsUpdateable(insertObj).UpdateColumns(it=>new { it.Name }).ExecuteCommand();
//异步方法用法
repository.Insert(insertObj);//同步
repository.InsertAsync(insertObj);//异步
//切换仓储
var orderRespository=db.GetSimpleClient<Order>();
orderRespository.Insert(Order);
5 SqlSugarClient
操作示例
5.1 基础查询
//查询所有
var getAll = db.Queryable<Student>().ToList();
//查询前10
var top10= db.Queryable<Student>().Take(10).ToList();
//查询单条
var getFirst = db.Queryable<Student>().First(it=>it.Id==1);
//with nolock
var getAllNoLock = db.Queryable<Student>().With(SqlWith.NoLock).ToList();
//根据主键查询
var getByPrimaryKey = db.Queryable<Student>().InSingle(2);
//查询总和
var sum = db.Queryable<Student>().Sum(it=>it.Id);
//是否存在
var isAny = db.Queryable<Student>().Where(it=>it.Id==-1).Any();
//模糊查
var list2 = db.Queryable<Order>().Where(it =>it.Name.Contains("jack")).ToList();
5.2 联表查询
var list = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(JoinType.Left,st.SchoolId==sc.Id)).Select((st,sc)=>new{Id=st.Id,Name=st.Name,SchoolName=sc.Name}).ToList();
生成的Sql如下:
SELECT [st].[ID] AS [id] ,[st].[Name] AS [name] ,[sc].[Name] AS [schoolName] FROM [STudent] stLeft JOIN School sc ON ( [st].[SchoolId] =[sc].[Id])
5.3 分页查询
int pageIndex = 1;int pageSize = 20;int totalCount=0;var page = db.Queryable<Student>().ToPageList(pageIndex, pageSize, ref totalCount);
更多查询用法 : http://www.donet5.com/Home/Doc?typeId=1185
5.4 插入
//可以是 类 或者 List<类>
db.Insertable(insertObj).ExecuteCommand();
//插入返回自增列
db.Insertable(insertObj).ExecuteReturnIdentity();
//可以是 Dictionary 或者 List<Dictionary >
var dc= new Dictionary<string, object>();dt.Add("name", "1");dt.Add("CreateTime", null);
db.Insertable(dc).AS("student").ExecuteCommand();
//DataTable插入
Dictionary<string,object> dc= db.Utilities.DataTableToDictionary(dataTable);//转成字典就可以按上面的字典更新了
db.Insertable(dc).AS("student").ExecuteReturnIdentity();
//实体可以配置主键和自增列
public class Student
{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public int? SchoolId { get; set; }public string Name { get; set; }
}
更多插入用法: http://www.donet5.com/Home/Doc?typeId=1193
5.5 更新
实体配置参考插入,只需要配置主键即可
//根据主键更新单条 参数 Class
var result= db.Updateable(updateObj).ExecuteCommand();
//不更新 Name 和TestId
var result=db.Updateable(updateObj).IgnoreColumns(it => new { it.CreateTime,it.TestId }).ExecuteCommand()
//只更新 Name 和 CreateTime
var result=db.Updateable(updateObj).UpdateColumns(it => new { it.Name,it.CreateTime }).ExecuteCommand();
//根据表达式更新
var result71 = db.Updateable<Order>().SetColumns(it => it.Name == "a").SetColumnsIF(p!=null ,it => it.CreateTime == p.Value)//当p不等于null更新createtime列.Where(it => it.Id == 11).ExecuteCommand();
更多更新用法: http://www.donet5.com/Home/Doc?typeId=1191
5.6 删除
实体配置参考插入,只需要配置主键即可
//根据实体删除
db.Deleteable<Student>().Where(new Student() { Id = 1 }).ExecuteCommand();
//根据主键删除
db.Deleteable<Student>().In(1).ExecuteCommand();
//根据表达式删除
db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();
更多删除用法: http://www.donet5.com/Home/Doc?typeId=1195
6 Sql 查询
//sql分页
var list = db.SqlQueryable<Student>("select * from student").ToPageList(1, 2,ref total);
//原生Sql用法
var dt=db.Ado.GetDataTable("select * from table where id=@id and name=@name",new List<SugarParameter>(){new SugarParameter("@id",1),new SugarParameter("@name",2)
});
//参数2
var dt=db.Ado.GetDataTable("select * from table where id=@id and name=@name",new{id=1,name=2});
//存储过程用法
var nameP= new SugarParameter("@name", "张三");
var ageP= new SugarParameter("@age", null, true);//设置为output
var dt = db.Ado.UseStoredProcedure().GetDataTable("sp_school",nameP,ageP);
方法名 | 描述 | 返回值 |
---|---|---|
SqlQuery< T > | 查询所有返回实体集合 | List |
SqlQuery<T,T2> | 可以返回 2 个结果集 | Tuple<List, List> |
SqlQuerySingle | 查询第一条记录 | T |
GetDataTable | 查询所有 | DataTable |
GetDataReader | 读取 DR 需要手动释放 DR | DataReader |
GetDataSetAll | 获取多个结果集 | DataSet |
ExecuteCommand | 返回受影响行数,一般用于增删改 | int |
GetScalar | 获取首行首列 | object |
GetString | 获取首行首列 | string |
GetInt | 获取首行首列 | int |
GetLong | 获取首行首列 | long |
GetDouble | 获取首行首列 | Double |
GetDecimal | 获取首行首列 | Decimal |
GetDateTime | 获取首行首列 | DateTime |
想了解更多 SqlSugar
知识可查阅 SqlSugar 官网。
7 打印 sql
到 Swagger
services.AddSqlSugar(new ConnectionConfig
{ConnectionString = "Server=.xxxxx",//连接符字串DbType = DbType.SqlServer,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息
},
db =>
{db.Aop.OnLogExecuting = (sql, pars) =>{App.PrintToMiniProfiler("SqlSugar", "Info", sql + "\r\n" +string.Join(",", pars?.Select(it => it.ParameterName + ":" + it.Value)));};
});
---------------------
作者:风神.NET跨平台
来源:CSDN
原文:https://blog.csdn.net/WuLex/article/details/117913329
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件
相关文章:
SqlSugar 集成
1 关于 SqlSugar SqlSugar 是 .NET/C# 平台非常优秀的 ORM 框架,目前 Nuget 总下载突破 700K,Github 关注量也高达 3.2K,是目前当之无愧的国产优秀 ORM 框架之一。 SqlSugar 官方地址:果糖网 ( SqlSugar 官网 &#…...
MySQL Connector/C++ 和 MySQL Connector/ODBC 的区别
MySQL Connector/C++ 和 MySQL Connector/ODBC 是两种不同的数据库连接工具,它们各自有不同的特点和用途。以下是它们之间的一些主要区别: 1. **编程接口**: - MySQL Connector/C++ 提供了面向对象的编程接口,它是用C++编写的,提供了C++特有的类和对象来与MySQL数据库…...

Weevil-Optimizer象鼻虫优化算法的matlab仿真实现
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 Weevil-Optimizer象鼻虫优化算法的matlab仿真实现,仿真输出算法的优化收敛曲线,对比不同的适应度函数。 2.测试软件版本以及运行结果展示…...

Web前端项目-交互式3D魔方【附源码】
交互式3D魔方 3D魔方游戏是一款基于网页技术的三维魔方游戏。它利用HTML、CSS和JavaScript前端技术来实现3D效果,并在网页上呈现出逼真的魔方操作体验。 运行效果: 一:index.html <!DOCTYPE html> <html><head><…...

视频格式转换avi格式怎么弄?分享视频转换方法
视频格式转换avi格式怎么弄?AVI作为一种广泛支持的视频格式,能够在多种设备和播放器上顺畅播放,确保我们的视频内容能够无障碍地分享给朋友或上传至各大平台。其次,AVI格式通常具有较好的兼容性,能够避免格式转换过程中…...

UniRx 入门
Reactive X 是 Reactive Extensions 的缩写,一般简写为 Rx,最初是 LINQ 的一个扩展,由微软的团队开发,Rx 是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流,支持大部…...
简单游戏制作——飞行棋
控制台初始化 int w 50; int h 50; ConsoleInit(w, h); static void ConsoleInit(int w, int h) {//基础设置//光标的隐藏Console.CursorVisible false;//舞台的大小Console.SetWindowSize(w, h);Console.SetBufferSize(w, h); } 场景选择相关 #region 场景选择相关 //声…...
等保一体机
等保一体机是面向等保场景推出的合规型安全防护产品。基于“一个中心,三重防护”的设计理念,通过内置全面、多样的安全能力,为政府、医疗、教育、企业等中小型客户提供快速合规、按需赋能的一站式等保合规解决方案。 等保一体机要求管理网络和…...

什么是寄存器文件(Register File)?
寄存器文件(Register File)是计算机系统中用于存储处理器操作数的小型、快速的存储单元集。它在 CPU 内部,提供极高的访问速度,通常用于存储临时数据、操作数和指令执行过程中的中间结果。 寄存器文件的组成和特点 寄存器集&…...

6月15号作业
使用手动连接,将登录框中的取消按钮使用第二中连接方式,右击转到槽,在该槽函数中,调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin"࿰…...

零基础入门学用Arduino 第三部分(三)
重要的内容写在前面: 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路…...
Trusty qemu + android环境搭建详细步骤
下载源码 mkdir trusty cd trusty repo init -u https://android.googlesource.com/trusty/manifest -b master repo sync -j32 编译 ./trusty/vendor/google/aosp/scripts/build.py generic-arm64 查看编译结果 ls build-root/build-generic-arm64/lk.bin 安装运行依赖 …...
杀戮尖塔游戏
Java 你正在玩策略卡牌杀戮尖塔游戏,轮到你出牌,手里N张攻击卡,每张都需要花金币coust[i]和获得伤害dmager[i]。 最多花3金币能造成的最大伤害是多少? class Solution{public int calc(int[] cost, int[] dmager, N){int[][] db …...
Kubernetes (K8s) 和 Spring Cloud 的区别
Kubernetes (K8s) 和 Spring Cloud 是两种常用的云原生技术,它们在微服务架构和云计算领域中扮演着重要的角色。尽管两者都有助于开发和部署微服务,但它们的功能和目标存在显著差异。本文将详细讨论 Kubernetes 和 Spring Cloud 的区别,从它们…...

定个小目标之刷LeetCode热题(21)
这是道技巧题,利用了 (num - 1)% n 计算下标的形式来将数组元素与数组索引产生映射关系,代码如下,可以看下注释 class Solution {public List<Integer> findDisappearedNumbers(int[] nums) {int n nums.lengt…...

Oracle 打开钱包 ORA-28368: cannot auto-create wallet
ORA-28368: cannot auto-create wallet 开启钱包抱错,看下钱包信息 SQL> select * from v$encryption_wallet;WRL_TYPE -------------------- WRL_PARAMETER -------------------------------------------------------------------------------- STATUS ------…...

【麒麟虚拟机】NetworkManager没有运行
麒麟V10 建linux麒麟虚拟机,发现,网络没有配置 提示,NetworkManager没有运行。编辑联接也不能配置 解决方法,在终端输入命令: sudo systemctl start NetworkManager 启动以后,编辑连接选自动以太网&…...

vue之一键部署的shell脚本和它的点.bat文件、海螺AI、ChatGPT
MENU 前言vite.config.ts的配置deploy文件夹的其他内容remote.shpwd.txtdeploy.bat 前言 1、在src同级新建deploy.bat文件; 2、在src同级新建deploy文件夹,文件夹中新建pwd.txt和remote.sh文件; 3、配置好后,直接双击deploy.bat文…...
pg和oracle的区别
1、从功能上来说pg要比oracle数据库弱。 2、pg不支持索引组织表。 pg和oracle的相似之处: 1、使用共享内存的进程结构,客户端与数据库服务器建立一个连接后,数据库服务器就启动一个进程为这个连接服务。这与mysql的线程模型不一样。 2、p…...

Docker:在DockerHub上创建私有仓库
文章目录 Busybox创建仓库推送镜像到仓库 本篇开始要学习在DockerHub上搭建一个自己的私有仓库 Busybox Busybox是一个集成了三百多个最常用Linux命令和工具的软件,BusyBox包含了很多工具,这里拉取该镜像推送到仓库中: 安装 apt install …...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...

PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...