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

MyBatis-Plus更新字段為null的三種解決方案

 更新時間:2025年10月11日 08:26:23   作者:一勺菠蘿丶  
這篇文章主要為大家詳細(xì)介紹了MyBatis-Plus更新字段為null的三種解決方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在使用 MyBatis-Plus 進(jìn)行數(shù)據(jù)庫更新時,很多小伙伴會遇到一個問題:

當(dāng)某個字段傳了 null 時,updateById 默認(rèn) 不會更新該字段,數(shù)據(jù)庫里的值依然保留。

這個問題在你想把字段置空時就會很麻煩。下面我給大家講幾個解決方案,小白也能快速上手。

問題示例

假設(shè)我們有一個更新方法:

@Override
@Transactional(rollbackFor = Exception.class)
public void updateCarousel(@Valid CarouselUpdateReqVO updateReqVO) {
    // 校驗記錄存在
    validateCarouselExists(updateReqVO.getId());

    // 轉(zhuǎn)換實體類
    CarouselDO updateObj = BeanUtils.toBean(updateReqVO, CarouselDO.class);

    // 更新數(shù)據(jù)庫
    carouselMapper.updateById(updateObj);
}

如果 updateReqVO.getLinkId()null,執(zhí)行 updateById 后,link_id 不會被更新,數(shù)據(jù)庫值不會變成 null

這是 MyBatis-Plus 默認(rèn)策略導(dǎo)致的,它默認(rèn) 忽略 null 值字段。

方案 1:修改實體類策略,讓 null 也更新

MyBatis-Plus 提供了 @TableField(updateStrategy = FieldStrategy) 來控制字段更新策略。

import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;

@TableField(updateStrategy = FieldStrategy.ALWAYS)
private Long linkId;

策略說明:

策略作用
ALWAYS永遠(yuǎn)更新,即使字段為 null,也會更新到數(shù)據(jù)庫
NOT_NULL默認(rèn)值,字段為 null 時不會更新
NOT_EMPTY字符串類型使用,空字符串也會忽略
NEVER永不更新
DEFAULT使用全局默認(rèn)策略

如果字段使用 ALWAYS,當(dāng)你傳 null 時,就會把數(shù)據(jù)庫字段置空。

優(yōu)點:簡單直接,只需改實體類。

缺點:全局生效,可能影響其它更新場景。

方案 2:使用 UpdateWrapper 或 LambdaUpdateWrapper 動態(tài)更新

如果你只想在某次更新操作中支持 null 更新,而不改實體類,可以手動構(gòu)建更新條件:

CarouselDO updateObj = BeanUtils.toBean(updateReqVO, CarouselDO.class);

LambdaUpdateWrapper<CarouselDO> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(CarouselDO::getId, updateObj.getId())
       .set(CarouselDO::getLinkId, updateObj.getLinkId()); // null 也可以更新

carouselMapper.update(null, wrapper);

或者使用普通 UpdateWrapper:

UpdateWrapper<CarouselDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", updateObj.getId())
             .set("link_id", updateObj.getLinkId()); // null 也可以更新

carouselMapper.update(updateObj, updateWrapper);

優(yōu)點:靈活,只針對當(dāng)前更新操作生效。

缺點:字段較多時,需要手動寫每個字段。

方案 3:自定義 Mapper SQL

當(dāng)字段較多或者更新規(guī)則復(fù)雜時,可以直接寫自定義 SQL:

<update id="updateCarousel">
    update carousel
    set
        link_id = #{linkId},
        title = #{title},
        description = #{description}
    where id = #{id}
</update>

完全控制字段更新規(guī)則,包括 null 值。

失去 MyBatis-Plus 自動映射便利。

小結(jié)

方案優(yōu)點缺點適用場景
實體類設(shè)置 ALWAYS簡單,全局生效影響所有更新操作字段允許全局置空
LambdaUpdateWrapper / UpdateWrapper靈活,針對單次操作寫法稍復(fù)雜單次更新可能置空字段
自定義 Mapper SQL完全控制,適合復(fù)雜場景失去自動映射批量或復(fù)雜更新

推薦做法

  • 偶爾置空 → 用 方案 2
  • 經(jīng)常置空 → 用 方案 1
  • 更新邏輯復(fù)雜 → 用 方案 3

總結(jié)

MyBatis-Plus 默認(rèn)忽略 null 值是為了安全,但當(dāng)你需要置空數(shù)據(jù)庫字段時,需要使用 FieldStrategy.ALWAYS 或手動更新。

掌握這幾種方式后,你就能靈活處理 null 值字段更新,不再受默認(rèn)策略限制。

到此這篇關(guān)于MyBatis-Plus更新字段為null的三種解決方案的文章就介紹到這了,更多相關(guān)MyBatis Plus更新字段為null內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的==使用方法詳解

    Java中的==使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中的==使用方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • SpringBoot如何接收前端傳來的json數(shù)據(jù)

    SpringBoot如何接收前端傳來的json數(shù)據(jù)

    這篇文章主要介紹了SpringBoot如何接收前端傳來的json數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • IDEA 2021.2 激活教程及啟動報錯問題解決方法

    IDEA 2021.2 激活教程及啟動報錯問題解決方法

    這篇文章主要介紹了IDEA 2021.2 啟動報錯及激活教程,文章開頭給大家介紹了idea2021最新激活方法,關(guān)于idea2021啟動報錯的問題小編也給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • Spring?Boot+Aop記錄用戶操作日志實戰(zhàn)記錄

    Spring?Boot+Aop記錄用戶操作日志實戰(zhàn)記錄

    在Spring框架中使用AOP配合自定義注解可以方便的實現(xiàn)用戶操作的監(jiān)控,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot+Aop記錄用戶操作日志實戰(zhàn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Java中@RequiredArgsConstructor使用詳解

    Java中@RequiredArgsConstructor使用詳解

    這篇文章主要介紹了Java中@RequiredArgsConstructor使用的相關(guān)資料,@RequiredArgsConstructor是Lombok庫提供的一個注解,用于自動生成一個包含所有final字段和非空字段的構(gòu)造函數(shù),需要的朋友可以參考下
    2025-05-05
  • springMVC發(fā)送郵件的簡單實現(xiàn)

    springMVC發(fā)送郵件的簡單實現(xiàn)

    本篇文章主要介紹了springMVC發(fā)送郵件的簡單實現(xiàn) ,主要是利用利用javax.mail發(fā)送郵件,圖片與附件都可發(fā)送,有興趣的可以了解一下
    2017-04-04
  • RocketMQ的順序消費(fèi)機(jī)制詳解

    RocketMQ的順序消費(fèi)機(jī)制詳解

    這篇文章主要介紹了RocketMQ的順序消費(fèi)機(jī)制詳解,順序消息是指對于一個指定的?Topic?,消息嚴(yán)格按照先進(jìn)先出(FIFO)的原則進(jìn)行消息發(fā)布和消費(fèi),即先發(fā)布的消息先消費(fèi),后發(fā)布的消息后消費(fèi),,需要的朋友可以參考下
    2023-10-10
  • mybatis學(xué)習(xí)筆記之mybatis注解配置詳解

    mybatis學(xué)習(xí)筆記之mybatis注解配置詳解

    本篇文章主要介紹了mybatis學(xué)習(xí)筆記之mybatis注解配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • spring MVC搭建及配置詳解

    spring MVC搭建及配置詳解

    本篇文章主要介紹了spring MVC配置方法,要想靈活運(yùn)用Spring MVC來應(yīng)對大多數(shù)的Web開發(fā),就必須要掌握它的配置及原理,有興趣的可以了解一下。
    2017-01-01
  • SpringBoot配置發(fā)送Email的示例代碼

    SpringBoot配置發(fā)送Email的示例代碼

    本篇文章主要介紹了SpringBoot配置發(fā)送Email的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論

阿克苏市| 南丹县| 桐乡市| 武邑县| 山阴县| 搜索| 陇川县| 陕西省| 曲靖市| 高安市| 白沙| 灵璧县| 大渡口区| 南阳市| 麻江县| 湖北省| 梧州市| 西畴县| 买车| 陇川县| 民丰县| 二手房| 卢龙县| 综艺| 兴海县| 建水县| 泰安市| 南京市| 饶河县| 大名县| 渭源县| 宜黄县| 双江| 惠水县| 万年县| 镶黄旗| 叙永县| 房山区| 内黄县| 晋宁县| 岢岚县|