解決mybatisPlus 中的field-strategy配置失效問(wèn)題
場(chǎng)景:
前端修改給后臺(tái)傳遞了幾個(gè)空字符串。后臺(tái)使用mybatisPlus 作為dao層。結(jié)果發(fā)現(xiàn)空字符串也更新了,mybatisPlus 的field-strategy設(shè)置為 2 非空;
解決思路:
查看mybatisPlus 版本差異。發(fā)現(xiàn)field-strategy已經(jīng)棄用,從3.1.2 后使用下面這幾個(gè)配置對(duì)非空進(jìn)行判斷
insertStrategy
類(lèi)型:com.baomidou.mybatisplus.annotation.FieldStrategy
默認(rèn)值:NOT_NULL
字段驗(yàn)證策略之 insert
說(shuō)明:
在 insert 的時(shí)候的字段驗(yàn)證策略 目前沒(méi)有默認(rèn)值,等 {@link #fieldStrategy} 完全去除掉,會(huì)給個(gè)默認(rèn)值 NOT_NULL 沒(méi)配則按 {@link #fieldStrategy} 為準(zhǔn)
#updateStrategy
類(lèi)型:com.baomidou.mybatisplus.annotation.FieldStrategy
默認(rèn)值:NOT_NULL
字段驗(yàn)證策略之 update
說(shuō)明:
在 update 的時(shí)候的字段驗(yàn)證策略 目前沒(méi)有默認(rèn)值,等 {@link #fieldStrategy} 完全去除掉,會(huì)給個(gè)默認(rèn)值 NOT_NULL 沒(méi)配則按 {@link #fieldStrategy} 為準(zhǔn)
#selectStrategy(since 3.1.2)
類(lèi)型:com.baomidou.mybatisplus.annotation.FieldStrategy
默認(rèn)值:NOT_NULL
字段驗(yàn)證策略之 select
說(shuō)明:
在 select 的時(shí)候的字段驗(yàn)證策略: wrapper 根據(jù)內(nèi)部 entity 生成的 where 條件 目前沒(méi)有默認(rèn)值,等 {@link #fieldStrategy} 完全去除掉,會(huì)給個(gè)默認(rèn)值 NOT_NULL 沒(méi)配則按 {@link #fieldStrategy} 為準(zhǔn)
補(bǔ)充:mybatisPlus中的field-strategy(字段更新插入策略):null值插入和更新問(wèn)題
mybatisPlus中null值插入和更新問(wèn)題
配置mybatisPlus的項(xiàng)目中,默認(rèn)進(jìn)行了不是全量更新的策略:NOT_NULL。
即在利用updateWrapper更新時(shí),會(huì)做null判斷,如果傳參數(shù)為null,就不會(huì)更新。
在實(shí)際項(xiàng)目需求中可能配置全局更新策略為:NOT_NULL,但是某些場(chǎng)景更新時(shí)需要插入這個(gè)null值進(jìn)行更新。如何解決這個(gè)問(wèn)題呢?
實(shí)際項(xiàng)目解決方法示例一
實(shí)際項(xiàng)目中,配置文件中配置全局字段策略為NOT_NULL。

需求:實(shí)際項(xiàng)目中,apply_teacher字段當(dāng)它為null時(shí)需要把null值更新進(jìn)去。
困難:因?yàn)槿肿侄尾呗詾镹OT_NULL,所以默認(rèn)不會(huì)更新null值進(jìn)去。
解決方法:
利用條件構(gòu)造器當(dāng)值為null時(shí)set為null。
代碼:
Wrapper<StuApplyInfoEntity> updateWrapper = new UpdateWrapper<>(); ((UpdateWrapper) updateWrapper).set(saveApply.getApplyTeacher() == null, "apply_teacher", null);
實(shí)際項(xiàng)目解決方法示例二
需求:state字段所有值都更新和插入。
困難:因?yàn)槿肿侄尾呗詾镹OT_NULL,所以默認(rèn)不會(huì)更新null值進(jìn)去。
解決方法:
在entity中設(shè)置state設(shè)置注解@TableField(),配置FieldStrategy為IGNORED。意思是"忽略判斷",所有值都更新和插入。
代碼:
@TableField(strategy = FieldStrategy.IGNORED, el = "state, jdbcType=VARCHAR") private String state;
field-strategy字段更新插入策略介紹
枚舉類(lèi)FieldStrategy源碼
public enum FieldStrategy {
/**
* 忽略判斷
*/
IGNORED,
/**
* 非NULL判斷
*/
NOT_NULL,
/**
* 非空判斷
*/
NOT_EMPTY,
/**
* 默認(rèn)的,一般只用于注解里
* <p>1. 在全局里代表 NOT_NULL</p>
* <p>2. 在注解里代表 跟隨全局</p>
*/
DEFAULT
}
枚舉類(lèi)字段簡(jiǎn)介
IGNORED:“忽略判斷”,所有字段都更新和插入。
NOT_NULL:“非 NULL 判斷”,只更新和插入非NULL值。
NOT_EMPTY:“非空判斷”, 只更新和插入非NULL值且非空字符串。
DEFAULT: 默認(rèn)的,一般只用于注解里。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- MybatisPlusInterceptor依賴(lài)變紅如何解決,無(wú)法識(shí)別問(wèn)題
- mybatisPlus配置邏輯字段不生效問(wèn)題解決
- 關(guān)于mybatisPlus?yml配置方式
- 關(guān)于MybatisPlus配置雙數(shù)據(jù)庫(kù)驅(qū)動(dòng)連接數(shù)據(jù)庫(kù)問(wèn)題
- idea的easyCode的 MybatisPlus模板的配置詳解
- SpringBoot整合MyBatisPlus配置動(dòng)態(tài)數(shù)據(jù)源的方法
- MybatisPlus常用依賴(lài)、配置、插件方式
相關(guān)文章
Spring MVC接受表單自動(dòng)封裝特性實(shí)例解析
這篇文章主要介紹了Spring MVC接受表單自動(dòng)封裝特性實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Netty分布式客戶(hù)端處理接入事件handle源碼解析
這篇文章主要為大家介紹了Netty源碼分析客戶(hù)端流程處理接入事件handle創(chuàng)建,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
學(xué)生視角手把手帶你寫(xiě)Java?線程池初版
作者是一個(gè)來(lái)自河源的大三在校生,以下筆記都是作者自學(xué)之路的一些淺薄經(jīng)驗(yàn),如有錯(cuò)誤請(qǐng)指正,將來(lái)會(huì)不斷的完善筆記,幫助更多的Java愛(ài)好者入門(mén)2022-03-03
Spring線程池ThreadPoolTaskExecutor配置詳情
本篇文章主要介紹了Spring線程池ThreadPoolTaskExecutor配置詳情,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Java實(shí)現(xiàn)簡(jiǎn)單LRU緩存機(jī)制的方法
這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單LRU緩存機(jī)制的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Spring Boot 2.7.6整合redis與低版本的區(qū)別
這篇文章主要介紹了Spring Boot 2.7.6整合redis與低版本的區(qū)別,文中補(bǔ)充介紹了SpringBoot各個(gè)版本使用Redis之間的區(qū)別實(shí)例講解,需要的朋友可以參考下2023-02-02
SpringBoot自定義轉(zhuǎn)換器應(yīng)用實(shí)例講解
SpringBoot在響應(yīng)客戶(hù)端請(qǐng)求時(shí),將提交的數(shù)據(jù)封裝成對(duì)象時(shí),使用了內(nèi)置的轉(zhuǎn)換器,SpringBoot 也支持自定義轉(zhuǎn)換器,這個(gè)內(nèi)置轉(zhuǎn)換器在 debug的時(shí)候,可以看到,提供了124個(gè)內(nèi)置轉(zhuǎn)換器2022-08-08

