Mybatis怎么批量导入数据
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了Mybatis怎么批量导入数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 循环插入mapper.xml:
千家信息网最后更新 2026年11月03日Mybatis怎么批量导入数据1. 循环插入
2. foreach标签
3. 批处理
三种方式的对比
这篇文章主要介绍了Mybatis怎么批量导入数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
1. 循环插入
mapper.xml:
INSERT INTO tb_student (name, age, phone, address, class_id) VALUES (#{name},#{age},#{phone},#{address},#{classId}) mapper接口:
public interface StudentMapper { int insert(Student student);}测试代码:
@SpringBootTestclass DemoApplicationTests { @Resource private StudentMapper studentMapper; @Test public void testInsert(){ //数据生成 List studentList = createData(100); //循环插入 long start = System.currentTimeMillis(); studentList.stream().forEach(student -> studentMapper.insert(student)); System.out.println(System.currentTimeMillis() - start); } private List createData(int size){ List studentList = new ArrayList<>(); Student student; for(int i = 0; i < size; i++){ student = new Student(); student.setName("小王" + i); student.setAge(18); student.setClassId(1); student.setPhone("1585xxxx669"); student.setAddress("未知"); studentList.add(student); } return studentList; }} 2. foreach标签
mapper.xml:
INSERT INTO tb_student (name, age, phone, address, class_id) VALUES (#{name},#{age},#{phone},#{address},#{classId}) INSERT INTO tb_student (name, age, phone, address, class_id) VALUES (#{item.name},#{item.age},#{item.phone},#{item.address},#{item.classId}) mapper接口:
public interface StudentMapper { int insert(Student student); int insertBatch(List studentList);} 测试代码:
@SpringBootTestclass DemoApplicationTests { @Resource private StudentMapper studentMapper; @Test public void testInsertByForeachTag(){ //数据生成 List studentList = createData(100); //使用foreach标签,拼接SQL插入 long start = System.currentTimeMillis(); studentMapper.insertBatch(studentList); System.out.println(System.currentTimeMillis() - start); } private List createData(int size){ List studentList = new ArrayList<>(); Student student; for(int i = 0; i < size; i++){ student = new Student(); student.setName("小王" + i); student.setAge(18); student.setClassId(1); student.setPhone("1585xxxx669"); student.setAddress("未知"); studentList.add(student); } return studentList; }} 3. 批处理
测试代码:
@SpringBootTestclass DemoApplicationTests { @Autowired private SqlSessionFactory sqlSessionFactory; @Test public void testInsertBatch(){ //数据生成 List studentList = createData(100); //使用批处理 long start = System.currentTimeMillis(); SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false); StudentMapper studentMapperNew = sqlSession.getMapper(StudentMapper.class); studentList.stream().forEach(student -> studentMapperNew.insert(student)); sqlSession.commit(); sqlSession.clearCache(); System.out.println(System.currentTimeMillis() - start); } private List createData(int size){ List studentList = new ArrayList<>(); Student student; for(int i = 0; i < size; i++){ student = new Student(); student.setName("小王" + i); student.setAge(18); student.setClassId(1); student.setPhone("1585xxxx669"); student.setAddress("未知"); studentList.add(student); } return studentList; }} 三种方式的对比
MySQL服务器版本:5.6.4
其他依赖版本如下:
4.0.0 org.springframework.boot spring-boot-starter-parent 2.4.4 com.buhe demo 0.0.1-SNAPSHOT demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test mysql mysql-connector-java 5.1.41 org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1 org.springframework.boot spring-boot-maven-plugin src/main/java **/*.xml 三种插入方式在不同数据量下的表现,测试结果:
| 插入方式 | 10条 | 100条 | 500条 | 1000条 |
|---|---|---|---|---|
| 循环插入 | 496ms | 3330ms | 15584ms | 33755ms |
| foreach标签 | 268ms | 366ms | 392ms | 684ms |
| 批处理 | 222ms | 244ms | 364ms | 426ms |
三种方式中,批处理的方式效率是最高的,尤其是在数据量大的情况下尤为明显。
其次是foreach标签,foreach标签是通过拼接SQL语句的方式完成批量操作的。但是当拼接的SQL过多,导致SQL大小超过了MySQL服务器中max_allowed_packet变量的值时,会导致操作失败,抛出PacketTooBigException异常。
最后是循环插入的方式,这种方式在数据量小的时候可以使用,在数据量大的情况下效率要低很多。
感谢你能够认真阅读完这篇文章,希望小编分享的"Mybatis怎么批量导入数据"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
数据
方式
标签
篇文章
循环
测试
代码
小王
生成
情况
接口
效率
服务器
版本
服务
不同
明显
最高
价值
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技图片
科技互联网公司装修
以房互联网科技
美国互联网黑科技
睿民互联网科技
友谊互联网络科技
火传媒上海互联网科技
互联网科技公司名称
佩信高科技互联网
深圳市运趣互联网科技有限公司
重庆威客帮互联网科技
语蝶互联网科技有限公司
杭州壁岐互联网科技有限公司
本届互联网博览会上的黑科技
科技类公司包括互联网吗
2021世界互联网领先科技成果发布
易企秀互联网科技是做什么的
湖北辰鑫科技互联网
互联网科技和医药行业
互联网科技自媒体灵感
互联网加科技
互联网科技公司简介
亿人帮互联网科技有限公司
平安科技 互联网
苏州互联网科技贷款公司
昊天互联网科技有限公司
哈尔滨屹滨互联网科技有限公司
北京市互联网新科技
中天科技中国工业互联网
小牛互联网科技有限公司地址