当前使用版本 3.5.7 当前环境信息 Java21 + Mysql8.0.32 + springboot3.2.6

描述bug现象 在使用Db.saveBatch(entityList)时,执行成功 但是一直返回false

提供问题复现步骤 使用Db.saveBatch(entityList)进行批量插入 /** * 插入(批量) * * @param entityList 实体对象集合 * @param batchSize 插入批次数量 */ public static <T> boolean saveBatch(Collection<T> entityList, int batchSize) { if (CollectionUtils.isEmpty(entityList)) { return false; } Class<T> entityClass = getEntityClass(entityList); List<BatchResult> batchResults = SqlHelper.execute(entityClass, baseMapper -> baseMapper.insert(entityList, batchSize)); return batchResults.stream().flatMapToInt(r -> IntStream.of(r.getUpdateCounts())).allMatch(i -> i > 0); } allMatch(i -> i > 0)中i是-2

MyBatis-Plus 3.5.7版本Db.saveBatch返回值一直为false MyBatis-Plus 3.5.7版本Db.saveBatch返回值一直为false

提供完整堆栈日志(可选)

提供问题复现工程(可选) 请尽量提供复现工程,减少大家排错的时间.

Comment From: xxx-tea

没有什么问题,SUCCESS_NO_INFO代表”指示批处理语句已成功执行,但没有可用的受影响行数的计数的常量。“ 也就是这次saveBatch操作没有修改行数量,mp里面返回值是boolean类似insert和remove的方法false都代表的是没有行数修改,抛出异常才代表执行失败。

Comment From: zhww9206

没有什么问题,SUCCESS_NO_INFO代表”指示批处理语句已成功执行,但没有可用的受影响行数的计数的常量。“ 也就是这次saveBatch操作没有修改行数量,mp里面返回值是boolean类似insert和remove的方法false都代表的是没有行数修改,抛出异常才代表执行失败。

但是3.5.7版本Db.saveBatch 无法正确判断批量插入是否成功, Db.updateBatchById却可以正常判断

3.5.6版本Db.saveBatch 是这样的 MyBatis-Plus 3.5.7版本Db.saveBatch返回值一直为false

Comment From: zhww9206

我用ruoyi-vue-plus最新代码测试, 批量插入也是数据库成功, 方法永远返回false MyBatis-Plus 3.5.7版本Db.saveBatch返回值一直为false MyBatis-Plus 3.5.7版本Db.saveBatch返回值一直为false MyBatis-Plus 3.5.7版本Db.saveBatch返回值一直为false MyBatis-Plus 3.5.7版本Db.saveBatch返回值一直为false

Comment From: JavaLionLi

确实存在这个问题 插入已经成功了 但确实返回false

Comment From: qmdx

无法重现该问题,看看是不是 RuoyiPlus 配置什么批量操作引起的

Comment From: VampireAchao

能给个复现demo吗

Comment From: qmdx

解决方案: 驱动连接去掉 rewriteBatchedStatements=true

Comment From: zhww9206

解决方案: 驱动连接去掉 rewriteBatchedStatements=true

以了解, 并已经去掉参数 测试成功

Comment From: nieqiurong

直接用BaseMapper#insert(java.util.Collection),不关心里面具体的批量结果(来自驱动层执行的)就忽视返回值就行。

Comment From: JavaLionLi

经查实 mp最新的批处理与 jdbc的批处理参数 rewriteBatchedStatements=true 不兼容

Comment From: VampireAchao

我正在尝试兼容