Mybatis批量插入数据

article/2025/9/13 22:50:03

前言

在很多业务场景中,我们需要批量录入数据。那么意味着我们需要以最高效的方式去实现功能,同时也需要保证软件的便捷性与可维护性,开源字节使用MyBatis foreach标签方式优雅的实现了材料的出入库。源码开放,可前往码云仓库免费获取。

MyBatis简介

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

Mybatis的三种批量插入方式

1、循环插入

studentList.stream().forEach(student -> studentMapper.insert(student));

2、foreach标签

<insert id="insert" parameterType="Student">INSERT INTO tb_student (name, age, phone, address, class_id) VALUES (#{name},#{age},#{phone},#{address},#{classId})
</insert>
<insert id="insertBatch">INSERT INTO tb_student (name, age, phone, address, class_id) VALUES<foreach collection="list" separator="," item="item">(#{item.name},#{item.age},#{item.phone},#{item.address},#{item.classId})</foreach>
</insert>

3、批处理

SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
StudentMapper studentMapperNew = sqlSession.getMapper(StudentMapper.class);
studentList.stream().forEach(student -> studentMapperNew.insert(student));
sqlSession.commit();
sqlSession.clearCache();

三种插入方式在不同数据量下的表现,测试结果:

三种方式中,批处理的方式效率是最高的,尤其是在数据量大的情况下尤为明显。其次是foreach标签,foreach标签是通过拼接SQL语句的方式完成批量操作的。但是当拼接的SQL过多,导致SQL大小超过了MySQL服务器中max_allowed_packet变量的值时,会导致操作失败,抛出PacketTooBigException异常。最后是循环插入的方式,这种方式在数据量小的时候可以使用,在数据量大的情况下效率要低很多。

如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/243.html


http://chatgpt.dhexx.cn/article/1bAf7UFC.shtml

相关文章

批量插入

目录 一、批量插入数据 ⚪JDBC的批量处理语句的方法 二、高效的批量插入 1.举例&#xff1a;向goods表中插入20000条数据 ⭐goods表的创建 方式一&#xff1a;使用Statement 方式二&#xff1a; 使用PreparedStatement替换Statement &#x1f319;方式一与方式二的对比…

三种批量插入数据的方法

批量插入数据 本文将介绍三种批量插入数据的方法。第一种方法是使用循环语句逐个将数据项插入到数据库中&#xff1b;第二种方法使用的是SqlBulkCopy&#xff0c;使您可以用其他源的数据有效批量加载 SQL Server 表&#xff1b;第三种使用的方法是sql server中的表值参数方法&a…

Vue 通过a标签下载文件

vue前端点击某个a便签需要下载对应文件&#xff0c;href为下载路径&#xff0c;download为下载文件名 这是Vue-cli3 写法 因为public文件夹是静态拷贝。 并不要把文件放到src>assets里面 因为assets中的文件会经过 webpack 打包&#xff0c;重新编译。 <a href"./p…

通过 a 标签下载文件

后台管理项目涉及到文件下载到本地&#xff0c;类型包括&#xff08;图片&#xff0c;音频&#xff0c;视频&#xff0c;office文件等等&#xff09;&#xff0c;只需将后台接口提供的url给到 a 标签即可。 <div class"preview-download" click.stop"downLoa…

a标签下载文档 a下载文档失败问题 跨域调用

可以通过a标签下载文档 a中有一个download属性 这个属性可以为空&#xff0c;如果写入的话这是写下载文档的名字 a标签默认下载是在同一个域内&#xff0c;如果跨域的话下载会失败&#xff0c;可能变成预览 出现的问题 from origin ‘http://localhost:8080’ has been blocke…

js使用a标签实现文件下载功能

工作中遇到下载txt文本文件的下载需求&#xff0c;稍作整理&#xff0c;下载示例如下&#xff1a; <button onclick"log()">文件下载</button>// 日志函数 function log() {// dom中创建a标签let aTag document.createElement(a)// 日志展示的内容let c…

JS-a标签下载文件

目录 问题描述解决方法拓展 另一种文件流下载 问题描述 昨天拿到一个需求,就是做成这种下载的模样 后台返回的下载链接长成这样 解决方法 就是一个最普通的方法,创建a标签 ,加上download属性,模拟标签点击 就可以触发下载了 注意:这个是因为直接拿到了请求链接,get请求 co…

HTML中的一些细节处理

# 说明 参考资料:简书的 伴歌知行的JS下载图片和文件&#xff0c;防止浏览器直接打开 、夜半修仙,;CSDN的weixin_3791475的使用a标签下载文件不跳转;努力学习的汪&#xff1a;洪学习笔记 文章目录 # 说明前端利用a标签实现文件[图片]下载文件下载常用方式总结分析Ⅰ-后端设置下…

JAVA中数组和集合的区别

转换 数组转换为集合&#xff1a; Arrays.asList(数组) 示例&#xff1a; 1 2 3 4 5 int[] arr {1,3,4,6,6};//定义一个长度为5数组 Arrays.asList(arr); for(int i0;i<arr.length;i){ System.out.println(arr[i]); } 集合转换为数组&#xff1a; 集合.toArray()…

JAVA中数组和集合的相互转换

数组转集合&#xff1a; 1.遍历&#xff0c;最常用的方法&#xff0c;但是过程会繁琐一点 int arrs[] {1, 2};//1.遍历List<Integer> list new ArrayList<>();for (int ele : arrs) {list.add(ele);}System.out.println(list);2.使用数组工具类的asList()方法 但…

数组与集合的区别及知识拓展

一、数组和集合的区别 1、数组的长度是固定的&#xff0c;一个数组只能存储一种类型的元素&#xff0c;可以存储任意类型。 2、集合的长度是可变的&#xff0c;存储引用数据类型&#xff0c;当存储基本数据类型时需要存储其对应的包装类。 二、知识拓展 1、基本数据类型所对应…

数组和集合的区别及定义方式

数组和集合的定义 一、数组 数组是java语言内置的数据类型&#xff0c;他是一个线性的序列&#xff0c;所有可以快速访问其他的元素&#xff0c;数组和其他语言不同&#xff0c;当你创建了一个数组时&#xff0c;他的容量是不变的&#xff0c;而且在生命周期也是不能改变的&a…

Java的数组与集合

Java的数组与集合 数组1.数组的概念2.数组的定义3.数组的初始化数组静态初始化数组动态初始化数组默认初始化值 4.数组元素访问5.数组的遍历6.数组的内存图JVM的内存图数组的内存图扩展 集合1.集合与数组的比较基本数据类型的包装类 2.集合中的成员方法 数组 1.数组的概念 数组…

数组与集合有什么不同之处

这个问题其实就是一个非常基础的面试题&#xff0c;一般面试官想了解你基础知识方面的掌握时&#xff0c;基本都会问这个问题&#xff0c;尤其是一些&#xff0c;计算机学子毕业之后&#xff0c;如果还是想要从事计算机技术相关的行业时&#xff0c;那么在面试的时候就需要做好…

kotlin数组和集合

一、Kotlin数组 1.对象数组 由Kotlin的main函数的写法&#xff0c;可以看出Kotlin中的对象数组写法与泛型的写法很像。 fun main(args: Array<String>){ } 声明对象数组的三种形式&#xff1a; (1)使用arrayOf函数和指定的数组元素创建数组 //Java写法: String[] p…

Java--数组和集合区别

一、数组 1、Java语言中的数组是一种引用数据类型&#xff1b;不属于基本数据类型 2、数组当中既可以存储“基本数据类型”的数据&#xff0c;也可以存储“引用数据类型”的数据&#xff08;数组既可以存储基本数据类型&#xff0c;又可以存储引用数据类型&#xff0c;基本数…

数组和集合的区别

一、数组声明了它容纳的元素的类型&#xff0c;而集合不声明。 二、数组是静态的&#xff0c;一个数组实例具有固定的大小&#xff0c;一旦创建了就无法改变容量了。而集合是可以动态扩展容量&#xff0c;可以根据需要动态改变大小&#xff0c;集合提供更多的成员方法&#xff…

数组和集合区别

一、数组声明了它容纳的元素的类型&#xff0c;而集合不声明。 二、数组是静态的&#xff0c;一个数组实例具有固定的大小&#xff0c;一旦创建了就无法改变容量了。而集合是可以动态扩展容量&#xff0c;可以根据需要动态改变大小&#xff0c;集合提供更多的成员方法&#xff…

Intellij idea 的tomcat原理讲解

作者: 陈宇超          纪念卓越班的日子 初次用idea的小白可能会很感到很神奇&#xff0c;intellij idea部署web项目在浏览器不需要输入项目名就可以直接访问&#xff0c;很是方便啊。那么 intellij 是如何实现这一功能的呢&#xff1f;在了解其原理之前需要掌握一定的…

Tomcat运行原理

Tomcat服务器本质 Tomcat是运行在JVM中的一个进程。通过处理scoket通信 (Socket) 来运行。Web项目的本质&#xff0c;是一大堆的资源文件和方法。Web项目没有入口方法(main方法)&#xff0c;意味着Web项目中的方法不会自动运行起来。Web项目部署进Tomcat的webapp中&#xff0c…