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

mybatisPlus?FieldStrategy?策略作用小結(jié)

 更新時間:2025年12月10日 09:47:02   作者:愛吃土豆的馬鈴薯?????????  
MyBatis-Plus的FieldStrategy枚舉用于控制實(shí)體字段在插入、更新和查詢條件中的空值處理策略,下面就來詳細(xì)的介紹一下mybatisPlus?FieldStrategy?策略,感興趣的可以了解一下

MyBatis-Plus 的 FieldStrategy 枚舉用于控制實(shí)體字段在 插入(Insert)更新(Update)查詢條件(Where) 中的空值處理策略。理解這些策略對避免數(shù)據(jù)異常非常重要,以下是詳細(xì)解釋:

一、各策略的作用

1.IGNORED

  • 作用忽略空值判斷,無論字段值是否為 null、空字符串("") 或空集合,都會參與 SQL 操作。
  • 場景:強(qiáng)制將字段更新為 null(解決 saveOrUpdate 無法更新 null 的問題)。

2.NOT_NULL

  • 作用僅忽略 null,非 null 的空字符串或空集合仍會參與 SQL 操作。
  • 場景:允許字段為空字符串,但不允許 null(如數(shù)據(jù)庫字段允許 '' 但不允許 NULL)。

3.NOT_EMPTY

  • 作用忽略 null、空字符串("") 和空集合
  • 場景:字符串或集合類型字段必須有實(shí)際值(如用戶名、列表數(shù)據(jù))。

4.DEFAULT

  • 作用全局默認(rèn)策略,通常等價于 NOT_NULL(取決于 MyBatis-Plus 版本)。
  • 場景:使用全局配置的默認(rèn)行為。

5.NEVER

  • 作用永遠(yuǎn)不參與 SQL 操作,無論值是什么。
  • 場景:字段僅用于業(yè)務(wù)邏輯,不與數(shù)據(jù)庫交互(如臨時計算字段)。

二、不同方法(insert/update/where)的策略差異

1.insertStrategy(插入時)

  • 影響范圍save()、saveBatch() 等插入方法。
  • 示例
    @TableField(insertStrategy = FieldStrategy.NOT_NULL)
    private String username; // 插入時忽略 null 值
    

2.updateStrategy(更新時)

  • 影響范圍updateById()、saveOrUpdate()、update(entity, wrapper) 等更新方法。
  • 示例
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String email; // 更新時允許將 email 設(shè)置為 null
    

3.whereStrategy(查詢條件時)

  • 影響范圍Wrapper 條件構(gòu)造器中的實(shí)體參數(shù)。
  • 示例
    @TableField(whereStrategy = FieldStrategy.NOT_EMPTY)
    private String phone; // 查詢條件中忽略空字符串和 null
    

三、策略對比表

策略插入(Insert)更新(Update)查詢條件(Where)
IGNORED字段值無論如何都插入字段值無論如何都更新字段值無論如何都作為條件
NOT_NULL忽略 null,插入其他值忽略 null,更新其他值忽略 null,其他值作為條件
NOT_EMPTY忽略 null、""、空集合忽略 null、""、空集合忽略 null、""、空集合
DEFAULT按全局配置(通常為 NOT_NULL)按全局配置(通常為 NOT_NULL)按全局配置(通常為 NOT_NULL)
NEVER字段不參與插入字段不參與更新字段不作為條件

四、常見應(yīng)用場景

1. 允許更新字段為null

@TableField(updateStrategy = FieldStrategy.IGNORED)
private String remark; // 允許將備注更新為 null

2. 插入時自動填充默認(rèn)值

@TableField(insertStrategy = FieldStrategy.NOT_NULL)
private Integer status = 1; // 插入時若未設(shè)置值,則使用默認(rèn)值 1

3. 避免空字符串作為查詢條件

@TableField(whereStrategy = FieldStrategy.NOT_EMPTY)
private String keyword; // 避免空字符串作為查詢條件

五、全局配置 vs 字段注解

  • 全局配置(優(yōu)先級低):

    mybatis-plus:
      global-config:
        db-config:
          insert-strategy: NOT_NULL
          update-strategy: NOT_NULL
          where-strategy: NOT_EMPTY
    
  • 字段注解(優(yōu)先級高):

    @TableField(insertStrategy = FieldStrategy.IGNORED, 
                updateStrategy = FieldStrategy.NOT_NULL)
    private String nickname;
    

六、總結(jié)

  • IGNORED:強(qiáng)制讓 null 參與 SQL 操作,解決 saveOrUpdate 無法更新 null 的問題。
  • NOT_NULL:最常用,避免 null 導(dǎo)致數(shù)據(jù)庫字段被意外覆蓋。
  • NOT_EMPTY:適合字符串和集合類型,確保有實(shí)際數(shù)據(jù)。
  • 更新 null 字段:優(yōu)先使用 FieldStrategy.IGNORED 注解,而非全局配置。

合理配置這些策略可以避免 null 值導(dǎo)致的意外數(shù)據(jù)問題,提高代碼健壯性。

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

相關(guān)文章

  • 淺談MyBatis通用Mapper實(shí)現(xiàn)原理

    淺談MyBatis通用Mapper實(shí)現(xiàn)原理

    這篇文章主要介紹了淺談MyBatis通用Mapper實(shí)現(xiàn)原理,本文會先介紹通用 Mapper 的簡單原理,然后使用最簡單的代碼來實(shí)現(xiàn)這個過程。感興趣的小伙伴們可以參考一下
    2018-10-10
  • springboot整合mybatis-plus 實(shí)現(xiàn)分頁查詢功能

    springboot整合mybatis-plus 實(shí)現(xiàn)分頁查詢功能

    這篇文章主要介紹了springboot整合mybatis-plus 實(shí)現(xiàn)分頁查詢功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot項(xiàng)目集成Smart-Doc的實(shí)戰(zhàn)指南

    SpringBoot項(xiàng)目集成Smart-Doc的實(shí)戰(zhàn)指南

    Smart-Doc是一款強(qiáng)大的基于Java的API文檔生成工具,它通過對接口源代碼進(jìn)行分析來生成全面而準(zhǔn)確的文檔,完全不需要對代碼進(jìn)行任何注入,下面我們看看如何在SpringBoot項(xiàng)目中集成Smart-Doc吧
    2025-10-10
  • Spring @Conditional注解從源碼層講解

    Spring @Conditional注解從源碼層講解

    @Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件給容器注冊bean,這篇文章主要介紹了Spring @Conditional注解示例詳細(xì)講解,需要的朋友可以參考下
    2023-01-01
  • Java基于UDP協(xié)議的聊天室功能

    Java基于UDP協(xié)議的聊天室功能

    這篇文章主要為大家詳細(xì)介紹了Java基于UDP協(xié)議的聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java詳細(xì)解析==和equals的區(qū)別

    Java詳細(xì)解析==和equals的區(qū)別

    這篇文章主要介紹了Java中==和equals()的區(qū)別,,==可以使用在基本數(shù)據(jù)類型變量和引用數(shù)據(jù)類型變量中,equals()是方法,只能用于引用數(shù)據(jù)類型,需要的朋友可以參考下
    2022-04-04
  • mybatis中的緩存機(jī)制

    mybatis中的緩存機(jī)制

    這篇文章主要介紹了mybatis中的緩存機(jī)制用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • springboot整合knife4j全過程

    springboot整合knife4j全過程

    這篇文章主要介紹了springboot整合knife4j全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot返回Json對象報錯(返回對象為空{(diào)})

    SpringBoot返回Json對象報錯(返回對象為空{(diào)})

    本文主要介紹介紹了SpringBoot返回Json對象報錯(返回對象為空{(diào)}),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • java Future 接口使用方法詳解

    java Future 接口使用方法詳解

    這篇文章主要介紹了java Future 接口使用方法詳解,F(xiàn)uture接口是Java線程Future模式的實(shí)現(xiàn),可以來進(jìn)行異步計算的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評論

黄陵县| 汤阴县| 平陆县| 白城市| 湘阴县| 中山市| 葵青区| 岚皋县| 赤壁市| 普格县| 章丘市| 岫岩| 碌曲县| 天全县| 尼玛县| 蓬莱市| 兴城市| 江川县| 海盐县| 吴江市| 双桥区| 林芝县| 和田市| 客服| 伊金霍洛旗| 昂仁县| 牙克石市| 滨州市| 将乐县| 扶沟县| 乌海市| 巫溪县| 溧水县| 卫辉市| 子长县| 扬中市| 克拉玛依市| 庆阳市| 汨罗市| 屏东市| 惠安县|