解決Mybatis-Plus更新方法不更新NULL字段的問題
Mybatis-Plus更新方法不更新NULL字段
使用Mybatis-Plus中提供的updateById方法時遇到的一些問題,分享出來,避免大家踩坑,想將查詢結(jié)果中某個字段更新為null,但結(jié)果該字段更新失敗,執(zhí)行更新方法后還是查詢的原來的結(jié)果,沒有變。
查詢Mybatis-Plus的FieldStrategy:

由圖中可以看到,更新策略支持5種類型:默認(rèn)是追隨全局配置globalConfig,
mybatis-plus:
......
configuration:
......
global-config:
......
db-config:
......
如果沒有進(jìn)行全局配置的話,會采用NOT_NULL的更新策略(sql上會加上不為NULL的判斷)。
解決辦法
1.設(shè)置全局的field-strategy(默認(rèn)追隨全局配置)
yml文件配置如下:
mybatis-plus:
global-config:
db-config:
update-strategy: ignored
這樣做是全局性配置,會對所有的字段都忽略判斷,如果一些字段不想要修改,但是傳值的時候沒有傳遞過來,就會被更新為null,可能會影響其他業(yè)務(wù)數(shù)據(jù)的正確性。
2.在屬性上添加單獨的更新策略
/**
* 申報組織
*/
@ApiModelProperty("申報組織")
@ExcelProperty(value = "申報組織", converter = DeptConverter.class)
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String reportingOrganization;
在更新代碼中,我們直接使用mybatis-plus中的updateById方法便可以更新成功
3.使用UpdateWrapper方式更新
在mybatis-plus中,除了updateById方法,還提供了一個update方法
// 根據(jù) whereWrapper 條件,更新記錄 boolean update(T updateEntity, Wrapper<T> whereWrapper);
直接使用update方法也可以將字段設(shè)置為null,代碼如下:
/**
* update更新字段為null
* @param id
* @return
**/
@Override
public boolean updatePatentById(Integer id) {
Patent patent = Optional.ofNullable(patentMapper.selectById(id)).orElseThrow(RuntimeException::new);
LambdaUpdateWrapper<Patent> Wrapper = new LambdaUpdateWrapper<>();
Wrapper.set(Patent::getCreateTime,null);
Wrapper.set(Patent::getCreateUser,123);
Wrapper.eq(Patent::getId,patent.getId());
int i = patentMapper.update(patent, Wrapper);
return i==1;
}
這種方式對其他方法沒有影響,不需要修改全局配置,也不需要在字段上單獨加注解,推薦使用該方式。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)HTML轉(zhuǎn)PDF及合并PDF文件詳細(xì)教程
之前在工作中遇到過一個需求,是將用戶填寫的申報,由固定模板的來生成pdf,后來想到先把內(nèi)容生成html,然后再把html格式的內(nèi)容轉(zhuǎn)換成pdf,這篇文章主要介紹了Java實現(xiàn)HTML轉(zhuǎn)PDF及合并PDF文件的相關(guān)資料,需要的朋友可以參考下2025-07-07
Spring中基于Java的配置@Configuration和@Bean用法詳解
這篇文章主要介紹了Spring中基于Java的配置@Configuration和@Bean用法詳解,Spring中為了減少xml中配置,可以聲明一個配置類(例如SpringConfig)來對bean進(jìn)行配置。,需要的朋友可以參考下2019-06-06
一篇文章了解Jackson注解@JsonFormat及失效解決辦法
這篇文章主要給大家介紹了關(guān)于如何通過一篇文章了解Jackson注解@JsonFormat及失效解決辦法的相關(guān)資料,@JsonFormat注解是一個時間格式化注解,用于格式化時間,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11

