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

Mybatis?Plus字段為空值時(shí)未更新問(wèn)題及解決

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

問(wèn)題:

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

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

解決:

方案一 注解方式

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

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

fillEnumFieldFill.DEFAULT字段自動(dòng)填充策略

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

描述
DEFAULT默認(rèn)不處理
INSERT插入時(shí)填充字段
UPDATE更新時(shí)填充字段
INSERT_UPDATE插入和更新時(shí)填充字段

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

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;
 
    /**
     * 編號(hào)
     */
    @TableId(type= IdType.INPUT)
    private String id;
 
    /**
     * 物品名稱(chēng)
     */
    private String itemName;
 
    /**
     * 物品價(jià)格
     */
    @TableField(fill = FieldFill.UPDATE)
    private Double itemPrice;
 
    /**
    *    添加人編號(hào)
    */
    private String addUserId;
 
    /**
    *    添加時(shí)間
    */
    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)整全局的驗(yàn)證策略。

如下所示:

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

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

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

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

mp 提供了 UpdateWrapper 類(lèi)簡(jiǎn)化更新的操作,

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

由于 BaseMapper 的繼承 Mapper ,在 BaseMapper

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

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

  • 將需要更新的字段,設(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é)

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

相關(guān)文章

  • SpringBoot 集成 activiti的示例代碼

    SpringBoot 集成 activiti的示例代碼

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

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

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

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

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

    一文詳解jvm中的引用類(lèi)型

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

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

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

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

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

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

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

    詳細(xì)說(shuō)一說(shuō)Java自動(dòng)裝箱與拆箱是什么

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

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

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

    Springboot?JPA如何使用distinct返回對(duì)象

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

最新評(píng)論

喀喇沁旗| 融水| 盱眙县| 襄汾县| 内江市| 郯城县| 故城县| 冕宁县| 赤峰市| 济源市| 工布江达县| 石阡县| 新兴县| 昌平区| 房产| 嘉善县| 漯河市| 大方县| 三门峡市| 阿坝县| 正镶白旗| 海城市| 绥芬河市| 石首市| 利津县| 武功县| 德格县| 孝昌县| 阜康市| 文山县| 漳平市| 保定市| 金坛市| 治多县| 施甸县| 来凤县| 肃北| 和平县| 神农架林区| 邻水| 南汇区|