【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正式推出以来,因其高效的性能、卓越的并发能力以及简洁的语法受到广泛欢迎。在软件开发中&…...
MCP-AI编程打通WIKI知识库以及后续的一些思考
摘要本文包含两部分内容,第一部分是MCP的开发配置,第二部分是MCP开发后的一些感悟,即AI 时代的数据存储与后端架构。引言使用了AI编程工具一年了,最直观的感觉就是AI编程的代码生成效果越来越好,想要代码生成效果好&am…...
高通Camera驱动(4)-- 从configure_streams到Usecase的创建与匹配
1. configure_streams到Usecase的转换机制 当Android框架调用configure_streams接口后,高通Camera HAL会经历从流配置到具体场景(Usecase)创建的复杂决策过程。这个过程就像餐厅的点餐系统:顾客(框架)提交订单(stream …...
FLUX.1海景美女图新手教程:3分钟掌握提示词结构——主体+环境+光线+风格
FLUX.1海景美女图新手教程:3分钟掌握提示词结构——主体环境光线风格 你是不是也遇到过这种情况?看到别人用AI生成的“海景美女图”美轮美奂,自己试了试,结果出来的图片要么人物奇怪,要么背景模糊,要么光线…...
如何用MTB Nodes轻松制作专业级ComfyUI动画:免费开源终极指南
如何用MTB Nodes轻松制作专业级ComfyUI动画:免费开源终极指南 【免费下载链接】comfy_mtb Animation oriented nodes pack for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/comfy_mtb 想用ComfyUI创作惊艳动画却不知从何开始?MTB Nodes…...
fft npainting lama图片修复系统使用教程:从上传到修复全流程
fft npainting lama图片修复系统使用教程:从上传到修复全流程 1. 引言:让图片修复变得像涂鸦一样简单 你有没有遇到过这样的烦恼?一张完美的风景照,偏偏有个路人闯进了镜头;一张珍贵的合影,上面却有个碍眼…...
KeymouseGo:3个核心技术解析与跨平台自动化实战 [特殊字符]
KeymouseGo:3个核心技术解析与跨平台自动化实战 🚀 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo …...
拆解对比:Holtek BS45F3833 vs 传统方案,为什么它能成为超声波雾化行业新标杆?
Holtek BS45F3833芯片深度解析:超声波雾化技术的革新与突破 在智能家居和健康设备领域,超声波雾化技术正经历着一场静默的革命。从加湿器到香薰机,从医疗雾化到工业加湿,这项技术的应用场景不断扩展,而驱动这些设备的核…...
Py之openml:从入门到实战,解锁机器学习数据与实验的开放宝库
1. OpenML:机器学习界的"开源宝库"初探 第一次听说OpenML这个平台时,我正为毕业论文的数据集发愁。导师要求必须使用标准数据集,但各大平台的数据格式五花八门,光数据清洗就耗掉了我两周时间。直到实验室师兄推荐了Ope…...
告别臃肿!用ContextMenuManager重塑你的Windows右键菜单体验
告别臃肿!用ContextMenuManager重塑你的Windows右键菜单体验 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾经在Windows系统中右键点击文件…...
golang如何实现滑动窗口计数器_golang滑动窗口计数器实现思路
滑动窗口计数器不能只用map定时清理,因会漏统计非整点对齐的请求;必须保留带时间戳事件或时间分片,常用环形数组实现,按需shift比ticker更精准高效。滑动窗口计数器为什么不能只用 map 定时清理直接用 map[string]int 存请求次数…...
