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

Mybatis-Plus字段策略FieldStrategy的使用

 更新時(shí)間:2022年08月11日 09:44:52   作者:斗者_(dá)2013  
本文主要介紹了Mybatis-Plus字段策略FieldStrategy的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

最近都是Mybatis-Plus系列的小白文,算是對(duì)工作中最常使用的框架的細(xì)節(jié)掃盲。
有在學(xué)習(xí)Mybatis-Plus使用的,可以關(guān)注一波。

今天主要是對(duì)Mybatis-Plus字段策略FieldStrategy進(jìn)行介紹。

一、官方文檔

Mybatis-Plus中FieldStrategy說(shuō)明:https://baomidou.com/pages/223848/

Tip??:
官網(wǎng)鏈接,自力更生。

二、字段策略介紹

1、FieldStrategy作用

Mybatis-Plus字段策略FieldStrategy的作用主要是在進(jìn)行新增、更新時(shí),根據(jù)配置的策略判斷是否對(duì)實(shí)體對(duì)象的值進(jìn)行空值判斷,如果策略為字段不能為空,則不會(huì)對(duì)為空的字段進(jìn)行賦值或更新。
同樣,在進(jìn)行where條件查詢(xún)時(shí),根據(jù)whereStrategy策略判斷是否對(duì)字段進(jìn)行空值判斷,如果策略為字段不能為空,則為空的字段不會(huì)作為查詢(xún)條件組裝到where條件中。

三個(gè)配置,對(duì)應(yīng)三種使用場(chǎng)景

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

2、FieldStrategy類(lèi)型

FieldStrategy的源碼中,一共有5種策略類(lèi)型。

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

    private FieldStrategy() {
    }
}

每種策略的作用:

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

3、FieldStrategy配置

全局策略配置

在全局配置中,三者的默認(rèn)值都是FieldStrategy.NOT_NULL,即進(jìn)行空值判斷,不對(duì)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中可以通過(guò)配置屬性修改全局字段策略:

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

單字段策略配置

在實(shí)體對(duì)象中,通過(guò)@TableField注解可以針對(duì)單個(gè)字段指定字段策略。

示例:

@TableName(value ="user")
@Data
public class User implements Serializable {
   @TableId
   private Long id;
   private String name;
   private Integer age;

  //配置字段更新策略:不能為空
   @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
   private String email;

}

@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,表示跟隨全局配置。

三、實(shí)戰(zhàn)說(shuō)明

以更新操作updateById為例,演示各種策略的作用。

1.默認(rèn)策略 - NOT_NULL

默認(rèn)策略為FieldStrategy.NOT_NULL,表示需要進(jìn)行非NULL判斷,只有不為NULL的字段才會(huì)參與數(shù)據(jù)處理。
相當(dāng)于mybatis的xml文件中的if判定條件判斷:age!=null

<if test="age != null">
     AND t.age = #{age}
</if>

代碼如下(示例):

@TableName(value ="user")
@Data
public class User implements Serializable {
   @TableId
   private Long id;
   private String name;
   private Integer age;
   //NOT_NULL為默認(rèn)的全局策略
   //@TableField(updateStrategy = FieldStrategy.NOT_NULL)
   private String email;
}

單元測(cè)試:

 @Test
 public void testUpdateById() {
     System.out.println("----- updateById method test ------");
     User user = new User();
     user.setId(1543920054188400641L);
     user.setName("test");
     user.setAge(13);
     //email字段為null
     //user.setEmail("");
     userMapper.updateById(user);
     System.out.println(user.toString());
 }

執(zhí)行結(jié)果:

為null的字段email沒(méi)有參與更新操作。

updateStrategy的默認(rèn)策略是FieldStrategy.DEFAULT,表示跟隨全局配置。而全局的默認(rèn)策略是FieldStrategy.NOT_NULL,即進(jìn)行NULL值判斷,如果為NULL,則不更新對(duì)應(yīng)的字段。

2.忽略判斷-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;
}

再次執(zhí)行上面的單元測(cè)試:

可以看到,盡管email字段的值為null,但還是進(jìn)行了更新操作。
說(shuō)明策略FieldStrategy.IGNORED會(huì)忽略字段值的空值判斷,無(wú)論實(shí)體對(duì)象的字段值是否為空,都會(huì)進(jìn)行更新操作。

3.從不處理-NEVER

@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;
}

指定email字段不為空,進(jìn)行單元測(cè)試:

 @Test
 public void testUpdateById() {
     System.out.println("----- updateById method test ------");
     User user = new User();
     user.setId(1543920054188400641L);
     user.setName("test");
     user.setAge(13);
     //email字段不為空
     user.setEmail("101@qq.com");
     userMapper.updateById(user);
     System.out.println(user.toString());
 }

執(zhí)行結(jié)果:

盡管email字段有值,但還是沒(méi)有進(jìn)行了更新操作。
說(shuō)明策略FieldStrategy.NEVER不但會(huì)忽略字段值的空值判斷,而且不管標(biāo)識(shí)的字段是否有值,都不會(huì)進(jìn)行更新操作。

4.字符不為空-NOT_EMPTY

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

<if test="name != null and name != '' ">
    AND t.name like CONCAT('%',#{name},'%')
 </if>
@TableName(value ="user")
@Data
public class User implements Serializable {
   @TableId
   private Long id;
   private String name;
   private Integer age;
   @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
   private String email;
}

指定email字段不為空,進(jìn)行單元測(cè)試:

 @Test
 public void testUpdateById() {
     System.out.println("----- updateById method test ------");
     User user = new User();
     user.setId(1543920054188400641L);
     user.setName("test");
     user.setAge(13);
     //email字段不為空
     user.setEmail("101@qq.com");
     userMapper.updateById(user);
     System.out.println(user.toString());
 }

執(zhí)行結(jié)果:

email字段有值的時(shí)候,正常更新。

指定email字段為空字符串,進(jìn)行單元測(cè)試:

 @Test
 public void testUpdateById() {
     System.out.println("----- updateById method test ------");
     User user = new User();
     user.setId(1543920054188400641L);
     user.setName("test");
     user.setAge(13);
     //email字段為空字符串
     user.setEmail("");
     userMapper.updateById(user);
     System.out.println(user.toString());
 }

執(zhí)行結(jié)果:

email字段為空字符串時(shí),不會(huì)參與更新操作。

5.跟隨全局-DEFAULT

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

這里就不做繼續(xù)演示。

總結(jié)

本文主要是詳細(xì)介紹了Mybatis-Plus字段策略FieldStrategy的作用和使用方法。

1、字段策略的3個(gè)使用場(chǎng)景:

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

2、字段策略的5種類(lèi)型:

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

到此這篇關(guān)于Mybatis-Plus字段策略FieldStrategy的使用的文章就介紹到這了,更多相關(guān)Mybatis-Plus字段策略FieldStrategy內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JDK都出到14了,你有什么理由不會(huì)函數(shù)式編程(推薦)

    JDK都出到14了,你有什么理由不會(huì)函數(shù)式編程(推薦)

    這篇文章主要介紹了JDK都出到14了,你有什么理由不會(huì)函數(shù)式編程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java 重入鎖和讀寫(xiě)鎖的具體使用

    Java 重入鎖和讀寫(xiě)鎖的具體使用

    這篇文章主要介紹了Java 重入鎖和讀寫(xiě)鎖的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Mybatis中的延遲加載詳細(xì)解析

    Mybatis中的延遲加載詳細(xì)解析

    這篇文章主要介紹了Mybatis中的延遲加載詳細(xì)解析,延遲加載就是在真正需要使用數(shù)據(jù)時(shí)才發(fā)起查詢(xún),不用的時(shí)候不進(jìn)行查詢(xún),按需加載(懶加載),需要的朋友可以參考下
    2023-12-12
  • Java如何實(shí)現(xiàn)將類(lèi)文件打包為jar包

    Java如何實(shí)現(xiàn)將類(lèi)文件打包為jar包

    這篇文章主要介紹了Java如何實(shí)現(xiàn)將類(lèi)文件打包為jar包,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java實(shí)現(xiàn)RSA算法的方法詳解

    Java實(shí)現(xiàn)RSA算法的方法詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)RSA算法的方法,結(jié)合實(shí)例形式分析了RSA算法的原理、實(shí)現(xiàn)與使用方法,需要的朋友可以參考下
    2018-03-03
  • 基于Java中字符串內(nèi)存位置詳解

    基于Java中字符串內(nèi)存位置詳解

    下面小編就為大家?guī)?lái)一篇基于Java中字符串內(nèi)存位置詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • Java之jdbc連接mysql數(shù)據(jù)庫(kù)的方法步驟詳解

    Java之jdbc連接mysql數(shù)據(jù)庫(kù)的方法步驟詳解

    這篇文章主要介紹了Java之jdbc連接mysql數(shù)據(jù)庫(kù)的方法步驟詳解,JCBC技術(shù)是java開(kāi)發(fā)必備的只是,jdbc連接mysql數(shù)據(jù)庫(kù),這是一個(gè)比較簡(jiǎn)單的方法,有興趣的可以了解一下
    2020-07-07
  • Zookeeper如何實(shí)現(xiàn)分布式服務(wù)配置中心詳解

    Zookeeper如何實(shí)現(xiàn)分布式服務(wù)配置中心詳解

    Zookeeper在實(shí)際使用場(chǎng)景很多,比如配置中心,分布式鎖,注冊(cè)中心等,下面這篇文章主要給大家介紹了關(guān)于Zookeeper如何實(shí)現(xiàn)分布式服務(wù)配置中心的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Java設(shè)計(jì)模式系列之深入淺出單例模式

    Java設(shè)計(jì)模式系列之深入淺出單例模式

    設(shè)計(jì)模式是在大量的實(shí)踐中總結(jié)和理論之后優(yōu)選的代碼結(jié)構(gòu),編程風(fēng)格,以及解決問(wèn)題的思考方式,下面這篇文章主要給大家介紹了關(guān)于Java設(shè)計(jì)模式系列之深入淺出單例模式的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 一文詳解Java中枚舉類(lèi)的使用

    一文詳解Java中枚舉類(lèi)的使用

    這篇文章主要介紹了深入淺出講解Java中的枚舉類(lèi),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友可以了解下
    2022-11-11

最新評(píng)論