mybatis怎么样批量插入大量数据
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍了mybatis怎么样批量插入大量数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数据库 在使用mybatis插入大
千家信息网最后更新 2025年01月20日mybatis怎么样批量插入大量数据
这篇文章主要介绍了mybatis怎么样批量插入大量数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
数据库 在使用mybatis插入大量数据的时候,为了提高效率,放弃循环插入,改为批量插入,mapper如下:
package com.lcy.service.mapper;import com.lcy.service.pojo.TestVO;import org.apache.ibatis.annotations.Insert;import java.util.List;public interface TestMapper { @Insert("") Integer testBatchInsert(List list);}
实体类:
package com.lcy.service.pojo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublic class TestVO { private String t1; private String t2; private String t3; private String t4; private String t5;}
测试类如下:
import com.lcy.service.TestApplication;import com.lcy.service.mapper.TestMapper;import com.lcy.service.pojo.TestVO;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;import java.util.List;@SpringBootTest(classes = TestApplication.class)@RunWith(SpringRunner.class)public class TestDemo { @Autowired private TestMapper testMapper; @Test public void insert() { List list = new ArrayList<>(); for (int i = 0; i < 200000; i++) { list.add(new TestVO(i + "," + i, i + "," + i, i + "," + i, i + "," + i, i + "," + i)); } System.out.println(testMapper.testBatchInsert(list)); }}
为了复现bug,我限制了JVM内存:
执行测试类报错如下:
java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3746)
可以看到,Arrays在申请内存的时候,导致栈内存溢出
改进方法,分批新增:
import com.lcy.service.TestApplication;import com.lcy.service.mapper.TestMapper;import com.lcy.service.pojo.TestVO;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import javax.swing.*;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;@SpringBootTest(classes = TestApplication.class)@RunWith(SpringRunner.class)public class TestDemo { @Autowired private TestMapper testMapper; @Test public void insert() { List list = new ArrayList<>(); for (int i = 0; i < 200000; i++) { list.add(new TestVO(i + "," + i, i + "," + i, i + "," + i, i + "," + i, i + "," + i)); } int index = list.size() / 10000; for (int i=0;i< index;i++){ //stream流表达式,skip表示跳过前i*10000条记录,limit表示读取当前流的前10000条记录 testMapper.testBatchInsert(list.stream().skip(i*10000).limit(10000).collect(Collectors.toList())); } }}
还有一种方法是调高JVM内存,不过不建议使用,不仅吃内存,而且数据量过大会导致sql过长报错
感谢你能够认真阅读完这篇文章,希望小编分享的"mybatis怎么样批量插入大量数据"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
数据
内存
篇文章
方法
时候
测试
价值
兴趣
同时
大会
实体
建议
效率
数据库
更多
朋友
知识
编带
行业
表达式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
日语软件开发工资待遇
a股上市网络安全公司
夏津软件开发培训哪个好
数据库的查询计划
数据库列如何设置为主键
开源分析型数据库
专业系统软件开发
数据库包含的语句
平安银行软件开发面试
学软件开发在哪里学
福建省政府网络安全管理办法
用c语言设计数据库
网络安全概念股表
梦幻号忘记哪个服务器怎么查找
四川省网络安全
东塔网络安全学院官网
数据库数据安全性和文件系统
广电网络安全预案
什么是数据库系统简答
灌云智能网络技术品质保障
软件开发立项报告设计经理
云存储在服务器安全吗
校园网络安全检测制度
数据库 世界国家
学习软件开发就业前景介绍
一个柜子能放几个服务器
软件开发书籍
传统关系数据库的技术特点
厦门加固服务器单价
查看数据库中所有表中属性