baomidou / mybatis-plus

An powerful enhanced toolkit of MyBatis for simplify development
https://baomidou.com
Apache License 2.0
16.33k stars 4.3k forks source link

3.5.7版本Db.saveBatch返回值一直为false #6267

Closed zhww9206 closed 3 months ago

zhww9206 commented 3 months ago

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

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

提供问题复现步骤 使用Db.saveBatch(entityList)进行批量插入 ` /**

image image

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

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

xxx-tea commented 3 months ago

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

zhww9206 commented 3 months ago

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

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

3.5.6版本Db.saveBatch 是这样的 image

zhww9206 commented 3 months ago

我用ruoyi-vue-plus最新代码测试, 批量插入也是数据库成功, 方法永远返回false image image image image

JavaLionLi commented 3 months ago

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

qmdx commented 3 months ago

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

VampireAchao commented 3 months ago

能给个复现demo吗

qmdx commented 3 months ago

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

zhww9206 commented 3 months ago

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

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

nieqiurong commented 3 months ago

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

JavaLionLi commented 3 months ago

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

VampireAchao commented 3 months ago

我正在尝试兼容