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

mybatis和mybatis-plus設(shè)置值為null不起作用問題及解決

 更新時間:2025年02月21日 09:44:01   作者:追夢者123  
Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查詢時對空值的處理策略,通過配置不同的策略類型,可以靈活地處理實體對象的空值問題

Mybatis-plus

FieldStrategy作用

Mybatis-Plus字段策略FieldStrategy的作用主要是在進(jìn)行新增、更新時,根據(jù)配置的策略判斷是否對實體對象的值進(jìn)行空值判斷,如果策略為字段不能為空,則不會對為空的字段進(jìn)行賦值或更新。

同樣,在進(jìn)行where條件查詢時,根據(jù)whereStrategy策略判斷是否對字段進(jìn)行空值判斷,如果策略為字段不能為空,則為空的字段不會作為查詢條件組裝到where條件中。

三個配置,對應(yīng)三種使用場景:

  • insertStrategy 在insert操作時的字段策略,是否進(jìn)行空值判斷,插入空值
  • updateStrategy 在update操作時的字段策略,是否進(jìn)行空值判斷,插入空值
  • whereStrategy 在where條件組裝時,是否進(jìn)行控制判斷,將空值作為查詢條件

FieldStrategy類型

FieldStrategy的源碼中,一共有5種策略類型

public enum FieldStrategy {
    IGNORED,
    NOT_NULL,
    NOT_EMPTY,
    DEFAULT,
    NEVER;

    private FieldStrategy() {
    }
}

每種策略的作用

值	                     描述
IGNORED	     忽略空值判斷,實體對象的字段是什么值就用什么值更新,支持null值更新操作
NOT_NULL	     進(jìn)行非NULL判斷,也是默認(rèn)策略,相當(dāng)于age!=null
NOT_EMPTY	 進(jìn)行非空判斷,主要是針對字符串類型,相當(dāng)于name != null and name != ‘'
NEVER	        從不更新,不管字段是否有值,都不進(jìn)行更新
DEFAULT	    追隨全局配置

全局策略配置

在全局配置中,三者的默認(rèn)值都是FieldStrategy.NOT_NULL,即進(jìn)行空值判斷,不對NULL值數(shù)據(jù)進(jìn)行處理。

public DbConfig() {
    this.idType = IdType.ASSIGN_ID;
    this.tableUnderline = true;
    this.capitalMode = false;
    this.logicDeleteValue = "1";
    this.logicNotDeleteValue = "0";
    this.insertStrategy = FieldStrategy.NOT_NULL;
    this.updateStrategy = FieldStrategy.NOT_NULL;
    this.whereStrategy = FieldStrategy.NOT_NULL;
}

在spring boot中可以通過配置屬性修改全局字段策略

mybatis-plus.global-config.db-config.update-strategy=not_null
mybatis-plus.global-config.db-config.insert-strategy=not_null
mybatis-plus.global-config.db-config.where-strategy=not_null

@TableField注解的源碼

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TableField {
    String value() default "";

    boolean exist() default true;

    String condition() default "";

    String update() default "";

    //插入策略
    FieldStrategy insertStrategy() default FieldStrategy.DEFAULT;

    //更新策略
    FieldStrategy updateStrategy() default FieldStrategy.DEFAULT;
    
    //where條件策略
    FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;

    FieldFill fill() default FieldFill.DEFAULT;

    boolean select() default true;

    boolean keepGlobalFormat() default false;

    String property() default "";

    JdbcType jdbcType() default JdbcType.UNDEFINED;

    Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;

    boolean javaType() default false;

    String numericScale() default "";
}

其中,insertStrategy、updateStrategy和whereStrategy的默認(rèn)策略都是FieldStrategy.DEFAULT,表示跟隨全局配置。

忽略判斷-IGNORED

@TableName(value ="user")
@Data
public class User implements Serializable {
   @TableId
   private Long id;
   private String name;
   private Integer age;
   @TableField(updateStrategy = FieldStrategy.IGNORED)
   private String email;
}

從不處理-NEVER(標(biāo)識指定字段從來不更新)

@TableName(value ="user")
@Data
public class User implements Serializable {
   @TableId
   private Long id;
   private String name;
   private Integer age;
   @TableField(updateStrategy = FieldStrategy.NEVER)
   private String email;
}

說明策略FieldStrategy.NEVER不但會忽略字段值的空值判斷,而且不管標(biāo)識的字段是否有值,都不會進(jìn)行更新操作。

字符不為空-NOT_EMPTY

  • 策略FieldStrategy.NOT_EMPTY表示需要對字符串進(jìn)行空值判斷,只有非空字符串的字段才會參與數(shù)據(jù)處理。
  • 相當(dāng)于mybatis的xml文件中的if判定條件判斷:name != null and name != ‘’

跟隨全局-DEFAULT

  • 策略FieldStrategy.DEFAULT表示追隨全局配置的字段策略,這也是字段級別的默認(rèn)策略。
  • 而全局的字段策略,默認(rèn)是FieldStrategy.NOT_NULL。

mybatis

mybatis 不會出現(xiàn)這個問題,因為在xml文件中有if標(biāo)簽判斷,如果不需要判斷刪除判斷即可

總結(jié)

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

相關(guān)文章

  • Spring三級緩存解決循環(huán)依賴的過程分析

    Spring三級緩存解決循環(huán)依賴的過程分析

    這篇文章主要介紹了Spring三級緩存解決循環(huán)依賴,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Netty分布式pipeline管道Handler的刪除邏輯操作

    Netty分布式pipeline管道Handler的刪除邏輯操作

    這篇文章主要為大家介紹了Netty分布式pipeline管道Handler的刪除邏輯操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 淺談多線程中的鎖的幾種用法總結(jié)(必看)

    淺談多線程中的鎖的幾種用法總結(jié)(必看)

    下面小編就為大家?guī)硪黄獪\談多線程中的鎖的幾種用法總結(jié)(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 一招教你使用Java執(zhí)行g(shù)roovy腳本的兩種方式

    一招教你使用Java執(zhí)行g(shù)roovy腳本的兩種方式

    本文主要介紹了一招教你使用Java執(zhí)行g(shù)roovy腳本的兩種方式,一種是通過腳本引擎ScriptEngine提供的eval(String)方法執(zhí)行腳本內(nèi)容,一種是執(zhí)行g(shù)roovy腳本,感興趣的可以了解一下
    2023-09-09
  • Java單例模式分析

    Java單例模式分析

    這篇文章主要給大家介紹了關(guān)于Java單例模式,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • Java程序流程控制:判斷結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)原理與用法實例分析

    Java程序流程控制:判斷結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)原理與用法實例分析

    這篇文章主要介紹了Java程序流程控制:判斷結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)原理與用法,結(jié)合實例形式分析了Java流程控制中判斷結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)相關(guān)原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • SpringBoot如何實現(xiàn)分離資源文件并打包

    SpringBoot如何實現(xiàn)分離資源文件并打包

    這篇文章主要介紹了SpringBoot如何實現(xiàn)分離資源文件并打包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 無感NullPointerException的值相等判斷方法

    無感NullPointerException的值相等判斷方法

    當(dāng)我們需要去判斷一個?入?yún)?查庫?返回的開關(guān)變量(通常是個Integer類型的)時,常常會寫如下的if-else判斷語句。但又會為在生產(chǎn)環(huán)境看到的「NullPointerException」感到困擾,遇到這個問題如何處理呢,下面小編通過本文給大家詳細(xì)講解,需要的朋友參考下吧
    2023-02-02
  • 出現(xiàn)java.lang.UnsupportedClassVersionError錯誤的原因以及解決方法

    出現(xiàn)java.lang.UnsupportedClassVersionError錯誤的原因以及解決方法

    這篇文章主要給大家介紹了關(guān)于出現(xiàn)java.lang.UnsupportedClassVersionError錯誤的原因以及解決方法,文中通過圖文以及代碼示例將這個錯誤介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • SpringBoot各種注解詳解

    SpringBoot各種注解詳解

    SpringBoot的一個核心功能是IOC,就是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用SpringBoot注解方式或者Spring XML配置方式。SpringBoot注解方式減少了配置文件內(nèi)容,更加便于管理,并且使用注解可以大大提高了開發(fā)效率
    2022-12-12

最新評論