最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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更新對象時字段更新為空值的策略的評論 (共 條)

分享到微博請遵守國家法律
宁陕县| 大安市| 南安市| 噶尔县| 洞口县| 威海市| 南通市| 南汇区| 阜新| 凤阳县| 高雄市| 丰顺县| 如皋市| 靖远县| 浪卡子县| 敦煌市| 治多县| 兴城市| 日喀则市| 潜江市| 江孜县| 新竹县| 沂源县| 杭州市| 安义县| 抚州市| 永福县| 巨野县| 从化市| 仁怀市| 大理市| 通山县| 孝昌县| 塔城市| 贵德县| 南和县| 田东县| 民丰县| 镇巴县| 昌乐县| 平和县|