mybatisPlus?FieldStrategy?策略作用小結(jié)
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)策略,通常等價(jià)于
NOT_NULL(取決于 MyBatis-Plus 版本)。 - 場景:使用全局配置的默認(rèn)行為。
5.NEVER
- 作用:永遠(yuǎn)不參與 SQL 操作,無論值是什么。
- 場景:字段僅用于業(yè)務(wù)邏輯,不與數(shù)據(jù)庫交互(如臨時(shí)計(jì)算字段)。
二、不同方法(insert/update/where)的策略差異
1.insertStrategy(插入時(shí))
- 影響范圍:
save()、saveBatch()等插入方法。 - 示例:
@TableField(insertStrategy = FieldStrategy.NOT_NULL) private String username; // 插入時(shí)忽略 null 值
2.updateStrategy(更新時(shí))
- 影響范圍:
updateById()、saveOrUpdate()、update(entity, wrapper)等更新方法。 - 示例:
@TableField(updateStrategy = FieldStrategy.IGNORED) private String email; // 更新時(shí)允許將 email 設(shè)置為 null
3.whereStrategy(查詢條件時(shí))
- 影響范圍:
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. 插入時(shí)自動填充默認(rèn)值
@TableField(insertStrategy = FieldStrategy.NOT_NULL) private Integer status = 1; // 插入時(shí)若未設(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)文章
IntelliJ?IDEA的代碼擱置功能實(shí)現(xiàn)
本文主要介紹了IntelliJ?IDEA的代碼擱置功能實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Intellij IDEA解析jacoco結(jié)果文件的方法
這篇文章主要介紹了Intellij IDEA解析jacoco結(jié)果文件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
java中JsonObject與JsonArray轉(zhuǎn)換方法實(shí)例
在項(xiàng)目日常開發(fā)中常常會遇到JSONArray和JSONObject的轉(zhuǎn)換,很多公司剛?cè)肼毜男∶刃聲ㄔ谶@里,下面這篇文章主要給大家介紹了關(guān)于java中JsonObject與JsonArray轉(zhuǎn)換方法的相關(guān)資料,需要的朋友可以參考下2023-04-04

