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

Mybatis?Plus字段為空值時未更新問題及解決

 更新時間:2026年05月15日 08:48:47   作者:讓丄帝愛伱  
在使用MybatisPlus的UpdateById()方法時,如果字段從前臺傳入的數(shù)據(jù)為空值,則該字段不會得到更新,可以通過使用@TableField注解的fill屬性、全局配置update-strategy屬性或使用UpdateWrapper類來解決此問題

問題:

使用Mybatis Plus提供的封裝方法UpdateById()時,字段從前臺傳入的數(shù)據(jù)為空值,但是執(zhí)行方法后該字段未得到更新。

以前使用原生Mybatis生成的Update方法,是有對值是否為空的判斷,如果為空就不加入到update table set語句內(nèi),那么Mybatis Plus是不是會有類似于@TableField、@TableId這樣的注解,能解決該問題呢

解決:

方案一 注解方式

進入@TableField注解的相關(guān)內(nèi)容。

在該注解的屬性描述內(nèi),有這樣一個字段——“fill”,字段自動填充策略。

fillEnumFieldFill.DEFAULT字段自動填充策略

它決定了在執(zhí)行新增或修改方法時,有這個注解的字段需要怎樣將數(shù)據(jù)進行填充,F(xiàn)ieldFill的相關(guān)的屬性,官方描述如下:

描述
DEFAULT默認不處理
INSERT插入時填充字段
UPDATE更新時填充字段
INSERT_UPDATE插入和更新時填充字段

默認值是DEFAULT,默認不處理,即本次出現(xiàn)的問題——新增、修改該字段為空時,將不自動填充即不列入語句,如:

insert into shop_item(shop_price) values(xxxx);
update shop_item set shop_price = xxxx;
@Data
@TableName("shop_item")
public class ShopItem implements Serializable {
 
 
     private static final long serialVersionUID = 1L;
 
    /**
     * 編號
     */
    @TableId(type= IdType.INPUT)
    private String id;
 
    /**
     * 物品名稱
     */
    private String itemName;
 
    /**
     * 物品價格
     */
    @TableField(fill = FieldFill.UPDATE)
    private Double itemPrice;
 
    /**
    *    添加人編號
    */
    private String addUserId;
 
    /**
    *    添加時間
    */
    private Date addTime;
}

在itemPrice屬性的頂上加上@TableField(fill = FieldFill.UPDATE)后,在執(zhí)行一遍查看SQL

update 
    shop_item 
set 
    item_name = 'iPhone',
    item_price = ''
where 
id = '361E8C48-6699-4ED5-83C4-7C9D98747C2C';

方案二 全局配置

根據(jù)方案一中,F(xiàn)ieldStrategy 的三種策略:IGNORED、NOT_NULL、NOT_EMPTY,

可以在 application.yml 配置文件中注入配置 GlobalConfiguration 屬性 update-strategy,

將 update-strategy 策略調(diào)整為 IGNORED,即忽略判斷策略。即可調(diào)整全局的驗證策略。

如下所示:

# yml 配置:
mybatis-plus:
  global-config:
    db-config:
      update-strategy: IGNORED

全局性配置會對所有的字段都忽略判斷,如果有特殊字段處理,可以單獨配置,修改字段的策略。

設(shè)定全局配置,可以減少一個一個字段去指定增加的麻煩。

方案三:使用 UpdateWrapper (3.x) 更新

mp 提供了 UpdateWrapper 類簡化更新的操作,

針對方法級進行操作,只需操作其更新方法,相比較方案一和方案二,方案三影響范圍較小。

由于 BaseMapper 的繼承 Mapper ,在 BaseMapper

/**
 * 根據(jù) whereEntity 條件,更新記錄
 *
 * @param entity        實體對象 (set 條件值,可以為 null)
 * @param updateWrapper 實體對象封裝操作類(可以為 null,里面的 entity 用于生成 where 語句)
 */
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);

看出,實體對象可以 set 條件值且為可以為 null,說明有兩種方法可以實現(xiàn)更新操作(采用 lambda 表達式):

  • 將需要更新的字段,設(shè)置到 entity 中
  • 將 entity設(shè)置為 null ,將需要更新的字段設(shè)置到 UpdateWrapper 中
mapper.update(
    null,
    Wrappers.<User>lambdaUpdate()
       .set(User::getAge, 3)
       .set(User::getName, "mp")
       .set(User::getEmail, null) //把email設(shè)置成null
       .eq(User::getId, 2)
);

總結(jié)

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

相關(guān)文章

  • SpringBoot 集成 activiti的示例代碼

    SpringBoot 集成 activiti的示例代碼

    這篇文章主要介紹了SpringBoot 集成 activiti的示例代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Java調(diào)用shell命令涉及管道、重定向時不生效問題及解決

    Java調(diào)用shell命令涉及管道、重定向時不生效問題及解決

    這篇文章主要介紹了Java調(diào)用shell命令涉及管道、重定向時不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Thread 類的基本用法、Java 線程的幾種狀態(tài)分析

    Thread 類的基本用法、Java 線程的幾種狀態(tài)分析

    Java中的Thread類是多線程編程的核心,Java線程共有6種狀態(tài),包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,接下來通過本文給大家介紹Thread 類的基本用法、Java 線程的幾種狀態(tài),感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • 一文詳解jvm中的引用類型

    一文詳解jvm中的引用類型

    在Java中對象以引用來指向JVM的內(nèi)存區(qū)塊,這里我們總結(jié)了強引用、軟引用、弱引用和假象引用(幽靈引用),下面這篇文章主要給大家介紹了關(guān)于jvm中引用類型的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • java 中設(shè)計模式(值對象)的實例詳解

    java 中設(shè)計模式(值對象)的實例詳解

    這篇文章主要介紹了java 中設(shè)計模式(值對象)的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • SpringBoot Actuator跟蹤HTTP請求和響應(yīng)的方法

    SpringBoot Actuator跟蹤HTTP請求和響應(yīng)的方法

    Spring Boot Actuator 是 Spring Boot 提供的生產(chǎn)級監(jiān)控和管理模塊,旨在幫助開發(fā)者實時監(jiān)控應(yīng)用狀態(tài)、收集運行時指標(biāo),并提供一系列管理端點,本文給大家介紹了SpringBoot Actuator跟蹤HTTP請求和響應(yīng)的方法,需要的朋友可以參考下
    2025-08-08
  • Java中Synchronized與Lock鎖機制的區(qū)別詳解

    Java中Synchronized與Lock鎖機制的區(qū)別詳解

    在?Java?并發(fā)編程中,synchronized?和?Lock?是最常用的兩種鎖機制,它們都能保證線程安全,但實現(xiàn)原理、功能特性和性能表現(xiàn)上有顯著差異,下面小編就和大家詳細介紹一下吧
    2026-05-05
  • 詳細說一說Java自動裝箱與拆箱是什么

    詳細說一說Java自動裝箱與拆箱是什么

    自動裝箱與拆箱的機制可以讓我們在Java的變量賦值或者是方法調(diào)用等情況下使用原始類型或者對象類型更加簡單直接,這篇文章主要介紹了Java自動裝箱與拆箱是什么的相關(guān)資料,需要的朋友可以參考下
    2025-10-10
  • ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法

    ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法

    ThreadLocal 的內(nèi)存泄漏問題通常發(fā)生在使用 ThreadLocal 存儲對象時,尤其是在多線程環(huán)境中,線程池中的線程復(fù)用可能導(dǎo)致一些資源沒有及時清理,從而引發(fā)內(nèi)存泄漏,所以本文給大家介紹了ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法,需要的朋友可以參考下
    2024-12-12
  • Springboot?JPA如何使用distinct返回對象

    Springboot?JPA如何使用distinct返回對象

    這篇文章主要介紹了Springboot?JPA如何使用distinct返回對象,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評論

蓝田县| 军事| 海南省| 晴隆县| 根河市| 松原市| 乌拉特前旗| 济南市| 仙桃市| 泗水县| 洪雅县| 龙游县| 瑞丽市| 吴川市| 平谷区| 桑植县| 固原市| 韶山市| 湾仔区| 通化县| 会宁县| 峡江县| 罗定市| 洛南县| 晋州市| 乐亭县| 西乌珠穆沁旗| 常德市| 科尔| 辽阳县| 东光县| 澜沧| 宁武县| 平定县| 信丰县| 濮阳市| 南城县| 富裕县| 梅河口市| 惠安县| 连云港市|