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

由圖中可以看到,更新策略支持5種類(lèi)型:默認(rèn)是追隨全局配置globalConfig,
mybatis-plus:
......
configuration:
......
global-config:
......
db-config:
......
如果沒(méi)有進(jìn)行全局配置的話,會(huì)采用NOT_NULL的更新策略(sql上會(huì)加上不為NULL的判斷)。
解決辦法
1.設(shè)置全局的field-strategy(默認(rèn)追隨全局配置)
yml文件配置如下:
mybatis-plus:
global-config:
db-config:
update-strategy: ignored
這樣做是全局性配置,會(huì)對(duì)所有的字段都忽略判斷,如果一些字段不想要修改,但是傳值的時(shí)候沒(méi)有傳遞過(guò)來(lái),就會(huì)被更新為null,可能會(huì)影響其他業(yè)務(wù)數(shù)據(jù)的正確性。
2.在屬性上添加單獨(dú)的更新策略
/**
* 申報(bào)組織
*/
@ApiModelProperty("申報(bào)組織")
@ExcelProperty(value = "申報(bào)組織", converter = DeptConverter.class)
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String reportingOrganization;
在更新代碼中,我們直接使用mybatis-plus中的updateById方法便可以更新成功
3.使用UpdateWrapper方式更新
在mybatis-plus中,除了updateById方法,還提供了一個(gè)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;
}
這種方式對(duì)其他方法沒(méi)有影響,不需要修改全局配置,也不需要在字段上單獨(dú)加注解,推薦使用該方式。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java基礎(chǔ)之創(chuàng)建虛擬機(jī)對(duì)象的過(guò)程詳細(xì)總結(jié)
本文基于虛擬機(jī)HotSpot和常用的內(nèi)存區(qū)域Java堆深入對(duì)象分配、布局和訪問(wèn)的全過(guò)程,文中有非常詳細(xì)的圖文解說(shuō),對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
java引用類(lèi)型WeakReference用法及原理詳解
Java弱引用(WeakReference)是一種特殊的引用類(lèi)型,當(dāng)垃圾回收器運(yùn)行時(shí),無(wú)論內(nèi)存是否充足,只要發(fā)現(xiàn)對(duì)象僅被弱引用指向,就會(huì)立即回收該對(duì)象,這篇文章主要介紹了java引用類(lèi)型WeakReference用法及原理的相關(guān)資料,需要的朋友可以參考下2026-01-01
Java開(kāi)發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能
這篇文章主要介紹了Java開(kāi)發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能,結(jié)合實(shí)例形式分析了spring security在非JDBC環(huán)境下的自定義認(rèn)證服務(wù)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-11-11
Java函數(shù)式編程之通過(guò)行為參數(shù)化傳遞代碼
行為參數(shù)化就是可以幫助你處理頻繁變更的需求的一種軟件開(kāi)發(fā)模式,這篇文章將給大家詳細(xì)的介紹一下Java函數(shù)式編程之行為參數(shù)化傳遞代碼,感興趣的同學(xué)可以參考閱讀下2023-08-08

