baomidou / mybatis-plus

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

新增updateBatchByIdOpt,支持乐观锁场景下的批量更新 #6425

Closed HE996 closed 3 weeks ago

HE996 commented 3 weeks ago

第一次pr,流程不太熟,抛异常可能不规范,望指教

nieqiurong commented 3 weeks ago

自行业务处理,不维护这种api

HE996 commented 3 weeks ago

@nieqiurong 考虑到mybatis提供了@version ,updatebatchbyid 无法判断列表中是否存在因版本号不一致没有更新的记录,不能进行事务回滚。 业务代码去实现的话最简单的是循环updatebyid,但如果要实现一个sql session 更新一批数据并检测失败,就得看一遍mp代码了。我认为直接提供一个方法更为高效。

nieqiurong commented 3 weeks ago

自己开事务调用mapper的批量方法获取到批量返回结果集,判断是否批量操作的结果.

mapper.updateById(entityList).stream().flatMapToInt(r -> IntStream.of(r.getUpdateCounts())).allMatch(i -> i > 0 || i == Statement.SUCCESS_NO_INFO);

HE996 commented 3 weeks ago

一次发送多条sql语句更高效

nieqiurong commented 3 weeks ago

image

HE996 commented 3 weeks ago

这样还是分多次发送sql吧。执行效率上还是addbatch然后一次性发送比较高

nieqiurong commented 3 weeks ago

image