小编给大家分享一下Mybatis两种不同批量插入方式的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
本文使用 Mybatis 进行批量插入,比较两种不同的插入方式的区别。
批量插入注意事项:
1、连接数据库时添加参数 allowMultiQueries=true,支持多语句执行,批处理
2、数据库是否支持大量数据写入,设置 max_allowed_packet参数保证批次提交的数据量
public void batchDemo() {
long start = System.currentTimeMillis();
List<User> list = new ArrayList<>();
for (int i = 0; i < 5000; i++) {
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("feiyangyang");
user.setPwd("feiyangyang");
list.add(user);
}
userService.batchForeach(list);
long end = System.currentTimeMillis();
System.out.println("---------------" + (start - end) + "---------------");
}
<insert id="batchForeach" parameterType="com.fyy.druid.entity.User">
insert into
user(id,`name`,pwd)
values
<foreach collection ="userList" item="user" separator =",">
(#{user.id}, #{user.name}, #{user.pwd})
</foreach>
</insert>
public void batchInsert() {
long start = System.currentTimeMillis();
SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH);
UserService mapper = sqlSession.getMapper(UserService.class);
for (int i = 0; i < 5000; i++) {
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("feiyangyang");
user.setPwd("feiyangyang");
mapper.batchInsert(user);
}
sqlSession.commit();
long end = System.currentTimeMillis();
System.out.println("---------------" + (start - end) + " ---------------");
}
注意:batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的
拼接sql (ms) | batch插入 (ms) | |
---|---|---|
500条 | 1744 | 639 |
2000条 | 26966 | 2473 |
5000条 | 173668 | 7382 |
看完了这篇文章,相信你对“Mybatis两种不同批量插入方式的区别有哪些”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。