場景:
前端修改給后臺傳遞了幾個空字符串。后臺使用mybatisplus 作為dao層。結果發現空字符串也更新了,mybatisplus 的field-strategy設置為 2 非空;
解決思路:
查看mybatisplus 版本差異。發現field-strategy已經棄用,從3.1.2 后使用下面這幾個配置對非空進行判斷
insertstrategy
類型:com.baomidou.mybatisplus.annotation.fieldstrategy
默認值:not_null
字段驗證策略之 insert
說明:
在 insert 的時候的字段驗證策略 目前沒有默認值,等 {@link #fieldstrategy} 完全去除掉,會給個默認值 not_null 沒配則按 {@link #fieldstrategy} 為準
#updatestrategy
類型:com.baomidou.mybatisplus.annotation.fieldstrategy
默認值:not_null
字段驗證策略之 update
說明:
在 update 的時候的字段驗證策略 目前沒有默認值,等 {@link #fieldstrategy} 完全去除掉,會給個默認值 not_null 沒配則按 {@link #fieldstrategy} 為準
#selectstrategy(since 3.1.2)
類型:com.baomidou.mybatisplus.annotation.fieldstrategy
默認值:not_null
字段驗證策略之 select
說明:
在 select 的時候的字段驗證策略: wrapper 根據內部 entity 生成的 where 條件 目前沒有默認值,等 {@link #fieldstrategy} 完全去除掉,會給個默認值 not_null 沒配則按 {@link #fieldstrategy} 為準
補充:mybatisplus中的field-strategy(字段更新插入策略):null值插入和更新問題
mybatisplus中null值插入和更新問題
配置mybatisplus的項目中,默認進行了不是全量更新的策略:not_null。
即在利用updatewrapper更新時,會做null判斷,如果傳參數為null,就不會更新。
在實際項目需求中可能配置全局更新策略為:not_null,但是某些場景更新時需要插入這個null值進行更新。如何解決這個問題呢?
實際項目解決方法示例一
實際項目中,配置文件中配置全局字段策略為not_null。
需求:實際項目中,apply_teacher字段當它為null時需要把null值更新進去。
困難:因為全局字段策略為not_null,所以默認不會更新null值進去。
解決方法:
利用條件構造器當值為null時set為null。
代碼:
1
2
|
wrapper<stuapplyinfoentity> updatewrapper = new updatewrapper<>(); ((updatewrapper) updatewrapper).set(saveapply.getapplyteacher() == null , "apply_teacher" , null ); |
實際項目解決方法示例二
需求:state字段所有值都更新和插入。
困難:因為全局字段策略為not_null,所以默認不會更新null值進去。
解決方法:
在entity中設置state設置注解@tablefield(),配置fieldstrategy為ignored。意思是"忽略判斷",所有值都更新和插入。
代碼:
1
2
|
@tablefield (strategy = fieldstrategy.ignored, el = "state, jdbctype=varchar" ) private string state; |
field-strategy字段更新插入策略介紹
枚舉類fieldstrategy源碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public enum fieldstrategy { /** * 忽略判斷 */ ignored, /** * 非null判斷 */ not_null, /** * 非空判斷 */ not_empty, /** * 默認的,一般只用于注解里 * <p>1. 在全局里代表 not_null</p> * <p>2. 在注解里代表 跟隨全局</p> */ default } |
枚舉類字段簡介
ignored:“忽略判斷”,所有字段都更新和插入。
not_null:“非 null 判斷”,只更新和插入非null值。
not_empty:“非空判斷”, 只更新和插入非null值且非空字符串。
default: 默認的,一般只用于注解里。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。如有錯誤或未考慮完全的地方,望不吝賜教。
原文鏈接:https://www.jianshu.com/p/aad7e0025f5a