最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

MyBatisPlus的updateBatchById()批量修改失效

1、問題描述

一個(gè)實(shí)現(xiàn)類page分頁查詢方法,一進(jìn)入實(shí)現(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()單個(gè)數(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的時(shí)候一共有483條數(shù)據(jù),然后通過代碼修改的時(shí)候,

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

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

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

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

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

都沒有被更新,因?yàn)榧恿耸聞?wù)之后,是在調(diào)用事務(wù)的方法上執(zhí)行完成之后,才會提交事務(wù),最終因?yàn)閳?bào)錯(cuò),方法沒有執(zhí)行完,所以事務(wù)沒有被提交

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

都沒有被更新,因?yàn)榕扛率情_啟了一個(gè)事務(wù),然后統(tǒng)一提交,最后沒提交成功

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

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

總結(jié)

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

相關(guān)文章

  • 基于紅黑樹插入操作原理及java實(shí)現(xiàn)方法(分享)

    基于紅黑樹插入操作原理及java實(shí)現(xiàn)方法(分享)

    下面小編就為大家分享一篇基于紅黑樹插入操作原理及java實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 實(shí)例講解Java設(shè)計(jì)模式編程中如何運(yùn)用代理模式

    實(shí)例講解Java設(shè)計(jì)模式編程中如何運(yùn)用代理模式

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中如何運(yùn)用代理模式,文中舉了普通代理和強(qiáng)制代理的例子作為代理模式的擴(kuò)展內(nèi)容,需要的朋友可以參考下
    2016-02-02
  • SpringBoot3和4的版本新特性及升級要點(diǎn)詳解

    SpringBoot3和4的版本新特性及升級要點(diǎn)詳解

    Spring Boot 4.0作為生態(tài)內(nèi)的重大更新,基于Spring Framework 6.1+ 構(gòu)建,帶來了一系列顛覆性優(yōu)化,這篇文章主要介紹了SpringBoot3和4的版本新特性及升級要點(diǎn)的相關(guān)資料,需要的朋友可以參考下
    2026-03-03
  • Spring?Boot中的微信支付全過程(小程序)

    Spring?Boot中的微信支付全過程(小程序)

    微信支付是企業(yè)級項(xiàng)目中經(jīng)常使用到的功能,作為后端開發(fā)人員,完整地掌握該技術(shù)是十分有必要的。今天通過本文給大家介紹Spring?Boot中的微信支付全過程,感興趣的朋友一起看看吧
    2022-05-05
  • jenkins按模塊進(jìn)行構(gòu)建遇到的問題及解決方案

    jenkins按模塊進(jìn)行構(gòu)建遇到的問題及解決方案

    這篇文章主要介紹了jenkins按模塊進(jìn)行構(gòu)建的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Mybatis中foreach標(biāo)簽帶來的空格\換行\(zhòng)回車問題及解決方案

    Mybatis中foreach標(biāo)簽帶來的空格\換行\(zhòng)回車問題及解決方案

    這篇文章主要介紹了解決Mybatis中foreach標(biāo)簽帶來的空格,換行,回車問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 基于令牌桶的限流器注解的簡單實(shí)現(xiàn)詳解

    基于令牌桶的限流器注解的簡單實(shí)現(xiàn)詳解

    令牌桶算法是一種常用的流量控制算法,用于限制請求或事件的發(fā)生速率,這篇文章主要介紹了如何基于令牌桶實(shí)現(xiàn)限流器注解,需要的可以參考一下
    2023-08-08
  • SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的使用示例

    SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的使用示例

    Feign是一個(gè)基于注解的HTTP客戶端庫,它允許您將HTTP請求轉(zhuǎn)換為聲明式的Java接口,本文主要介紹了SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的使用示例,感興趣的可以了解一下
    2023-09-09
  • SpringBoot中的條件裝配方法

    SpringBoot中的條件裝配方法

    在實(shí)際的項(xiàng)目開發(fā)中,我們往往需要根據(jù)不同的環(huán)境做出不同的配置,例如:在開發(fā)環(huán)境下,我們會使用內(nèi)存數(shù)據(jù)庫以便快速啟動服務(wù)并進(jìn)行開發(fā)調(diào)試,在test環(huán)境、生產(chǎn)環(huán)境,會使用對應(yīng)環(huán)境的數(shù)據(jù)庫,這篇文章主要介紹了SpringBoot中的條件裝配方法,需要的朋友可以參考下
    2024-08-08
  • Java?@Scheduled定時(shí)器用法解析

    Java?@Scheduled定時(shí)器用法解析

    這篇文章主要介紹了Java?@Scheduled定時(shí)器用法解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論

北京市| 温泉县| 汨罗市| 蒙阴县| 浦江县| 县级市| 株洲县| 井冈山市| 股票| 寻甸| 陆河县| 望城县| 遵义市| 株洲市| 兴山县| 盐池县| 玛曲县| 荥经县| 乐安县| 淮北市| 浦北县| 甘谷县| 临泽县| 仙游县| 宝清县| 武汉市| 贡山| 黄龙县| 连南| 河池市| 霍山县| 吴忠市| 公主岭市| 黄陵县| 永安市| 嘉荫县| 裕民县| 虹口区| 鄢陵县| 白银市| 永济市|