国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Mybatis-Plus更新對象時字段更新為空值的策略

2023-07-31 16:47 作者:凱小吧  | 我要投稿

測試提了個很突然的bug,將某些字段值置為 空/null,提交保存,再次查看還是保留原來的值,第一反應不應該,基本操作系統(tǒng)用的是mybatis-plus,要錯錯就早出錯的怎么會等到現(xiàn)在呢?奇怪了!發(fā)現(xiàn)了,就看看吧!

通過排查代碼是沒什么問題!

那就是肯能是mybatis-plus有什么特殊的地方

通過了解 com.baomidou.mybatisplus.annotation.TableField

//version 3.4.1
public @interface TableField {

? ?FieldStrategy insertStrategy() default FieldStrategy.DEFAULT;

? ?FieldStrategy updateStrategy() default FieldStrategy.DEFAULT;

? ?FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;

? ?FieldFill fill() default FieldFill.DEFAULT;
}

有幾個默認執(zhí)行策略

FieldFill

值描述DEFAULT默認不處理INSERT插入時填充字段UPDATE更新時填充字段INSERT_UPDATE插入和更新時填充字段

FieldStrategy

值描述IGNORED忽略該字段,不管是插入還是更新操作,都不會涉及到該字段NOT_NULL當進行插入和更新操作時,如果該字段為 null,則會拋出異常NOT_EMPTY當進行插入和更新操作時,如果該字段為 null 或者空字符串,則會拋出異常DEFAULT當進行插入操作時,如果該字段為 null,則使用數(shù)據(jù)庫中的默認值(如數(shù)據(jù)庫字段設置了默認值);當進行更新操作時,如果該字段為 null,則保持原有值不變NEVER永遠不處理該字段,無論是插入還是更新操作,都不會涉及到該字段

注意

3.1.2 版本后 strategy 方法被棄用,更新為 insertStrategy、updateStrategywhereStrategy

/** * 字段驗證策略 * <p>默認追隨全局配置</p> * * @deprecated 3.1.2 , to use {@link #insertStrategy} and {@link #updateStrategy} and {@link #whereStrategy} */ @Deprecated FieldStrategy strategy() default FieldStrategy.DEFAULT;

通過上面可以參照以下方案處理 mp 執(zhí)行更新操作空值的情況

方案一

單字段配置

@TableField(updateStrategy = FieldStrategy.IGNORED)
private String nickName;

單個字段比較靈活,但需要制定的很多,一般結合默認配置使用

方案二

全局配置

# yml 配置:
mybatis-plus:
?global-config:
? ?db-config:
? ? ?update-strategy: IGNORED

全局性配置會對所有的字段都忽略判斷,如果有特殊字段處理,可以單獨配置,修改字段的策略。

方案三

UpdateWrapper (3.x)

/**
* 根據(jù) whereEntity 條件,更新記錄
*
* @param entity ? ? ? ?實體對象 (set 條件值,可以為 null)
* @param updateWrapper 實體對象封裝操作類(可以為 null,里面的 entity 用于生成 where 語句)
*/
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
User user = new User("id", "")
mapper.update(
? Wrappers.<User>lambdaUpdate()
? ? ? ? ? .set(User::getNickName, user.getNickName())
? ? ? ? ? .eq(User::getId, user.getId())
);
跟新指定字段

一個小建議

@Tablefield 注解中有屬性:fill ,字段自動填充策略

正常情況下每一張表格都有幾個固定的值,如create_time (創(chuàng)建時間)和 update_time(更新時間),在處理這些數(shù)據(jù)的時候,每次都要手動去設置比較煩

就可以采取fill 自動填充

@TableField(value = "create_time",fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
private Date updateTime;


Mybatis-Plus更新對象時字段更新為空值的策略的評論 (共 條)

分享到微博請遵守國家法律
抚州市| 宝山区| 德保县| 新化县| 垦利县| 政和县| 吉首市| 斗六市| 云阳县| 南丹县| 孝义市| 连山| 平昌县| 公安县| 佛教| 武城县| 浙江省| 读书| 揭阳市| 胶南市| 五河县| 隆林| 温州市| 台北县| 山阴县| 通化市| 高安市| 永兴县| 贵州省| 九江县| 饶平县| 库伦旗| 卓资县| 岗巴县| 大理市| 钟山县| 恭城| 苏州市| 海安县| 南溪县| 中方县|