Mybatis-Plus的@Version注解:使用updateBatchById方法引发的问题

正常情况下,我们想要的是,当乐观锁不对的时候要一个反馈,例如:版本号不一致,请刷新页面重新获取数据。

在没有@Version注解的时候,一般我们会进行显示校验。例如下图:

在这里插入图片描述

updateById方法使用演示

有了@Version注解之后,可以直接使用updateById方法的返回值进行判断。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

可以看到当乐观锁不对的时候,updateById方法返回的是false。

在这里插入图片描述

获取到对应的SQL语句可以看到,在更新条件中添加上了修改后的version条件。

虽然这条语句是正常执行的,但是因为没有查到满足条件的数据,也就不会执行更新操作,updateById方法给返回了个false。

updateBatchById方法的问题

如果是使用的Mybatis-Plus框架的updateBatchById方法会有问题。

在这里插入图片描述
一开始是设想的跟updateById方法一样,当设置的乐观锁查不到数据进行更新的时候,会返回false,因此有了上面截图的控制。(注:这是个测试代码!)
在这里插入图片描述

目前数据库中的这三条数据乐观锁分别是7,5,7。

在这里插入图片描述
在批量修改的时候,换成了6,4,6。
在这里插入图片描述

可以看到响应结果是正常的,没有抛出异常。

在这里插入图片描述

现在这种的代码,在乐观锁不对的时候,updateBatchById返回的是true。

在这里插入图片描述
在这里插入图片描述

这里指的是sql语句是正常执行的,只不过没有匹配到对应的数据而进行更新操作。

在乐观锁不对的情况下,想要更新的数据不会被更新,也不会得到乐观锁不对的响应。

上述两个方法的比较

接着又写了一段测试代码。

在这里插入图片描述
在这里插入图片描述

可以注意到针对同一个数据,updateById方法和updateBatchById方法的返回值是不一样的。

在这里插入图片描述

来到updateBatchById方法中看了一下。

这个updateBatchById方法只要核心业务不报异常,就返回true,在使用@Version注解的时候会有一些问题。。。使用单条更新的updateById方法的返回值是没问题的!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值