亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決MyBatisPlus的updateBatchById()批量修改失效問題

 更新時間:2024年08月19日 14:28:52   作者:左小福  
這篇文章主要介紹了解決MyBatisPlus的updateBatchById()批量修改失效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

MyBatisPlus的updateBatchById()批量修改失效

1、問題描述

一個實現(xiàn)類page分頁查詢方法,一進(jìn)入實現(xiàn)類page方法先獲取所有的表數(shù)據(jù),再設(shè)置符合條件的數(shù)據(jù)狀態(tài)為1,使用集合收集,再使用updateBatchById()方法批量修改,接著繼續(xù)分頁查詢,按入?yún)l件查詢相關(guān)數(shù)據(jù)返回,結(jié)果批量修改方法未生效。

2、初步判斷

日志顯示有:

c.c.h.b.c.m.BaseMetaObjectHandler :start update fill .... ==> Parameters: 1(String)

判斷:

事務(wù)問題,使用updateBatchById()會有事務(wù)。不知道為什么事務(wù)沒有提交。

3、修改嘗試

使用循環(huán)update()單個數(shù)據(jù)。結(jié)果修改生效了!

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,則把元素設(shè)置成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字段先設(shè)置成2,然后再通過代碼設(shè)置成0,設(shè)置成2的時候一共有483條數(shù)據(jù),然后通過代碼修改的時候,

我把number=0132791的數(shù)據(jù)設(shè)置成null,即更新這一條數(shù)據(jù)肯定會報錯,通過debug我知道number=2這條數(shù)據(jù)在更新的list中處于index=141的位置,

所以在number=0132791之后待更新的數(shù)據(jù)還有483-141=342條數(shù)據(jù),如果是通過代碼更新前

  • 第一種情況:不加@Transactional注解,使用updateById,一條一條數(shù)據(jù)更新

如下圖:很明顯,在報錯位置之后的記錄里都沒有被更新,報錯位置之前的都被更新了【報錯之前已經(jīng)提交了事務(wù)】 ,報錯之后程序不再運行,故后邊數(shù)據(jù)沒更新

  • 第二種情況:加@Transactional注解,使用updateById,一條一條數(shù)據(jù)更新

都沒有被更新,因為加了事務(wù)之后,是在調(diào)用事務(wù)的方法上執(zhí)行完成之后,才會提交事務(wù),最終因為報錯,方法沒有執(zhí)行完,所以事務(wù)沒有被提交

  • 第三種情況:不加@Transactional注解,使用updateBatchById,批量更新

都沒有被更新,因為批量更新是開啟了一個事務(wù),然后統(tǒng)一提交,最后沒提交成功

  • 第四種情況:加@Transactional注解,使用updateBatchById,批量更新

和情況3相同,都沒有被更新,全部回滾

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Boot2.6.0新特性之默認(rèn)禁止循環(huán)引用

    Spring?Boot2.6.0新特性之默認(rèn)禁止循環(huán)引用

    Spring?Boot2.6.0為我們帶來很多好用的新特性/改進(jìn),這篇文章主要給大家介紹了關(guān)于Spring?Boot2.6.0新特性之默認(rèn)禁止循環(huán)引用的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • 在Java Web項目中添加定時任務(wù)的方法

    在Java Web項目中添加定時任務(wù)的方法

    在Java Web程序中加入定時任務(wù),這里介紹兩種方式使用監(jiān)聽器注入,使用Spring注解@Scheduled注入,需要的朋友可以參考下
    2018-01-01
  • 基于mybatis進(jìn)行批量更新兩種方法

    基于mybatis進(jìn)行批量更新兩種方法

    這篇文章主要給大家介紹了關(guān)于如何基于mybatis進(jìn)行批量更新的兩種方法,批量更新的使用,mybatis中批量更新有很多種方法,可以把數(shù)據(jù)一條條更新,也可以傳入一個數(shù)據(jù)集一次性更新,需要的朋友可以參考下
    2023-08-08
  • 解決找不到符號 符號:變量 log問題

    解決找不到符號 符號:變量 log問題

    這篇文章主要介紹了解決找不到符號 符號: 變量 log問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • mall整合SpringTask實現(xiàn)定時任務(wù)的方法示例

    mall整合SpringTask實現(xiàn)定時任務(wù)的方法示例

    這篇文章主要介紹了mall整合SpringTask實現(xiàn)定時任務(wù)的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • SpringBoot結(jié)果封裝和異常攔截的實現(xiàn)示例

    SpringBoot結(jié)果封裝和異常攔截的實現(xiàn)示例

    SpringBoot 項目中,我們通常需要將結(jié)果數(shù)據(jù)封裝成特定的格式,以方便客戶端進(jìn)行處理,本文主要介紹了SpringBoot?優(yōu)雅的結(jié)果封裝和異常攔截,感興趣的可以了解一下
    2023-08-08
  • springBoot 打war包 程序包com.sun.istack.internal不存在的問題及解決方案

    springBoot 打war包 程序包com.sun.istack.internal不存在的問題及解決方案

    這篇文章主要介紹了springBoot 打war包 程序包com.sun.istack.internal不存在的問題及解決方案,親測試過可以,需要的朋友可以參考下
    2018-07-07
  • 淺談Java線程間通信方式

    淺談Java線程間通信方式

    這篇文章主要為大家詳細(xì)介紹了Java線程間的通信方式,以代碼結(jié)合文字的方式來討論線程間的通信,感興趣的朋友可以參考一下
    2021-11-11
  • springboot無法跳轉(zhuǎn)頁面的問題解決方案

    springboot無法跳轉(zhuǎn)頁面的問題解決方案

    這篇文章主要介紹了springboot無法跳轉(zhuǎn)頁面的問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • springboot發(fā)送郵件功能的實現(xiàn)代碼

    springboot發(fā)送郵件功能的實現(xiàn)代碼

    發(fā)郵件是一個很常見的功能,在java中實現(xiàn)需要依靠JavaMailSender這個接口,今天通過本文給大家分享springboot發(fā)送郵件功能的實現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2021-07-07

最新評論