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

Mybatis-Plus字段策略FieldStrategy的使用

 更新時間:2022年08月11日 09:44:52   作者:斗者_2013  
本文主要介紹了Mybatis-Plus字段策略FieldStrategy的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

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

今天主要是對Mybatis-Plus字段策略FieldStrategy進行介紹。

一、官方文檔

Mybatis-Plus中FieldStrategy說明:https://baomidou.com/pages/223848/

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

二、字段策略介紹

1、FieldStrategy作用

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

三個配置,對應三種使用場景

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

2、FieldStrategy類型

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

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

    private FieldStrategy() {
    }
}

每種策略的作用:

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

3、FieldStrategy配置

全局策略配置

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

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注解可以針對單個字段指定字段策略。

示例:

@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的默認策略都是FieldStrategy.DEFAULT,表示跟隨全局配置。

三、實戰(zhàn)說明

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

1.默認策略 - NOT_NULL

默認策略為FieldStrategy.NOT_NULL,表示需要進行非NULL判斷,只有不為NULL的字段才會參與數(shù)據(jù)處理。
相當于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為默認的全局策略
   //@TableField(updateStrategy = FieldStrategy.NOT_NULL)
   private String email;
}

單元測試:

 @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沒有參與更新操作。

updateStrategy的默認策略是FieldStrategy.DEFAULT,表示跟隨全局配置。而全局的默認策略是FieldStrategy.NOT_NULL,即進行NULL值判斷,如果為NULL,則不更新對應的字段。

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í)行上面的單元測試:

可以看到,盡管email字段的值為null,但還是進行了更新操作。
說明策略FieldStrategy.IGNORED會忽略字段值的空值判斷,無論實體對象的字段值是否為空,都會進行更新操作。

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字段不為空,進行單元測試:

 @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字段有值,但還是沒有進行了更新操作。
說明策略FieldStrategy.NEVER不但會忽略字段值的空值判斷,而且不管標識的字段是否有值,都不會進行更新操作。

4.字符不為空-NOT_EMPTY

策略FieldStrategy.NOT_EMPTY表示需要對字符串進行空值判斷,只有非空字符串的字段才會參與數(shù)據(jù)處理。
相當于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字段不為空,進行單元測試:

 @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字段有值的時候,正常更新。

指定email字段為空字符串,進行單元測試:

 @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字段為空字符串時,不會參與更新操作。

5.跟隨全局-DEFAULT

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

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

總結(jié)

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

1、字段策略的3個使用場景:

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

2、字段策略的5種類型:

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

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

相關(guān)文章

  • SpringBoot3.0集成MybatisPlus的實現(xiàn)方法

    SpringBoot3.0集成MybatisPlus的實現(xiàn)方法

    本文主要介紹了SpringBoot3.0集成MybatisPlus的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • 詳解Java的MyBatis框架中動態(tài)SQL的基本用法

    詳解Java的MyBatis框架中動態(tài)SQL的基本用法

    這篇文章主要介紹了詳解Java的MyBatis框架中動態(tài)SQL的基本用法,文中列出了一些常用SQL動態(tài)語句進行講解,需要的朋友可以參考下
    2016-04-04
  • 基于Java創(chuàng)建XML(無中文亂碼)過程解析

    基于Java創(chuàng)建XML(無中文亂碼)過程解析

    這篇文章主要介紹了基于Java創(chuàng)建XML(無中文亂碼)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java實題演練二叉搜索樹與雙向鏈表分析

    Java實題演練二叉搜索樹與雙向鏈表分析

    這篇文章主要介紹了Java二叉搜索樹與雙向鏈表,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路
    2022-12-12
  • 詳解mybatis-plus的 mapper.xml 路徑配置的坑

    詳解mybatis-plus的 mapper.xml 路徑配置的坑

    這篇文章主要介紹了詳解mybatis-plus的 mapper.xml 路徑配置的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Java 如何使用正則表達式去除前導0

    Java 如何使用正則表達式去除前導0

    這篇文章主要介紹了Java 使用正則表達式去除前導0的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 一文教你學會如何使用MyBatisPlus

    一文教你學會如何使用MyBatisPlus

    本篇文章,我們通過 MyBatis Plus 來對一張表進行 CRUD 操作,來看看是如何簡化我們開發(fā)的,文中通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • 如何合理使用Spring的事務方式

    如何合理使用Spring的事務方式

    這篇文章主要介紹了如何合理使用Spring的事務方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • MyBatis-plus 模糊查詢的使用

    MyBatis-plus 模糊查詢的使用

    這篇文章主要介紹了MyBatis-plus 模糊查詢的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • java反射常用方法案例詳解

    java反射常用方法案例詳解

    Java反射指的是一個機制,這種機制可以在Java程序運行時(動態(tài))實例化對象、讀寫屬性、調(diào)用方法,這篇文章主要介紹了java反射常用方法,需要的朋友可以參考下
    2023-06-06

最新評論

宣城市| 休宁县| 漯河市| 图们市| 壶关县| 固始县| 安化县| 天柱县| 家居| 汶上县| 白银市| 留坝县| 三河市| 江门市| 波密县| 汝城县| 六枝特区| 铜陵市| 建宁县| 锡林浩特市| 华阴市| 论坛| 荆门市| 晋城| 习水县| 内江市| 克什克腾旗| 岑巩县| 青田县| 扬州市| 玛多县| 江阴市| 三门峡市| 蕉岭县| 周至县| 泾川县| 璧山县| 乌兰察布市| 天等县| 武安市| 手游|