解決mybatisPlus 中的field-strategy配置失效問題
場景:
前端修改給後臺傳遞瞭幾個空字符串。後臺使用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。
代碼:
Wrapper<StuApplyInfoEntity> updateWrapper = new UpdateWrapper<>(); ((UpdateWrapper) updateWrapper).set(saveApply.getApplyTeacher() == null, "apply_teacher", null);
實際項目解決方法示例二
需求:state字段所有值都更新和插入。
困難:因為全局字段策略為NOT_NULL,所以默認不會更新null值進去。
解決方法:
在entity中設置state設置註解@TableField(),配置FieldStrategy為IGNORED。意思是”忽略判斷”,所有值都更新和插入。
代碼:
@TableField(strategy = FieldStrategy.IGNORED, el = "state, jdbcType=VARCHAR") private String state;
field-strategy字段更新插入策略介紹
枚舉類FieldStrategy源碼
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: 默認的,一般隻用於註解裡。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- 關於Mybatis-Plus Update更新策略問題
- 解決mybatisPlus null 值更新的問題
- Mybatis-Plus中update()和updateById()將字段更新為null
- Mybatis-Plus使用updateById()、update()將字段更新為null
- 在MyBatisPlus中使用@TableField完成字段自動填充的操作