果然,一查源码,发现 MyBatis-Plus 默认在 saveBatch 上加了 @Transactional 注解。 publicbooleansaveBatch(Collection<T> entityList){returnthis.saveBatch(entityList,1000);} MyBatis-Plus 的这个“善意”设计,原本是为了确保批量操作的事务...
我注意到 try-catch 里面用的是 MyBatis-Plus 的 saveBatch 方法,突然一个灵光闪过——难道是 saveBatch 做了什么“小动作”?果然,一查源码,发现 MyBatis-Plus 默认在 saveBatch 上加了 @Transactional 注解。 public boolean saveBatch(Collection<T> entityList) { return this.saveBatch(entityList, 1000);...
在项目开发中,需要插入批量插入20多万条数据,通过日志观察,发现在调用MyBatis-Plus中的saveBatch()方法性能非常的差,本篇文章主要分享一下saveBatch()的原理以及使用的注意事项 原理 我们通过源码的形式进行解析saveBatch()方法的原理 @Transactional(rollbackFor=Exception.class)defaultbooleansaveBatch(Collection<T>entit...
我注意到 try-catch 里面用的是 MyBatis-Plus 的 saveBatch 方法,突然一个灵光闪过——难道是 saveBatch 做了什么“小动作”?果然,一查源码,发现 MyBatis-Plus 默认在 saveBatch 上加了 @Transactional 注解。 public boolean saveBatch(Collection<T> entityList) {return this.saveBatch(entityList, 1000);}...
作者今天在开发一个后台发送消息的功能时,由于需要给多个用户发送消息,于是使用了mybatis plus提供的saveBatch()方法,在测试环境测试通过上预发布后,测试反应发送消息接口很慢得等 5、6 秒,于是我就登录预发布环境查看执行日志,发现是mybatis plus提供的saveBatch()方法执行很慢导致,于是也就有了本篇文章。
当我在外面的方法也加上@transactional(rollbackFor = Exception.class, value = "gameTransactionManager") 那么 批量保存的 事务就找不到具体事务管理器 @transactional(rollbackFor = Exception.class) @OverRide public boolean saveBatch(Collection entityList, int batchSize) { ...
我查了saveBatch方法,如下,这是com/baomidou/mybatisplus/extension/service/impl/ServiceImpl.java /*** 批量插入 * *@paramentityList ignore *@parambatchSize ignore *@returnignore*/@Transactional(rollbackFor= Exception.class) @OverridepublicbooleansaveBatch(Collection<T> entityList,intbatchSize) {...
mybatis-plus 批量插入修改操作 mybaits-plus 的学习成本相对较低,当学会了mybatis之后,mybaits-plus 很有友好的对mybaits仅仅是增强,没有任何改变,学习难度较低; 其中有个小小的问题,即 IService中自带的 saveBatch 和 saveOrUpdateBatch 等方法,仔细看会发现,他们的批量执行,竟然不是 真正的批量执行!!!
把saveBatch 上的 @Transactional 注解删了,很明显我做不到,这是 mybatisplus 的源码。 把saveBatch 上的 @Transactional 注解上设置事务传播机制为:REQUIRES_NEW 或 NESTED,很明显,我也做不到,这是 mybatis-plus 的源码。 然后我找了下,好像也没有什么参数可以指定 saveBatch 的事务传播机制。
一般情况下,在MybatisPlus中使用saveBatch方法进行批量保存只需要:在数据库连接串中添加&rewriteBatchedStatements=true,并将MySQL驱动保证在5.0.18以上即可。但是在这里实际使用中批量保存并没有生效,列表数据被分组成几批数据保存,而不是一批数据保存,通过调试、查看数据库日志等方式可以验证。所以现在是配置正确,驱动正...