1. saveBatch 方法的基本功能saveBatch 方法是 MyBatis-Plus 提供的一个批量保存实体对象的功能。它允许你一次性将多个实体对象保存到数据库中,而不是逐个保存,从而提高了操作的效率。 2. saveBatch 方法的返回值类型 根据MyBatis-Plus 的官方文档和源代码,saveBatch 方法的返回值类型通常是 boolean。它表示批量保...
saveBatch(): 如图所示,saveBatch()方法的实体在拦截器里是获取不到自增id的。特别说明下,debug你会发现,MybatisPlus执行saveBatch()方法会遍历这个列表集合,并依次将数据插入到数据库中。因为拦截器会执行次数是和实体列表的数量是一致。 3.源码分析原因 第一步: ServiceImpl类 publicbooleansaveBatch(Collectionentit...
mybatisPlusWrapper.saveBatch(list); } 请注意,上述代码中的mybatisPlusWrapper是MybatisPlus的Wrapper对象,用于构建SQL查询语句。list是待插入的数据列表。generateUniqueId()方法用于生成唯一的ID。通过以上解决方案,我们可以避免在使用MybatisPlus的saveBatch()方法批量插入数据时出现雪花算法ID重复的问题。在实际应用中...
然后继续跑了下mybatis-plus自带的 saveBatch,果然性能大大提高,跟拼接 SQL 差不多! 如下图所示: 顺带我也跑了下 JDBC 的 executeBatch ,果然也提高了。 如下图所示: 然后我继续 debug ,来探探 rewriteBatchedStatements 究竟是怎么 rewrite 的! 如果这个参数是 true,则会执行下面的方法且直接返回。 如下图...
mybatis-plus 中saveOrUpdateBatch都是采用默认策略(主键)作为判断该数据存在与否的依据,当我们需要使用其他字段作为判断条件的时候,发现不论怎么使用都不行。 这个时候可以采取简单的方式,list在代码里面循环里面使用saveOrUpdate来进行一条一条更新,但是一条一条更新会太慢,当数据太大时也是不行的。
• `batchSave`:MyBatis Plus 的`batchSave`方法内部会管理事务,它将所有插入操作放在一个事务中执行。这意味着要么所有数据都成功插入,要么在遇到错误时整个批量操作会回滚。 • for 循环`save`:在 for 循环中使用`save`方法时,每次循环都会单独提交事务。如果循环中有多个插入操作,那么每个操作都会单独开启和...
目前就是最新版了,saveBatch的问题,实体的主键id是自增长的,但是saveBatch时,设置了id,saveBatch成功后,再看list数据,里面的id错乱了,从第二条开始就不正确了。检查出问题是因为jdbc url 后面增加了&rewriteBatchedStatements=true,如果去掉该配置,则可以达到预期,但是saveBatch本质上还是单条插入有效率问题。
作者今天在开发一个后台发送消息的功能时,由于需要给多个用户发送消息,于是使用了mybatis plus提供的saveBatch()方法,在测试环境测试通过上预发布后,测试反应发送消息接口很慢得等 5、6 秒,于是我就登录预发布环境查看执行日志,发现是mybatis plus提供的saveBatch()方法执行很慢导致,于是也就有了本篇文章。
MyBatis-Plus版本 <mybatis-plus-boot-starter.version>3.3.0</mybatis-plus-boot-starter.version> 由于Mybatis-Plus本身已经有增删改查以及批量保存的基本接口了,所以我们没必要新建一张表就重复写一套自己的增删改查,我们在公共层抽一个BaseService接口(继承MyBatis-Plus的IService)以及BaseServiceImpl实现类(实现...