当前位置: 代码网 > it编程>编程语言>Java > 解决MyBatisPlus的updateBatchById()批量修改失效问题

解决MyBatisPlus的updateBatchById()批量修改失效问题

2024年08月19日 Java 我要评论
mybatisplus的updatebatchbyid()批量修改失效1、问题描述一个实现类page分页查询方法,一进入实现类page方法先获取所有的表数据,再设置符合条件的数据状态为1,使用集合收集

mybatisplus的updatebatchbyid()批量修改失效

1、问题描述

一个实现类page分页查询方法,一进入实现类page方法先获取所有的表数据,再设置符合条件的数据状态为1,使用集合收集,再使用updatebatchbyid()方法批量修改,接着继续分页查询,按入参条件查询相关数据返回,结果批量修改方法未生效。

2、初步判断

日志显示有:

c.c.h.b.c.m.basemetaobjecthandler :start update fill .... ==> parameters: 1(string)

判断:

事务问题,使用updatebatchbyid()会有事务。不知道为什么事务没有提交。

3、修改尝试

使用循环update()单个数据。结果修改生效了!

mybatisplus使用updatebatchbyid小记

 
//    @transactional(rollbackfor = exception.class)
    public boolean test() {
        list<staffinfo> staffinfos = this.list();
        staffinfos = staffinfos.stream().map(staffinfo -> {
            if(staffinfo.getnumber().equals("0132791")) {  //如果number=0132791,则把元素设置成null,制造exception
                staffinfo = null;
                return staffinfo;
            }else{
                staffinfo.setentrytime(0l);
                return staffinfo;
            }
        }).collect(collectors.tolist());
      return   this.updatebatchbyid(staffinfos);
//        staffinfos.foreach(staffinfo -> {
//            this.updatebyid(staffinfo);
//        });
//        return true;
    }

过程

staff_info表里,我通过sql把entry_time字段先设置成2,然后再通过代码设置成0,设置成2的时候一共有483条数据,然后通过代码修改的时候,

我把number=0132791的数据设置成null,即更新这一条数据肯定会报错,通过debug我知道number=2这条数据在更新的list中处于index=141的位置,

所以在number=0132791之后待更新的数据还有483-141=342条数据,如果是通过代码更新前

  • 第一种情况:不加@transactional注解,使用updatebyid,一条一条数据更新

如下图:很明显,在报错位置之后的记录里都没有被更新,报错位置之前的都被更新了【报错之前已经提交了事务】 ,报错之后程序不再运行,故后边数据没更新

  • 第二种情况:加@transactional注解,使用updatebyid,一条一条数据更新

都没有被更新,因为加了事务之后,是在调用事务的方法上执行完成之后,才会提交事务,最终因为报错,方法没有执行完,所以事务没有被提交

  • 第三种情况:不加@transactional注解,使用updatebatchbyid,批量更新

都没有被更新,因为批量更新是开启了一个事务,然后统一提交,最后没提交成功

  • 第四种情况:加@transactional注解,使用updatebatchbyid,批量更新

和情况3相同,都没有被更新,全部回滚

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com