解決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.在屬性上添加單獨(dú)的更新策略
/**
* 申報組織
*/
@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;
}
這種方式對其他方法沒有影響,不需要修改全局配置,也不需要在字段上單獨(dú)加注解,推薦使用該方式。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC4+MyBatis+SQL Server2014實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離
這篇文章主要介紹了SpringMVC4+MyBatis+SQL Server2014實(shí)現(xiàn)讀寫分離,需要的朋友可以參考下2017-04-04
elasticsearch構(gòu)造Client實(shí)現(xiàn)java客戶端調(diào)用接口示例分析
這篇文章主要為大家介紹了elasticsearch構(gòu)造Client實(shí)現(xiàn)java客戶端調(diào)用接口示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Java利用Spire.PDF for Java實(shí)現(xiàn)在PDF中添加或刪除數(shù)字簽名
在數(shù)字化辦公日益普及的今天,PDF文檔的安全性與真實(shí)性變得尤為重要,本文將深入探討如何在Java環(huán)境中,利用強(qiáng)大的Spire.PDF for Java庫,對PDF文檔進(jìn)行數(shù)字簽名的添加與刪除操作,有需要的可以了解下2025-11-11
java使用TimerTask定時器獲取指定網(wǎng)絡(luò)數(shù)據(jù)
java.util.Timer定時器,實(shí)際上是個線程,定時調(diào)度所擁有的TimerTasks。一個TimerTask實(shí)際上就是一個擁有run方法的類,需要定時執(zhí)行的代碼放到run方法體內(nèi),TimerTask一般是以匿名類的方式創(chuàng)建,下面的就用示例來學(xué)習(xí)他的使用方法2014-01-01
Spring的IOC解決程序耦合的實(shí)現(xiàn)
本文主要介紹了Spring的IOC解決程序耦合的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析
這篇文章主要介紹了Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
Java利用條件運(yùn)算符的嵌套來完成學(xué)習(xí)成績的劃分
這篇文章主要介紹了Java利用條件運(yùn)算符的嵌套來完成學(xué)習(xí)成績的劃分,需要的朋友可以參考下2017-02-02
Java實(shí)戰(zhàn)之實(shí)現(xiàn)文件資料上傳并生成縮略圖
這篇文章主要介紹了通過Java實(shí)現(xiàn)文件資料的上傳并生成一個縮略圖,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴可以了解一下2021-12-12

