欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

問題示例

假設我們有一個更新方法:

@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 默認策略導致的,它默認 忽略 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永遠更新,即使字段為 null,也會更新到數(shù)據(jù)庫
NOT_NULL默認值,字段為 null 時不會更新
NOT_EMPTY字符串類型使用,空字符串也會忽略
NEVER永不更新
DEFAULT使用全局默認策略

如果字段使用 ALWAYS,當你傳 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)點:靈活,只針對當前更新操作生效。

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

方案 3:自定義 Mapper SQL

當字段較多或者更新規(guī)則復雜時,可以直接寫自定義 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)點缺點適用場景
實體類設置 ALWAYS簡單,全局生效影響所有更新操作字段允許全局置空
LambdaUpdateWrapper / UpdateWrapper靈活,針對單次操作寫法稍復雜單次更新可能置空字段
自定義 Mapper SQL完全控制,適合復雜場景失去自動映射批量或復雜更新

推薦做法

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

總結(jié)

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

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

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

相關(guān)文章

  • Spring MVC創(chuàng)建項目踩過的bug

    Spring MVC創(chuàng)建項目踩過的bug

    這篇文章主要介紹了Spring MVC創(chuàng)建項目踩過的bug,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • SpringBoot啟動異常Exception in thread “main“ java.lang.UnsupportedClassVersionError

    SpringBoot啟動異常Exception in thread “main“ 

    本文主要介紹了SpringBoot啟動異常Exception in thread “main“ java.lang.UnsupportedClassVersionError,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 詳解spring boot整合JMS(ActiveMQ實現(xiàn))

    詳解spring boot整合JMS(ActiveMQ實現(xiàn))

    本篇文章主要介紹了詳解spring boot整合JMS(ActiveMQ實現(xiàn)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java處理表格的實用工具庫

    Java處理表格的實用工具庫

    EasyExcel是一個基于Java的簡單、省內(nèi)存的讀寫Excel的開源項目,在盡可能節(jié)約內(nèi)存的情況下支持讀寫百M的Excel,下面這篇文章主要給大家分享介紹了一個關(guān)于Java處理表格的實用工具庫,需要的朋友可以參考下
    2021-11-11
  • GC參考手冊二java中垃圾回收原理解析

    GC參考手冊二java中垃圾回收原理解析

    由于有個垃圾回收機制,java中的額對象不在有“作用域”的概念,只有對象的引用才有“作用域”。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用空閑的內(nèi)存<BR>
    2022-01-01
  • 淺談Java中Unicode的編碼和實現(xiàn)

    淺談Java中Unicode的編碼和實現(xiàn)

    這篇文章向大家介紹了Java編程中Unicode編碼及實現(xiàn)的相關(guān)內(nèi)容,列舉了幾個字符不同表達式的比較,以及Unicode平面映射的知識,具有一點點參考價值,需要的朋友可以了解下。
    2017-10-10
  • 詳解Spring Cloud Feign 熔斷配置的一些小坑

    詳解Spring Cloud Feign 熔斷配置的一些小坑

    這篇文章主要介紹了詳解Spring Cloud Feign 熔斷配置的一些小坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • SpringBoot下RabbitMq實現(xiàn)定時任務

    SpringBoot下RabbitMq實現(xiàn)定時任務

    這篇文章主要為大家詳細介紹了SpringBoot下RabbitMq實現(xiàn)定時任務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Java字節(jié)碼中jvm實例用法

    Java字節(jié)碼中jvm實例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于Java字節(jié)碼中jvm實例用法內(nèi)容,有興趣的朋友們可以學習參考下。
    2021-02-02
  • Java自定義簡單標簽實例

    Java自定義簡單標簽實例

    Java自定義簡單標簽可以方便的在頁面輸出信息,并且對于權(quán)限的控制,和對于Jsp標簽和servlet代碼的分離有著很好的作用
    2013-07-07

最新評論