Mybatis两种不同批量插入方式的区别
前言
本文使用 Mybatis 进行批量插入,比较两种不同的插入方式的区别。
测试
批量插入注意事项:
1、连接数据库时添加参数 allowMultiQueries=true,支持多语句执行,批处理
2、数据库是否支持大量数据写入,设置 max_allowed_packet参数保证批次提交的数据量
拼接 sql
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>
batch插入
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两种不同批量插入方式区别的文章就介绍到这了,更多相关Mybatis批量插入方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot中Token登录授权、续期和主动终止的方案流程分析
SpringBoot项目中,基于Token的登录授权方案主要有两种:利用Session/Cookie和JWT,Cookie/Session方案有状态,不适合分布式架构,而JWT虽无状态,但存在过期时间不可强制失效、一次性等缺点,本文介绍SpringBoot中Token登录授权、续期和主动终止的方案,感兴趣的朋友一起看看吧2024-09-09Springboot如何获取配置文件application.yml中自定义的变量并使用
这篇文章主要介绍了Springboot中获取配置文件(application.yml)中自定义的变量并使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-09-09SpringBoot中使用@scheduled定时执行任务的坑
本文主要介绍了SpringBoot中使用@scheduled定时执行任务的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-05-05关于Java中的实体类要 implements Serializable的原因分析
这篇文章主要介绍了Java中的实体类为什么要 implements Serializable,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-06-06详解rabbitmq创建queue时arguments参数注释
这篇文章主要介绍了rabbitmq创建queue时arguments参数注释,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-03-03
最新评论