Mybatis-plus如何更新Null字段詳解
本文介紹【Mybatis-plus】updateById()方法不能更新字段為null的原因及解決辦法。
一、問題描述
在日常項目開發(fā)過程中,經(jīng)常會使用Mybatis-plus的updateById()方法,快速將接收道德參數(shù)或者查詢結(jié)果中原本不為null的字段更新為null,并且該字段在數(shù)據(jù)庫中可為null,這個時候使用updateById()并不能實現(xiàn)這個操作,不會報錯,但是對應的字段并沒有更新為null。
二、問題原因
Mybatis-plus的字段策略(FieldStrategy)有三種策略:
IGNORED:0 忽略
NOT_NULL:1 非 NULL,默認策略
NOT_EMPTY:2 非空
而默認的更新策略是NOT_NULL:非NULL; 即通過接口更新數(shù)據(jù)時數(shù)據(jù)為NULL值時將不更新進數(shù)據(jù)庫。
三、解決方案
1.直接在mapper.xml中寫sql:
update table A set 字段a = null where 字段b = 條件
2.設置全局的FieldStrategy
在配置文件中修改全局策略
properties文件格式:
mybatis-plus.global-config.db-config.field-strategy=ignored #yml文件格式: mybatis-plus: global-config: #字段策略 0:"忽略判斷",1:"非 NULL 判斷",2:"非空判斷" field-strategy: 0
這樣做是進行全局配置,在更新時會忽略對所有字段的判斷。但是如果一些字段沒有傳值過來,會被直接更新為null,可能會影響其它業(yè)務數(shù)據(jù)的準確性。不推薦使用此方法。
3.對指定的字段單獨設置field-strategy
根據(jù)具體情況,在需要更新的字段中調(diào)整驗證注解,如驗非空:
@TableField(strategy=FieldStrategy.NOT_EMPTY)
這樣的話,我們只需要在需要更新為null的字段上,設置忽略策略,如下:
@TableField(updateStrategy = FieldStrategy.IGNORED) private String updateBy;
設置好了之后,在更新時就可以直接使用mybatis-plus中的updateById方法就可以成功將字段更新為null,但是這樣做存在一定的弊端,就是當需要這樣處理的字段比較多時,要給對應的字段都要添加上這樣的注解。
4.使用update方法結(jié)合UpdateWrapper方式更新
User user=userService.lambdaQuery().eq(User::getUserId,userId).one(); if(user!=null){ userService.update(user,new UpdateWrapper<User>().lambda() .set(User::getUserName,null) .eq(User::getUserId,user.getUserId())); }
這種方法不會影響其它方法,不需要修改全局配置,也不需要在字段上單獨加注解,只需要在使用的時候設置一下要修改的字段為null就可以更新成功,推薦使用方法4。
總結(jié)
到此這篇關(guān)于Mybatis-plus如何更新Null字段的文章就介紹到這了,更多相關(guān)Mybatis-plus更新Null字段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot 接收List 入?yún)⒌膸追N方法
本文主要介紹了springboot 接收List 入?yún)⒌膸追N方法,本文主要介紹了7種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-03-03Spring?Data?JPA關(guān)系映射@OneToOne實例解析
這篇文章主要為大家介紹了Spring?Data?JPA關(guān)系映射@OneToOne實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08注意Java中?new?BigDecimal(double?val)?的使用
這篇文章主要介紹了注意Java中?new?BigDecimal(double?val)?的使用,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-07-07SpringBoot2零基礎到精通之自動配置底層分析及小技巧
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學習自動配置的底層分析與一些開發(fā)中的小技巧2022-03-03使用IDEA創(chuàng)建Servlet程序的詳細步驟
在學習servlet過程中,參考的教程是用eclipse完成的,而我在練習的過程中是使用IDEA的,在創(chuàng)建servlet程序時遇到了挺多困難,在此記錄一下如何用IDEA完整創(chuàng)建一個servlet程序,感興趣的朋友一起看看吧2024-08-08SpringMVC 跨重定向請求傳遞數(shù)據(jù)的方法實現(xiàn)
這篇文章主要介紹了SpringMVC 跨重定向請求傳遞數(shù)據(jù)的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06