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

Mybatis-Plus字段策略FieldStrategy的使用

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

前言

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

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

一、官方文檔

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

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

二、字段策略介紹

1、FieldStrategy作用

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

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

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

2、FieldStrategy類型

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

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

    private FieldStrategy() {
    }
}

每種策略的作用:

描述
IGNORED忽略空值判斷,實(shí)體對象的字段是什么值就用什么值更新,支持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追隨全局配置

3、FieldStrategy配置

全局策略配置

在全局配置中,三者的默認(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

單字段策略配置

在實(shí)體對象中,通過@TableField注解可以針對單個(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)說明

以更新操作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;
}

單元測試:

 @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的默認(rèn)策略是FieldStrategy.DEFAULT,表示跟隨全局配置。而全局的默認(rèn)策略是FieldStrategy.NOT_NULL,即進(jìn)行NULL值判斷,如果為NULL,則不更新對應(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í)行上面的單元測試:

可以看到,盡管email字段的值為null,但還是進(jìn)行了更新操作。
說明策略FieldStrategy.IGNORED會(huì)忽略字段值的空值判斷,無論實(shí)體對象的字段值是否為空,都會(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)行單元測試:

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

4.字符不為空-NOT_EMPTY

策略FieldStrategy.NOT_EMPTY表示需要對字符串進(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)行單元測試:

 @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)行單元測試:

 @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表示追隨全局配置的字段策略,這也是字段級別的默認(rèn)策略。而全局的字段策略,默認(rèn)是FieldStrategy.NOT_NULL。

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

總結(jié)

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    Java 如何使用正則表達(dá)式去除前導(dǎo)0

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

    一文教你學(xué)會(huì)如何使用MyBatisPlus

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

    如何合理使用Spring的事務(wù)方式

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

    MyBatis-plus 模糊查詢的使用

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

    java反射常用方法案例詳解

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

最新評論

常熟市| 惠州市| 娄烦县| 阿瓦提县| 穆棱市| 留坝县| 惠水县| 南昌县| 绥宁县| 民乐县| 河东区| 文安县| 射洪县| 五台县| 门头沟区| 沈阳市| 达尔| 万荣县| 历史| 漠河县| 宁武县| 沙河市| 南开区| 梁山县| 古丈县| 沙湾县| 宝山区| 财经| 吐鲁番市| 游戏| 开江县| 珠海市| 原平市| 禄丰县| 霞浦县| 邯郸县| 东莞市| 体育| 徐闻县| 贡嘎县| 正蓝旗|