广告
返回顶部
首页 > 资讯 > 精选 >MyBatis如何批量插入大量数据
  • 926
分享到

MyBatis如何批量插入大量数据

2023-06-22 07:06:32 926人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关mybatis如何批量插入大量数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBa

这篇文章将为大家详细讲解有关mybatis如何批量插入大量数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBatis开始报错。项目使用技术:SpringBoot、MyBatis

批量插入碰到的问题:

java.lang.StackOverflowError: null

该问题是由于一次性插入数据1w条引起的,具体插入代码如下:

userDao.batchInsert(list);<insert id="batchInsert" parameterType="java.util.List">    INSERT INTO USER    <trim prefix="(" suffix=")" suffixOverrides=",">        ID, AGE, NAME, EMaiL    </trim>    SELECT A.*    FROM    (<foreach collection="list" index="index" item="item" separator="UNION ALL">    SELECT    sys_guid(), #{user.age}, #{user.name}, #{user.email}    FROM dual</foreach>) A</insert>

以上的插入代码其实也是一种批量插入的方式,但是他的灵界点并不高,插入数据过多的时候,可能需要我们使用代码在一次分批。当然如果插入数据不超过5000的时候可以直接这么使用

插入1w条数据,发现出现错误,原因是数据量过大,栈内存溢出了。mybatis中直接使用foreach插入数据,就相当于将所有的sql预先拼接到一起,然后一起提交。这本身就是一种批量插入的处理方案,但是达不到我们要求。主要是插入有上限。如果需要更多的数据导入,我们需要更换一种方式来解决这个问题,mybatis中ExecutorType的使用。

mybatis中ExecutorType的使用

Mybatis内置的ExecutorType有3种,SIMPLE、REUSE、BATCH; 默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优;但batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的;

插入大量数据的解决方案,使用ExecutorType

为了能够高效,并且解决上述问题,我们使用ExecutorType,并分批插入。代码如下:

//我们使用的是springboot,sqlSessionTemplate是可以自己注入的@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;public void insertexcelData(List<User> list) {    //如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出    SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);    //不自动提交    try {        UserDao userDao = session.getMapper(UserDao.class);        for (int i = 0; i < list.size(); i++) {            userDao.insert(list.get(i));            if (i % 400 == 0 || i == list.size() - 1) {                //手动每400条提交一次,提交后无法回滚                session.commit();                //清理缓存,防止溢出                session.clearCache();            }        }    } catch (Exception e) {        //没有提交的数据可以回滚        session.rollback();    } finally {        session.close();    }}userDao.insert(User user);<insert id="insert" parameterType="com.echo.UserPo">    insert into USER    (id    <if test="age != null">        ,age    </if>    <if test="name != null">        ,name    </if>    <if test="email != null">        ,email    </if>    )    values (    sys_guid()    <if test="age != null">        ,#{age}    </if>    <if test="name != null">        ,#{name}    </if>    <if test="email != null">        ,#{email}    </if>)</insert>

这里采用的是单条插入,直接使用for循环,但是使用ExecutorType.BACTH就相当于手动提交。这也是我们需要的效果,所以我们在循环里面判断了,是否到了第400笔,如果到了第400笔就直接提交,然后清空缓存,防止溢出。这样就有效的实现了批量插入,同时保证溢出问题的不出现

关于“MyBatis如何批量插入大量数据”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: MyBatis如何批量插入大量数据

本文链接: https://www.lsjlt.com/news/303562.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MyBatis如何批量插入大量数据
    这篇文章将为大家详细讲解有关MyBatis如何批量插入大量数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBa...
    99+
    2023-06-22
  • MyBatis批量插入大量数据(1w以上)
    问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBatis开始报错。项目使用技术:SpringBoot、MyBatis 批量插入碰到的问题...
    99+
    2022-11-12
  • 大批量数据分批批量插入或更新(Mybatis+MySQL)
    大批量数据分批批量插入或更新 在MySQL数据库的前提下,插入或更新大批量数据。首先批量插入需要考虑到以下几个因素: 数据库一次可以承受多大或者多少条数据的插入批量插入是否会占用Mysql资源太久,影响系统整体使用性能代码中的集合是否会造成...
    99+
    2023-08-30
    mybatis mysql 数据库 java spring boot
  • Mybatis批量插入大量数据最优方式
    Mybatis批量插入的方式有三种 1. 普通插入 2. foreach 优化插入 3. ExecutorType.BATCH插入 下面对这三种分别进行比较: 1.普通插入 默认的插入方式是遍历ins...
    99+
    2023-09-06
    mybatis java mysql
  • Mybatis批量插入大量数据的方法有哪些
    本文小编为大家详细介绍“Mybatis批量插入大量数据的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis批量插入大量数据的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Mybat...
    99+
    2023-07-05
  • MyBatis如何实现批量插入数据
    本文小编为大家详细介绍“MyBatis如何实现批量插入数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“MyBatis如何实现批量插入数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、SQL实现示例假设我们...
    99+
    2023-07-04
  • Mybatis批量插入大量数据的最优方式总结
    目录Mybatis批量插入的方式有三种下面对这三种分别进行比较:1.普通插入2.foreach 优化插入3.ExecutorType.BATCH插入总结:Mybatis批量插入的方式...
    99+
    2023-03-19
    mybatis大量数据批量insert mybatis 批量插数据 mybatis批量新增数据
  • mybatis批量插入(Oracle)
    配置文件(Oracle):<!-- 批量插入临时表--><insert id="insertTempPhoneBatch"parameterType="java.util.HashMap"...
    99+
    2022-10-18
  • mybatis oracle批量插入
    <insert id="insertbatchinfotoemploees" parameterType="java.util.List">     insert ...
    99+
    2022-10-18
  • C# MySQL 插入大批量数据
    一、定义DataTable的数据类型 private DataTable GetDataTableFromExternalSource(string tablename) { DataTable dat...
    99+
    2023-09-08
    mysql c# 数据库
  • Mybatis批量插入、修改
            在 MyBatis 中, 标签用于遍历集合类型的条件,并且可以将多个参数值拼接成为 SQL 语句的一个部分,通常被用于批量插入或更新等操作。  属性及介绍          属性介绍collection集合名称item字符别...
    99+
    2023-09-09
    java spring boot mybatis mysql
  • Mybatis-plus---的批量插入
    批量插入 一、继承IService(伪批量) 二、insertBatchSomeColumn Mybatis-plus很强,为我们诞生了极简CURD操作,但对于数据批量操作,显然默认提供的insert方法是不够看的了,于是它和它来了!...
    99+
    2023-08-31
    mybatis java spring
  • 如何用mybatis快速插入大量数据?
    在公司业务开发过程中,经常会遇到需要往数据库表中插入大量数据的一个场景,如excel批量导入数据,如何快速的去插入数据呢,可以考虑使用批量插入(实测每秒能达到35000条,后附具体代码) JDBC实现方式: 用一个 for 循环,把数据一...
    99+
    2023-09-25
    mybatis java spring boot mysql
  • Mysql大数据批量插入方法
    MySQL是当前最流行的关系型数据库之一,大数据批量插入是MySQL中常用的操作之一。在处理大量数据时,如果一条一条地插入会极大地影响效率,因此批量插入是一个更好的选择,可以大大提高数据的处理速度。下面介绍几种MySQL大数据批量插入的方法...
    99+
    2023-09-14
    mysql 大数据 数据库
  • MyBatis 批量插入数据的 3 种方法!
    数据库的最终效果如下: 1.循环单次插入 接下来我们将使用 Spring Boot 项目,批量插入 10W 条数据来分别测试各个方法的执行时间。​ 循环单次插入的(测试)核心代码如下: import com.example.de...
    99+
    2023-09-11
    mybatis java 数据库
  • Mybatis三种批量插入数据的方式
    目录1. 循环插入 2. foreach标签 3. 批处理 三种方式的对比 1. 循环插入 mapper.xml: <?xml version="1.0" enc...
    99+
    2022-11-12
  • MyBatis批量插入/修改/删除MySql数据
    前言 由于项目需要生成多条数据,并保存到数据库当中,在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,项目使用了Spring+MyBatis,所以打算使用M...
    99+
    2022-11-12
  • Mybatis批量插入数据的两种方式
    总体描述 软件开发过程中需要批量插入数据的场景有几种: 从离线文件(excel, csv等)导入大批量数据到系统。从其它系统定时或者人工同步大批量数据到系统。程序自身的某些算法执行时会生成大批量数据保...
    99+
    2023-09-07
    mybatis java 开发语言 batch insert
  • Elasticsearch批量插入数据
    Elasticsearch批量插入数据 使用bulk批量操作数据库 1. 创建批量操作文件 格式: {"index":{"_index":"home","_type":"home",""_id":"2"}}...
    99+
    2022-10-18
  • SQL批量插入数据
    MS SQL Server数据库批量插入数据的sql语句总结:第一种:insert into tb_NameList(Name,InsertDate,UpdateDate)values('aa',GETDA...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作