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

Mybatis-Plus的saveOrUpdateBatch(null)問題及解決

 更新時(shí)間:2023年07月14日 16:09:15   作者:長安有故里y  
這篇文章主要介紹了Mybatis-Plus的saveOrUpdateBatch(null)問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis-Plus的saveOrUpdateBatch(null)問題

Mybatis-Plus的saveOrUpdateBatch對象屬性為空(null)不更新的問題

saveOrUpdateBatch對象屬性為空(null)不更新的問題

在屬性上假如注解即可updateStrategy = FieldStrategy.IGNORED

就是為null的時(shí)候也更新字段值

? @ApiModelProperty(value = "固定電話")
? ? @TableField(value = "FIXED_TELEPHONE",updateStrategy = FieldStrategy.IGNORED)
? ? private String fixedTelephone;

mybatis-plus的saveOrUpdate問題

項(xiàng)目場景

在使用mybatis-plus的時(shí)候傳入的數(shù)據(jù)id不為空的時(shí)候

問題描述

出現(xiàn)問題是一直是新增而不是修改

service.savaOrUpdate(User user);

這里的User是實(shí)體類

含有屬性   id 主鍵、name 姓名

原因分析

這里我先說明一下saveOrUpdate()的底層原理是:

先進(jìn)行查詢 如果這個(gè)id為空 -----就新增

如果有id的話就會通過這個(gè)id先進(jìn)行查詢 如果查到數(shù)據(jù)就進(jìn)行修改,如果沒有查到數(shù)據(jù)就進(jìn)行新增

現(xiàn)在讓我們看一下它的源碼:

 public boolean saveOrUpdate(T entity) {
        if (null == entity) {
            return false;
        } else {
            TableInfo tableInfo = TableInfoHelper.getTableInfo(this.entityClass);
            Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!", new Object[0]);
            String keyProperty = tableInfo.getKeyProperty();
            Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!", new Object[0]);
            Object idVal = tableInfo.getPropertyValue(entity, tableInfo.getKeyProperty());
            return !StringUtils.checkValNull(idVal) && !Objects.isNull(this.getById((Serializable)idVal)) ? this.updateById(entity) : this.save(entity);
        }
    }

核心代碼是最后的一句

!StringUtils.checkValNull(idVal) && !Objects.isNull(this.getById((Serializable)idVal)) ? this.updateById(entity) : this.save(entity);
  • 首先第一個(gè)
!StringUtils.checkValNull(idVal)

這一句是idVal是id值

checkValNull 點(diǎn)進(jìn)去 

 

這句代表的是id是否為空  如果為空的話就 最后結(jié)果就是真 (因?yàn)橛校。?/p>

  • 第二個(gè)
!Objects.isNull(this.getById((Serializable)idVal))

this.getById((Serializable)idVal)這個(gè)方法是

是通過id進(jìn)行查詢是否有id的這個(gè)數(shù)據(jù)  如果有的話就就是真 

這樣兩個(gè)條件都成立 ---也就是id不為空,id這個(gè)數(shù)據(jù)存在的話 ---就進(jìn)行修改

否則就是新增

這就是saveOrUpdate的底層原理

 敲黑板  我出現(xiàn)的問題

這個(gè)方法的selectById()

我的情況是我在mapper中自己寫了一個(gè)方法名字跟這個(gè)一樣。

因?yàn)閙apper是繼承了BaseMapper這個(gè)類,調(diào)用的時(shí)候子類有方法就調(diào)用了子類的方法

因此我的情況是變成了有id也變成了新增

最后總結(jié) ?。?!非常重要的是 我們自己mapper中定義的方法一定不要跟mybatisplus的中方法名一樣,防止出現(xiàn)這種錯(cuò)誤

這也是我代碼規(guī)范沒有寫好,大家寫的時(shí)候一定要按照阿里的開發(fā)規(guī)約進(jìn)行開發(fā),取名要正規(guī) 

最后

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

相關(guān)文章

  • Java基于IDEA實(shí)現(xiàn)qq郵件發(fā)送小程序

    Java基于IDEA實(shí)現(xiàn)qq郵件發(fā)送小程序

    這篇文章主要介紹了Java基于IDEA實(shí)現(xiàn)qq郵件發(fā)送小程序功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 在Java中使用Redis實(shí)現(xiàn)緩存優(yōu)化的操作步驟

    在Java中使用Redis實(shí)現(xiàn)緩存優(yōu)化的操作步驟

    在現(xiàn)代高并發(fā)的應(yīng)用中,數(shù)據(jù)庫訪問的性能往往成為瓶頸,為了提高性能,我們通常會使用緩存機(jī)制,Redis 是一種開源的內(nèi)存數(shù)據(jù)存儲系統(tǒng),廣泛應(yīng)用于緩存系統(tǒng)的構(gòu)建中,本文將深入探討如何在Java中使用Redis實(shí)現(xiàn)緩存優(yōu)化,需要的朋友可以參考下
    2025-07-07
  • Spring?Task實(shí)現(xiàn)定時(shí)任務(wù)的示例

    Spring?Task實(shí)現(xiàn)定時(shí)任務(wù)的示例

    定時(shí)任務(wù)的是按照指定的時(shí)間或時(shí)間間隔,自動執(zhí)行的任務(wù),?在應(yīng)用程序中通常用于自動化處理一些定期或周期性的操作,特別是與時(shí)間相關(guān)的任務(wù),本文就來詳細(xì)的介紹一下Spring?Task實(shí)現(xiàn)定時(shí)任務(wù)的示例,感興趣的可以了解一下
    2026-04-04
  • 解決mybatis-generator生成Mapper文件沒有Selective結(jié)尾的問題

    解決mybatis-generator生成Mapper文件沒有Selective結(jié)尾的問題

    這篇文章主要介紹了解決mybatis-generator生成Mapper文件沒有Selective結(jié)尾的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java Reactor反應(yīng)器模式使用方法詳解

    Java Reactor反應(yīng)器模式使用方法詳解

    這篇文章主要介紹了Java Reactor反應(yīng)器模式使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java判斷字符串是否有逗號的方法

    java判斷字符串是否有逗號的方法

    下面小編就為大家?guī)硪黄猨ava判斷字符串是否有逗號的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • java中抽象類和接口的相同和不同點(diǎn)介紹

    java中抽象類和接口的相同和不同點(diǎn)介紹

    大家好,本篇文章主要講的是java中抽象類和接口的相同和不同點(diǎn)介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Kotlin flow實(shí)踐

    Kotlin flow實(shí)踐

    Kotlin Flow是基于協(xié)程的流式數(shù)據(jù)處理API,支持異步、中斷和無限數(shù)據(jù)流,冷流按需啟動,操作符分中間、終止、構(gòu)建器,優(yōu)化方案如buffer()實(shí)現(xiàn)并行處理,collectLatest()專注最新數(shù)據(jù),提升性能與實(shí)時(shí)性,本文給大家介紹Kotlin flow的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Java中Set集合轉(zhuǎn)為List集合常見的兩種方式

    Java中Set集合轉(zhuǎn)為List集合常見的兩種方式

    List是Java中比較常用的集合類,指一系列存儲數(shù)據(jù)的接口和類,可以解決復(fù)雜的數(shù)據(jù)存儲問題,這篇文章主要給大家介紹了關(guān)于Java中Set集合轉(zhuǎn)為List集合常見的兩種方式,需要的朋友可以參考下
    2023-12-12
  • Java中的Semaphore源碼分析

    Java中的Semaphore源碼分析

    這篇文章主要介紹了Java中的Semaphore源碼分析,Semaphore是一個(gè)訪問公共資源的線程數(shù)量如限流、停車等,它是一個(gè)基于AQS實(shí)現(xiàn)的共享鎖,主要是通過控制state變量來實(shí)現(xiàn),需要的朋友可以參考下
    2023-11-11

最新評論

鸡东县| 聂荣县| 永定县| 万源市| 定兴县| 崇阳县| 通道| 酉阳| 奎屯市| 娱乐| 濮阳市| 阿勒泰市| 大同市| 双江| 阿巴嘎旗| 呼和浩特市| 桐梓县| 衡阳县| 蚌埠市| 平乡县| 长治市| 龙陵县| 南昌市| 抚松县| 泰顺县| 巨鹿县| 盈江县| 茌平县| 宜君县| 中宁县| 长宁县| 金山区| 田东县| 宝应县| 华蓥市| 科技| 望江县| 綦江县| 双鸭山市| 泸溪县| 柳河县|