【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
系列文章目录
🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀
文章目录
- 系列文章目录
- 一、前言 🍃
- 二、插入方式 💯
- 2.1 单条插入实体
- 2.2 批量 插入实体
- 2.3 根据字典插入
- 2.4 根据 Datatable 插入
- 2.5 匿名、Object、接口、抽象类插入
- 2.6 插入返回值
- 三、功能案例
- 3.1 不插入指定字段
- 3.2 只插入指定字段
- 3.3 NULL列不插入 💯
- 3.4 异步执行
- 3.5 级联、导航插入
- 3.6 大数据插入
- 3.7 插入默认值
- 3.8 Guid主键自动赋值
- 3.9 调用实体内方法
- 3.10 雪花ID
- 3.11 强制插入自增列
- 3.12 Into Select
- 3.13 分页插入
- 四、总结
- 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀
一、前言 🍃
前面的章节介绍了各种 SqlSugar 各种场景的 查询 操作,接下来将介绍 SqlSugar 增、删、改 相关操作。数据库 插入 数据的方法包括:使用 SQL 插入语句、通过 ORM 框架、使用 批量插入 技术、利用 存储过程。
二、插入方式 💯
2.1 单条插入实体
单条插入实体是最常见也是最基本的用法,以下罗列了一些单条实体插入的示例。
- 🔢返回插入行数
- 🛗插入返回自增列 (实体除
ORACLE外实体要配置自增,Oracle需要配置序列) - ❄️返回雪花ID
- 🧭导航插入
- ⏱️获取数据库时间
- 🎯强制设置表名
🌰 具体 demo 如下:
//返回插入行数
db.Insertable(insertObj).ExecuteCommand(); //都是参数化实现
//异步: await db.Insertable(insertObj).ExecuteCommandAsync()//插入返回自增列 (实体除ORACLE外实体要配置自增,Oracle需要配置序列)
db.Insertable(insertObj).ExecuteReturnIdentity();
//异步: await db.Insertable(insertObj).ExecuteReturnIdentityAsync();//返回雪花ID
long id= db.Insertable(实体).ExecuteReturnSnowflakeId();//导航插入
//具体文档:https://www.donet5.com/Home/Doc?typeId=2430//实用技巧1:获取数据库时间我们可以用
var dbTime = db.GetDate();
//实用技巧2: 强制设置表名(默认表名来自实体)
db.Insertable(insertObj).AS("table01").ExecuteCommand();//更多返回值方法看 1.6
2.2 批量 插入实体
批量插入主要有如下四种方式🆚:
-
非参数化插入(防注入)
- ✅优点:综合性能比较平均,列少1万条也不慢,属于万金油写法,不加事务情况下部分库有失败回滚机质。
- 🚫缺点:数据量超过5万以上占用内存会比较大些,内存小可以用下面2种方式处理。
-
参数化内部分页插入(底层是分页插入)
- ✅优点:适合插入条数固定,并且条数较少,请求频繁高的功能(最大利用执行计划缓存)。
- 🚫缺点:个别库500以上就开始慢了,要加事务才能回滚。
-
大数据写入(特色功能:大数据处理上比所有框架都要快30%)
- ✅优点:1000条以上性能无敌手。
- 🚫缺点:不支持数据库默认值, API功能简单, 小数据量并发执行不如普通插入,插入数据越大越适合用这个。
-
Into Select ,从一个表导入到另一个表
- ✅优点:性能好。
- 🚫缺点:数据必须在数据库已存在,才能这样插入到新表。
//(1)、非参数化插入(防注入)
//优点:综合性能比较平均,列少1万条也不慢,属于万金油写法,不加事务情况下部分库有失败回滚机质
//缺点:数据量超过5万以上占用内存会比较大些,内存小可以用下面2种方式处理
db.Insertable(List<实体>).ExecuteCommand()
db.Insertable(List<实体>).PageSize(1000).ExecuteCommand() //新功能:分页插入 5.1.4.103+
//错误: db.Insertable<List<实体>>(List).ExecuteCommand()//<>里面不能是list
//正确: Insertable<实体>(List).ExecuteCommand()
//正确: Insertable(List).ExecuteCommand() //(2)、参数化内部分页插入(底层是分页插入)
//优点:适合插入条数固定,并且条数较少,请求频繁高的功能(最大利用执行计划缓存)
//缺点:个别库500以上就开始慢了,要加事务才能回滚
db.Insertable(List<实体>).UseParameter().ExecuteCommand()//5.0.3.8及以上 //(3)、大数据写入(特色功能:大数据处理上比所有框架都要快30%)
//优点:1000条以上性能无敌手
//缺点:不支持数据库默认值, API功能简单, 小数据量并发执行不如普通插入,插入数据越大越适合用这个
//新功能 5.0.44
db.Fastest<实体>().PageSize(100000).BulkCopy(List<实体>);//MySql连接字符串要加AllowLoadLocalInfile=true
//详细文档:https://www.donet5.com/Home/Doc?typeId=2404//(4)、Into Select ,从一个表导入到另一个表
//优点:性能好
//缺点:数据必须在数据库已存在,才能这样插入到新表//例1:不同实体插入
db.Queryable<Order>()//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了 .Select(it=>new { name=it.name,......}) .IntoTable<实体2>();//例2: 同实体不同表插入
db.Queryable<Order>()//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了
.IntoTable<Order>("新表名");
2.3 根据字典插入
//可以是 Dictionary 或者 List<Dictionary >
var dc= new Dictionary<string, object>();dc.Add("name", "1");dc.Add("CreateTime", DateTime.Now);
db.Insertable(dc).AS("student").ExecuteCommand();
2.4 根据 Datatable 插入
//方案1
List<Dictionary<string,object>> dc= db.Utilities.DataTableToDictionaryList(dataTable);//5.0.23版本支持
db.Insertable(dc).AS("student").ExecuteReturnIdentity();//注意:5.0.7.7 以下存在BUG
//方案2 :直接用datatable插入
db.Fastest<System.Data.DataTable>().AS("order").BulkCopy(dataTable);
//具体用法 要看文档 https://www.donet5.com/Home/Doc?typeId=2404
2.5 匿名、Object、接口、抽象类插入
//1.匿名对象插入(最新)
db.InsertableByDynamic(new { name="",price=1 }).AS("[Order]").ExecuteCommand();//2.Object、接口、抽象类插入
//o必须是真实的类对象 (比如根据type反射出来的对象,或者转成了Object的实体)db.InsertableByObject(o).ExecuteCommand();//3.更多功能 :动态建类等
https://www.donet5.com/Home/Doc?typeId=2562
2.6 插入返回值

三、功能案例
3.1 不插入指定字段
//忽略 name testid
db.Insertable(insertObj).IgnoreColumns(it => new { it.Name, it.TestId }).ExecuteReturnIdentity();
db.Insertable(insertObj).IgnoreColumns( "Name","TestId").ExecuteReturnIdentity();
3.2 只插入指定字段
//只插入 name schoolid
db.Insertable(insertObj).InsertColumns(it => new { it.Name, it.SchoolId }).ExecuteReturnIdentity();
db.Insertable(insertObj).InsertColumns("Name","SchoolId").ExecuteReturnIdentity();
3.3 NULL列不插入 💯
注意:因为插入的列不同不支持批量操作,如果有需要可以自已循环操作
db.Insertable(insertObj2).IgnoreColumns(ignoreNullColumn:true).ExecuteCommand();
3.4 异步执行
await Db.Insertable(new Order() { Name = "a", CustomId = 1 }).ExecuteCommandAsync();
3.5 级联、导航插入
db.InsertNav(list).Include(z1 => z1.SchoolA)// 插入第一层 SchoolA.ThenInclude(z1 => z1.RoomList) //插入 SchoolA 下面的 RoomList.Include(z1 => z1.Books)//插入第一层 Books.ExecuteCommand();
3.6 大数据插入
//插入 100万 数秒时间
db.Fastest<RealmAuctionDatum>().BulkCopy(GetList());//性能 比现有任何Bulkcopy都要快30%
db.Fastest<RealmAuctionDatum>().PageSize(50000).BulkCopy(List<实体>);//大数据分页插
//如果不支持可以用:普通分页插入
db.Insertable(List<实体>).PageSize(1000).ExecuteCommand();//普通分页插入
3.7 插入默认值
方式1: 如果数据库存在默认值用这个方法
public class Order
{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }[SugarColumn(IsOnlyIgnoreInsert =true)]//设置后插入会取数据库默认值public DateTime CreateTime { get; set; }
}
方式2:通过特性指定默认值
//InsertServerTime=true 插入取数据库当前时间 支持多库 //IsOnlyIgnoreUpdate=true 是指在Update操作不更新该列 (可用可不用根据需求来)[SugarColumn(InsertServerTime =true, IsOnlyIgnoreUpdate =true)]// getdate() now() sysdatepublic DateTime CreateTime { get; set; }//插入根据SQL进行插入 [SugarColumn(InsertSql = "getdate()")] //生成 getdate()public DateTime CreateTime2 { get; set; }[SugarColumn(InsertSql = "''")] // 生成 ''public string Str { get; set; }[SugarColumn(InsertSql = "0")]// 生成 0public string Str { get; set; }
方式3: 通过AOP实现,会有单独篇幅介绍
3.8 Guid主键自动赋值
只要设置为主键,并且 C# 类型是 Guid 只要不传值,会自动赋值。
🎯注意: 只能用ExecuteCommand 方法不能用自增列的方法
3.9 调用实体内方法
var data=new UnitInsertMethod(){ Name="a",Time=DateTime.Now};db.Insertable(data).ExecuteCommand();db.Updateable(data).CallEntityMethod(it => it.modify("admint")).ExecuteCommand();//实体public class UnitInsertMethod{[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }public string Name { get; set; }public DateTime Time { get; set; }[SqlSugar.SugarColumn(IsNullable =true)]public string UserId { get; set; }public void Create(){this.Time = DateTime.Now;this.UserId = "1";}public void modify(string a){this.Time = DateTime.Now;this.UserId = a;}}
3.10 雪花ID
详情请移步:SqlSugar雪花ID常见问题
3.11 强制插入自增列
🎯需要数据库的支持才行,ORM 只是把 SQL 中的 自增列 加上去了,有些需要写脚本。
//请升级到:5.1.4.73-preview12
db.Insertable(insertObj).OffIdentity().ExecuteCommand() //老版本:SqlServer支持不友好
//db.Insertable(insertObj).IgnoreColumns(false,true).ExecuteCommand()
3.12 Into Select
//例1:不同实体插入 Select Into
db.Queryable<Order>()//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了 .Select(it=>new { name=it.name,......}) .IntoTable<实体2>();//例2: 同实体不同表插入
db.Queryable<Order>()//.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了
.IntoTable<Order>("新表名");
3.13 分页插入
可以用分页插入慢慢处理
db.Insertable(List<实体>).PageSize(1000).ExecuteCommand();//普通分页
db.Fastest<RealmAuctionDatum>().PageSize(100000).BulkCopy(GetList());//大数据分页
四、总结
以上介绍了 SqlSugar 的各种插入操作,除此之外还有 无实体插入、导航插入、AOP插入等等。
🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀
【开篇】.NET开源 ORM 框架 SqlSugar 系列
【入门必看】.NET开源 ORM 框架 SqlSugar 系列
【实体配置】.NET开源 ORM 框架 SqlSugar 系列
【Db First】.NET开源 ORM 框架 SqlSugar 系列
【Code First】.NET开源 ORM 框架 SqlSugar 系列
【数据事务】.NET开源 ORM 框架 SqlSugar 系列
【连接池】.NET开源 ORM 框架 SqlSugar 系列
【查询目录】.NET开源 ORM 框架 SqlSugar 系列
【查询基础】.NET开源 ORM 框架 SqlSugar 系列
【排序用法】.NET开源 ORM 框架 SqlSugar 系列
【分组去重】.NET开源 ORM 框架 SqlSugar 系列
【联表查询】.NET开源 ORM 框架 SqlSugar 系列
【导航查询】.NET开源 ORM 框架 SqlSugar 系列
【子查询】.NET开源 ORM 框架 SqlSugar 系列
【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
【配置查询】.NET开源 ORM 框架 SqlSugar 系列
【并集查询】.NET开源 ORM 框架 SqlSugar 系列
【树型查询】.NET开源 ORM 框架 SqlSugar 系列
【表格查询】.NET开源 ORM 框架 SqlSugar 系列
【动态表达式】.NET开源 ORM 框架 SqlSugar 系列
【查询函数】.NET开源ORM框架 SqlSugar 系列
【过滤器】.NET开源 ORM 框架 SqlSugar 系列
【跨库查询、多库查询】.NET开源 ORM 框架
【报表查询】.NET开源ORM框架 SqlSugar 系列
【Where语法全解密】.NET开源ORM框架 SqlSugar 系列
【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列

相关文章:
【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、前言 🍃二、插入方式 💯2.1 单条插入实体2.2 批量 插入实体2.3 根据字典插入2.4 根据 Dat…...
Spring Boot 的自动配置,以rabbitmq为例,请详细说明
Spring Boot 的自动配置特性能够大大简化集成外部服务和组件的配置过程。以 RabbitMQ 为例,Spring Boot 通过 spring-boot-starter-amqp 提供了自动配置支持,开发者只需在应用中添加相关依赖并配置必要的属性,Spring Boot 会自动配置所需的连…...
Visual Studio 2022+Qt6.5.3安装教程+环境配置+创建Qt项目+乱码插件+运行很完美(16岁孩子也能看懂)
点击上方"蓝字"关注我们 01、安装VS2022 >>> 一、安装VS2022 1、VS2022下载链接:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具[https://visualstudio.microsoft.com/zh-hans/vs/] 2、选择Community 2022个人免费版,点击下载[https://gitcode.…...
LeetCode - 初级算法 数组(旋转数组)
旋转数组 这篇文章讨论如何通过编程实现数组元素的旋转操作。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例: 输入: nums = [1,2,3,...
logback日志框架源码分析
目录 (一)入口:slf4j选择日志框架 (二)日志框架初始化 (1)logback的3种配置方式 a、BasicConfigurator默认配置 b、SPI方式配置的Configurator实现类 c、通过配置文件初始化 (2)xml配置文件初始化 (三)Logger的创建 (四)打印日志 本文源码基于:logback版…...
【微服务】3、配置管理
微服务配置管理 已掌握的微服务组件及配置管理问题引出 已掌握注册中心、Openfan、远程调用、负载均衡、网关等组件,具备微服务开发能力,但仍存在其他问题待解决。微服务和网关存在大量配置文件,其中包含很多重复配置,如数据库、日…...
数据分析思维(七):分析方法——群组分析方法
数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...
概述(讲讲python基本语法和第三方库)
我是北子,这是我自己写的python教程,主要是记录自己的学习成果方便自己日后复习, 我先学了C/C,所以这套教程中可能会将很多概念和C/C去对比,所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…...
力扣-20-有效的括号-栈
思路: 左括号每次匹配都是先匹配最后进来的,和栈的特点很相似,我们就可以利用栈来完成...
数据在内存中的存储【C语言版】
目录 1.举例: 2.深入刨析大端小端的组成: 3.判断当前编译环境是大端还是小端的方法 4.以函数的形式来判断当前的编译环境是大端还是小端【就是把判断大端小端的方法放进函数里面来实现,得到返回值,可以减少main()函数的内存】…...
【SQL】进阶知识 — 各大数据库合并几条数据到一行的方式
大家好,欢迎来到本期的 SQL 知识分享!今天我们要聊一个非常实用的技能:如何将多个行数据合并成一行!如果你曾经需要把多个查询结果合并成一个单元,或者把多行数据汇总到一个字段中,这篇文章将会教你如何用 …...
Gitee上传项目代码教程(详细)
工具必备:Git Bash 上传步骤 1.在Gitee创建项目仓库 2.进入本地项目目录 右键打开Git Bash here 3.配置用户名和邮箱 如果之前给git配置过用户名和邮箱可跳过 查看Git是否配置成功:git config --list git config --global user.name "xxx"…...
python ijson 用法教程
ijson PyPI Python ijson处理大型JSON文件 - 秀尊云 Python解析JSON大文件 | Leetaos Blog https://stackoverflow.com/questions/2400643/is-there-a-memory-efficient-and-fast-way-to-load-big-json-files/58148422#58148422 Python中读写(解析)J…...
什么是网络安全攻防演练,即红蓝对抗?
定义与目的 定义:网络安全攻防演练是一种模拟真实网络攻击和防御场景的活动,通过组织专业的攻击队伍(红队)和防御队伍(蓝队)进行对抗,来检验和提升组织的网络安全防御能力、应急响应能力和安全运…...
数据挖掘——决策树分类
数据挖掘——决策树分类 决策树分类Hunt算法信息增益增益比率基尼指数连续数据总结 决策树分类 树状结构,可以很好的对数据进行分类; 决策树的根节点到叶节点的每一条路径构建一条规则;具有互斥且完备的特点,即每一个样本均被且…...
Pytorch单、多GPU和CPU训练模型保存和加载
Pytorch多GPU训练模型保存和加载 在多GPU训练中,模型通常被包装在torch.nn.DataParallel或torch.nn.parallel.DistributedDataParallel中,这会在模型的参数名前加上module前缀。因此,在保存模型时,需要使用model.module.state_di…...
Karate 介绍与快速示例(API测试自动化、模拟、性能测试与UI自动化工具)
Karate是一个将API测试自动化、模拟、性能测试甚至UI自动化结合到一个统一框架中的开源工具。 Karate使用Gherkin 的BDD语法,是语言中性的,即使是非程序员也很容易。断言和HTML报告是内置的,支持并行运行测试以提高速度Karate 是用Java语言编写, 可以在Java 项目项目中运行…...
Pytest 高级用法:间接参数化
文章目录 1. 引言2. 基础概念2.1 Fixture2.2 参数化 3. 代码实例3.1 基础设置3.2 测试用例示例示例 1:基础的间接参数化示例 2:通过 request 获取参数值示例 3:多参数组合测试示例 4:部分间接参数化 4. 最佳实践5. 总结参考资料 1…...
第07章 存储管理(一)
一、磁盘简介 1.1 名称称呼 磁盘/硬盘/disk是同一个东西,不同于内存的是容量比较大。 1.2 类型 机械:机械硬盘即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器࿰…...
Go语言的 的设计模式(Design Patterns)核心知识
Go语言的设计模式(Design Patterns)核心知识 Go语言(Golang)是一种静态类型、编译型的编程语言,自2009年由Google正式推出以来,因其高效的性能、卓越的并发能力以及简洁的语法受到广泛欢迎。在软件开发中&…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
