91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MybatisPlus字段策略FieldStrategy如何使用

發布時間:2022-08-11 11:26:41 來源:億速云 閱讀:609 作者:iii 欄目:開發技術

今天小編給大家分享一下MybatisPlus字段策略FieldStrategy如何使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    字段策略介紹

    1、FieldStrategy作用

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

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

    • insertStrategy 在insert操作時的字段策略,是否進行空值判斷,插入空值

    • updateStrategy 在update操作時的字段策略,是否進行空值判斷,插入空值

    • whereStrategy 在where條件組裝時,是否進行控制判斷,將空值作為查詢條件

    MybatisPlus字段策略FieldStrategy如何使用

    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值數據進行處理。

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

    實戰說明

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

    1.默認策略 - NOT_NULL

    默認策略為FieldStrategy.NOT_NULL,表示需要進行非NULL判斷,只有不為NULL的字段才會參與數據處理。
    相當于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());
     }

    執行結果:

    MybatisPlus字段策略FieldStrategy如何使用

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

    再次執行上面的單元測試:

    MybatisPlus字段策略FieldStrategy如何使用

    可以看到,盡管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());
     }

    執行結果:

    MybatisPlus字段策略FieldStrategy如何使用

    盡管email字段有值,但還是沒有進行了更新操作。
    說明策略FieldStrategy.NEVER不但會忽略字段值的空值判斷,而且不管標識的字段是否有值,都不會進行更新操作。

    4.字符不為空-NOT_EMPTY

    策略FieldStrategy.NOT_EMPTY表示需要對字符串進行空值判斷,只有非空字符串的字段才會參與數據處理。
    相當于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());
     }

    執行結果:

    email字段有值的時候,正常更新。

    MybatisPlus字段策略FieldStrategy如何使用

    指定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());
     }

    執行結果:

    email字段為空字符串時,不會參與更新操作。

    MybatisPlus字段策略FieldStrategy如何使用

    5.跟隨全局-DEFAULT

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

    這里就不做繼續演示。

    總結

    本文主要是詳細介紹了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 追隨全局配置

    以上就是“MybatisPlus字段策略FieldStrategy如何使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    清丰县| 青田县| 虞城县| 霍山县| 皮山县| 和田县| 台江县| 汝南县| 惠安县| 永善县| 潼南县| 武乡县| 大方县| 铁力市| 德庆县| 酒泉市| 佳木斯市| 寻乌县| 年辖:市辖区| 永福县| 陵水| 攀枝花市| 潼关县| 泾川县| 县级市| 德保县| 郯城县| 珲春市| 延津县| 霍山县| 博湖县| 武鸣县| 阿荣旗| 子长县| 黄浦区| 波密县| 凤冈县| 新乡市| 永平县| 太原市| 应城市|