Mybatis怎么批量导入数据
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍了Mybatis怎么批量导入数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 循环插入mapper.xml:
千家信息网最后更新 2025年01月18日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安全错误
数据库的锁怎样保障安全
软件开发西安
服务器换硬盘前干什么
女生报计算机网络技术还是药学
数据库中关联
美国hhs网络安全措施
数据库smi都是什么意思
服务器随机数生成器
服务器电源阻值2欧姆
网络安全管理设备投入
阿里云服务器wdcp
买了阿里云服务器怎么查看ip
武汉市健康码系统用的什么数据库
网络安全自动监控
阿里云服务器路径
网络安全歌曲中学生
core 数据库操作系统
昆山提供网络技术服务电话
银河麒麟v10的数据库
sntp 时间服务器
企业内网络安全培训
周鸿祎谈网络安全框架体系
惠普服务器 ppm
甲骨文公司数据库事业部
高一网络技术教学计划表
小学生网络安全教育图片
青川软件开发文档
服务器一直解析不到域名
如何把自己的网络安全进行到底
哪吒配音软件开发
服务器管理卡 修改时间