Sqlsugar从入门到放弃(上)
学习视频:019_SqlSugar-数据库操作-连接查询-2_哔哩哔哩_bilibili
环境要求
VS2022 / .Net 6 / SqlServer
安装方式
项目内Nuget包中引用:
.Net Core 3 & 5 & 6 &7 &8 ——》SqlSugarCore
.Net Core 2 ——》SqlSugarCore_NetCore2
.Net Framework ——》SqlSugar


一、数据库迁移和映射
1.1 Dbfirst

示例:

1.2 Codefirst
(1)基础操作

(2)相关映射特性


示例:

(3)索引支持

创建方法可参考前面的特性内容:
关键字:SugarIndex

示例:结合CodeFirst

数据库中显示结果:

数据库中索引生成脚本:

二、库表操作
针对数据库、表、视图的操作

示例:

三、数据库操作
针对表数据的操作
3.1 插入操作(有返回值)


示例:
(1)单条插入

(2)忽略字段

(3)插入指定字段

(4)批量插入

(5)分页插入

(6)大数据量插入
普通插入方式 & BulkCopy方式插入对比

(7)Guid主键自动赋值

(8)调用实体内方法

(9)临时表

3.2 修改操作
更新操作的重点在于后面一定要加上ExecuteCommand
ExecuteCommand——》返回受影响行数
ExecuteCommandHasChange——》返回bool值:是否受影响,true or false

示例:
操作对象表:

(1)输出sql语句
修改相关的多个操作都封装在下面的方法:UpdateData()中。
下文进行了配置数据库链接,初始化sqlsuger等操作,后面设置输出sql语句后,需要在后文中操作数据库时才能看到结果。

(2)单条更新

(3)按需更新

(4)批量修改

(5)大数据量操作
以下使用普通方式 vs BulkUpdate方式做了时间对比

(6)忽略某列不更新 & 只更新指定列


(7)NULL列 & 默认值不更新

(8)无主键/指定列更新

(9)条件更新

(10)重新赋值更新

(11)条件更新 & 表达式更新

(12)根据字典更新

3.2 添加或修改
场景1:当前操作的数据——在数据库不存在就认为是添加操作,存在则认为是修改操作。
场景2:根据主键Id来判断,如果Id=0——》新增,数据库中自动生成Id
如果Id≠0——》认为是修改操作
关键字:Storageable() + ExecuteCommand()
场景1示例:

场景2示例:

PS.这种方法可以结合 忽略更新 使用——本质上是做条件的堆叠,先用storageable,后面加上忽略等条件,最后进行ExecuteCommand();
注意一个关键字:Tostorage(),如果storageable单独放在一句的话,它要放在语句的末尾;
示例如下:

与 无主键操作 结合:

与 批量操作 结合:

与 字典操作 结合:

3.3 删除操作
关键字:Deleteable

示例:
操作实体:

(1)单个实体删除 & 删除实体集合

(2)根据主键 & 主键数组删除

(3)无主键删除 & 无主键数组删除

(4)表达式删除

(5)无实体删除

(6)根据字典删除

(7)关于软删除的便捷方式
关于软删除,如果实体中包含字段IsDelete 或者IsDeleted,可以用In+IsLogic的快捷方式来进行软删除:

另外,加入实体中软删除的标识字段使用了其他的命名,也可以使用指定字段名的方式来进行快捷更改:

同时,也支持更改指定字段值的同时更新修改时间(将下文CreateTime替换为UpdateTime即可):

3.4 过滤器
对于一些通用操作的统一定制。
eg:数据库中使用软删除——》当查询数据时基本都要使用未删除的数据。按正常查询逻辑,就要在查询条件中加上IsDeleted=0,每次查询都要加很麻烦;
如果用过滤器做配置,就可以省掉这个麻烦——定义过滤器就是一个条件,定义之后可以把过滤器设置为全局,任何一个查询操作都会走这个过滤器。

示例:

3.5 基本查询操作
关键词:Queryable()
(1)普通条件查询:Queryable & Where

(2)动态条件查询:Or & OrIF
就是表达式目录树的拼接——首先要准备Expression的对象,之后用 OrIF 或 Or 进行条件拼接;

(3)模糊查询:contains

(4)主键查询:InSingle / Single
多主键查询 :WhereClassByPrimaryKey

(5)查询第一条 / 前几条:First / Take

(6)查询数据行数:Count

(7)判断记录是否存在:Any

(8)In查询 & Not In查询:Contains &!Contains


(9)In的模糊查询
首先需要了解一下 Lanmbda条件拼接 ——

采用这个方式,in的模糊查询如下——

(10)排序:OrderBy

(11)查询一列 & 查询单条数据
查询一列:Select()中处理
查询单条:Single

(12)获取最大值、最小值:Max、Min

(13)求和:Sum

(14)查询过滤某一字段:IgnoreColumns

3.6 连接查询
下面实例中用到的三张关联表:Company、User、






(1)做连接查询
(2)右连接查询
(3)内连接查询
(4)全连接查询
3.7 复杂查询
(1)分组聚合
(2)Distinct关键字
(3)开窗函数
(4)合并结合
(5)分页查询
(6)Order排序

浙公网安备 33010602011771号