Mybatis批量插入方式有哪些
MyBatis的批量插入有多种写法,下面我将列出一些常见的批量插入写法
方式列表
- 使用XML配置文件进行批量插入:在XML映射文件中使用
<insert>标签,并通过foreach标签迭代批量数据,然后在SQL语句中使用VALUES关键字。 - 使用Java注解进行批量插入:在实体类上使用
@Insert注解,并通过@Param注解传入批量数据的参数。 - 使用Java编程语言提供的数据绑定进行批量插入:在Java代码中使用
List<Entity>类型的参数,通过SqlSession.insert()方法进行批量插入。 - 使用MyBatis Plus的LambdaUpdate进行批量插入:在实体类上使用
@LambdaUpdate注解,并通过Lambda表达式定义批量插入的SQL语句。 - 使用MyBatis Plus的UpdateProvider进行批量插入:在实体类上使用
@UpdateProvider注解,并指定一个自定义的UpdateProvider类,该类通过反射生成批量插入的SQL语句。 - 使用Java编程语言提供的批处理机制进行批量插入:在Java代码中使用
PreparedStatement的addBatch和executeBatch方法,将多个插入操作添加到批处理队列中,然后一次性执行所有操作。 - 使用MyBatis Plus的BatchExecutor进行批量插入:在Java代码中使用
BatchExecutor类,通过指定SQL语句和参数列表,执行批量插入操作。 - 使用MyBatis Plus的BatchInsertBuilder进行批量插入:在实体类上使用
@AutoBatchInsert注解,并使用BatchInsert类提供的静态方法进行批量插入操作。 - 使用MyBatis的批量执行器BatchExecutor进行批量插入:在Java代码中使用
ExecutorType.BATCH类型的执行器,通过SqlSessionFactory.getSqlSession()方法获取批量执行的SqlSession,然后使用SqlSession.insert()方法进行批量插入操作。 - 使用MyBatis Plus的Mapper批量插入:在Java代码中使用
BaseMapper接口的insertList()方法,通过传入批量插入的数据列表进行操作。
主要的方式
XML方式
<insert id="insertBatch" parameterType="java.util.List"> INSERT INTO table_name (column1, column2, ...) VALUES <foreach collection="list" item="item" separator=","> (#{item.column1}, #{item.column2}, ...) </foreach>
</insert>
注解方式
@LambdaUpdate({ @QuerySql("INSERT INTO table_name (column1, column2, ...) VALUES ", "#{list,jdbcType=VARCHAR},#{list2,jdbcType=INTEGER}")
})
void insertBatch(List<Entity> list);
Plus方式
servicce.saveBatch(List<entity>,size)//size默认1000
Provider方式
@UpdateProvider(sql = "INSERT INTO table_name (column1, column2, ...) VALUES ",provider = BatchEntityProvider.class)
void insertBatch(List<Entity> list);
public class BatchEntityProvider extends AbstractEntityProvider<Entity> { public BatchEntityProvider() { super(Entity.class); } @Override public String createSql(Entity model, String sql, LambdaSqlContext ctx) { StringBuilder sqlBuilder = new StringBuilder(sql); List<Object> params = ctx.getParams(); sqlBuilder.append(" VALUES "); for (int i = 0; i < params.size(); i++) { sqlBuilder.append("("); Object param = params.get(i); if (param instanceof Map) { // 当参数是一个Map时,map的key对应属性名,value对应属性值。属性名顺序需要和Entity保持一致。 Map<String, Object> map = (Map<String, Object>) param; for (Object key : map.keySet()) { // 遍历map的key,拼接sql。 sqlBuilder.append("#{" + key + ",jdbcType=" + JdbcType.class.getName().replace(".", ",").replace("JdbcType", "").replace("}", "").replace("}", "") + "},"); // 去掉JdbcType后的所有括号以及.号拼接到sql中。 } } else { // 当参数不是Map时,直接拼接sql。属性顺序需要和Entity保持一致。 for (int j = 0; j < model.getColumns().size(); j++) { // 遍历Entity的所有属性,拼接sql。 sqlBuilder.append("#{" + model.getColumns().get(j) + "},"); // 拼接到sql中。 } } sqlBuilder.deleteCharAt(sqlBuilder.length() - 1); // 删除最后一个逗号。 if (i != params.size() - 1) { // 如果不是最后一个参数,需要添加逗号隔开每个子语句。 sqlBuilder.append(","); } else { // 是最后一个参数,不需要添加逗号隔开每个子语句。 sqlBuilder.append(")"); // 需要添加括号结束子语句。 } if (i != params.size() - 1) { // 如果不是最后一个参数,需要添加逗号隔开每个子语句的左括号。 sqlBuilder.append(","); } else { // 是最后一个参数,不需要添加逗号隔开每个子语句的左括号。 sqlBuilder.append(" "); // 需要添加空格结束每个子语句的左括号。 } } return sqlBuilder.toString(); // 返回拼接好的SQL语句。 }
}
本文由mdnice多平台发布
相关文章:
Mybatis批量插入方式有哪些
MyBatis的批量插入有多种写法,下面我将列出一些常见的批量插入写法 方式列表 使用XML配置文件进行批量插入:在XML映射文件中使用<insert>标签,并通过foreach标签迭代批量数据,然后在SQL语句中使用VALUES关键字。使用Java注…...
前端框架学习-React(一)
React 应用程序是由组件组成的。 react 程序是用的jsx语法,使用这种语法的代码需要由babel进行解析,解析成js代码。 jsx语法: 只能返回一个根元素 所有的标签都必须闭合(自闭和或使用一对标签的方式闭合) 使用驼峰式…...
Android Studio实现解析HTML获取图片URL将图片保存到本地
目录 效果activity_main.xmlMainActivityImageItemImageAdapter 效果 项目本来是要做成图片保存到手机然后读取数据后瀑布流展示,但是有问题,目前只能做到保存到手机 activity_main.xml <?xml version"1.0" encoding"utf-8"?…...
单例模式的理论与实践
本文实践代码仓库:https://github.com/goSilver/my_practice 文章目录 一、定义二、作用三、实现3.1 饿汉式3.2 懒汉式3.3 双重检查3.4 静态内部类3.5 枚举 四、总结4.1 单例存在哪些问题?4.2 单例有什么替代解决方案? 一、定义 单例模式是一…...
深入了解MongoDB:灵活的文档型数据库与应用案例
什么是MongoDB ? MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个…...
【HarmonyOS北向开发】-01 HarmonyOS概述
飞书原文链接-【HarmonyOS北向开发】-01 HarmonyOS概述https://fvcs2dhq8qs.feishu.cn/docx/TDf2d2KMaoPSUUxnvg2cASDdnCe?fromfrom_copylink...
Node.js入门
安装 前往官网下载即可:https://nodejs.org/zh-cn 安装之后检查是否成功并查看版本,winr --> 输入cmd --> 确认 --> 进入命令提示符窗口 --> 输入 node -v --> 出现以下就代表成功了,这也是node的版本号 什么是Node.js Nod…...
指针、数组、sizeof、strlen相关知识与练习题目
目录 前提回顾🔍: 关于一维数组🤮: 关于二维数组😀: sizeof与strlen🐕: sizeof🏀: strlen🐓: 相关练习📚:…...
分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测
分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测,运行环境Matlab2023b及以上…...
MyBatis动态SQL:打造灵活可变的数据库操作
目录 if标签trim标签where标签set标签foreach标签 动态SQL就是根据不同的条件或需求动态地生成查询语句,比如动态搜索条件、动态表或列名、动态排序等。 if标签 在我们填写一些信息时,有些信息是必填字段,有的则是非必填的,这些…...
nginx代理请求到内网不同服务器
需求:之前用的是frp做的内网穿透,但是每次电脑断电重启,路由或者端口会冲突,现在使用汉土云盒替换frp。 需要把公网ip映射到任意一台内网服务器上,然后在这台内网服务器上用Nginx做代理即可访问内网其它服务器…...
【C# 基础精讲】文件读取和写入
文件读取和写入是计算机程序中常见的操作,用于从文件中读取数据或将数据写入文件。在C#中,使用System.IO命名空间中的类来进行文件读写操作。本文将详细介绍如何在C#中进行文件读取和写入,包括读取文本文件、写入文本文件、读取二进制文件和写…...
设计模式——经典单例
0、核心要素 // 构造、析构函数私有化(一个进程只允许一个对象存在) // 对象私有化、静态化(因为接口静态函数) // 对象调用接口静态化(因为静态函数脱离了类对象,可以直接调用) 一、懒汉 唯…...
【HarmonyOS】鸿蒙应用获取华为帐号手机号码步骤(API7及以下)
【写在前面】 本文主要介绍使用API7及以下版本开发HarmonyOS应用时,通过华为帐号SDK和云侧接口获取手机号码的主要开发步骤,注意:开发过程中集成的华为帐号SDK仅支持API7及以下版本的HarmonyOS应用。 【前提准备】 1、HarmonyOS应用已申请获…...
webpack相关面试
运行 npm run xxx 的时候发生了什么? npm run xxx的时候,首先会去项目的package.json文件里找scripts 里找对应的xxx,然后执行 xxx的命令 npm i 的时候,npm 读到该配置后,就将该文件软链接到 ./node_modules/.bin 目录…...
如何使用ChatGPT创建个性化的健身锻炼计划
ChatGPT广泛应用于各个行业,健身也不例外。 ChatGPT 在健身领域的一个常用案例是创建个性化的锻炼计划。 在要求 ChatGPT 创建锻炼计划时,简单地输入自己的目标和当前的健身水平是一个很好的开始。完成此操作后,你还可以使用其他提示和措施来…...
人工智能与云计算实训室建设方案
一、 人工智能与云计算系统概述 人工智能(Artificial Intelligence,简称AI)是一种模拟人类智能的科学和工程,通过使用计算机系统来模拟、扩展和增强人类的智能能力。人工智能涉及多个领域,包括机器学习、深度学习、自然…...
使用 Apache Kafka 和 Go 将数据引入 OpenSearch
需要编写自定义集成层来满足数据管道中的特定要求?了解如何使用 Go 通过 Kafka 和 OpenSearch 实现此目的。 可扩展的数据摄取是OpenSearch等大规模分布式搜索和分析引擎的一个关键方面。构建实时数据摄取管道的方法之一是使用Apache Kafka。它是一个开源事件流平台…...
2.SpringMvc中Model、ModelMap和ModelAndView使用详解
1.前言 最近SSM框架开发web项目,用得比较火热。spring-MVC肯定用过,在请求处理方法可出现和返回的参数类型中,最重要就是Model和ModelAndView了,对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据…...
Spark repartition和coalesce的区别
repartition只是coalesce接口中shuffle为true的实现。不经过 shuffle,也就是coaleasce shuffle为false,是无法增加RDD的分区数的,比如你源RDD 100个分区,想要变成200个分区,只能使用repartition,也就是coal…...
金融合规审核为何人力堆积却仍漏洞百出?2026年RegTech演进与Agent全链路闭环解决方案
在2026年的金融监管环境下,合规审核已不再是简单的“查漏补缺”,而是演变为一场高强度的算力与逻辑博弈。尽管金融机构在合规成本上的投入逐年攀升,甚至不惜以“人海战术”填补流程断点,但监管罚单的数额与频率却并未显著下降。这…...
厨房空调技术白皮书:从风冷到水冷,制冷系统在厨房场景中的工程化演进
厨房空调是暖通行业近三年技术迭代最密集的细分品类。从最初的"凉霸"(本质是风扇),到风冷分体式,再到水冷一体式,每代技术都在解决上一代没有覆盖的用户痛点。本文以工程技术视角,梳理四代厨房制…...
如何快速解锁艾尔登法环帧率限制:终极性能优化指南
如何快速解锁艾尔登法环帧率限制:终极性能优化指南 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/EldenR…...
DIY四路自动音频源切换器:从信号检测到继电器隔离的完整设计
1. 项目概述与核心需求解析作为一个喜欢在工作室里捣鼓各种音频设备的玩家,我经常遇到一个挺烦人的问题:我的功放只有一组输入,但我想接的设备却有好几个——台式电脑、平板、蓝牙接收模块,还有一台树莓派。每次想切换音源&#x…...
如何用HsMod解锁炉石传说60+项隐藏功能:终极优化指南
如何用HsMod解锁炉石传说60项隐藏功能:终极优化指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx开发的炉石传说功能增强插件,为玩家提供…...
基于MAX78000与CNN的智能螺栓巡检小车:嵌入式AI实战解析
1. 项目概述与核心思路在轨道交通的日常运维中,螺栓的紧固状态检查是一项繁重且关键的任务。无论是轨道上的紧固螺栓,还是列车转向架、轮对轴承上的关键螺栓,其松动或失效都可能引发严重的安全事故。传统的人工巡检方式不仅效率低下ÿ…...
PS5 NOR Modifier深度解析:如何通过Windows工具修复PS5硬件故障与实现光驱版转数字版
PS5 NOR Modifier深度解析:如何通过Windows工具修复PS5硬件故障与实现光驱版转数字版 【免费下载链接】PS5NorModifier The PS5 Nor Modifier is an easy to use Windows based application to rewrite your PS5 NOR file. This can be useful if your NOR is corru…...
5步彻底解决Windows DLL加载冲突:UE4SS系统故障排查指南
5步彻底解决Windows DLL加载冲突:UE4SS系统故障排查指南 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS…...
ComfyUI-Manager完全指南:掌握AI工作流管理的核心技术
ComfyUI-Manager完全指南:掌握AI工作流管理的核心技术 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custo…...
基于STM32WL与LoRaWAN的远程空气质量监测系统全栈开发实践
1. 项目概述:构建一个远程空气质量监测系统最近在做一个挺有意思的玩意儿:一个能自己找地方待着、靠太阳能供电,然后把周围空气数据悄无声息传回来的远程监测终端。核心想法很简单,就是想知道某个犄角旮旯,比如工厂周边…...
