Mybatis?saveAndUpdate空值不更新問題及解決
Mybatis saveAndUpdate空值不更新
@TableField注解有三種更新策略
public enum FieldStrategy { ? ? IGNORED,//參數(shù)為空也更新到數(shù)據(jù)庫 ? ? NOT_NULL,//參數(shù)不能為null ? ? NOT_EMPTY;//參數(shù)不能為空 ? ? private FieldStrategy() { ? ? } }
如下,如果想要name字段為空或者null時(shí)也更新數(shù)據(jù)庫數(shù)據(jù),注解上加 strategy = FieldStrategy.IGNORED
@TableField(strategy = FieldStrategy.IGNORED,value="name") ? ? private String name;
Mybatis使用update更新值為null時(shí)不生效
純屬記錄使用過程中遇到的問題更新null值沒有生效的問題解決辦法,內(nèi)容較為簡單。
出現(xiàn)的問題
前端修改數(shù)據(jù)時(shí)把屬性內(nèi)容刪除然后進(jìn)行保存,默認(rèn)傳的null,后端更新時(shí)屬性值為null,然后調(diào)用updateById進(jìn)行更新時(shí)發(fā)現(xiàn)該屬性還是原來的值:
name:"tt"; //前端頁面把該屬性內(nèi)容進(jìn)行刪除傳給我后端 { name: null } //后端接收到的 name: null //使用該方法進(jìn)行更新 updateById(); //結(jié)果name還是等于更新前的值 name: "tt";
后面百度發(fā)現(xiàn)該update方法不會對屬性null的進(jìn)行更新
原因
mybatis-plus FieldStrategy 有三種策略:
IGNORED
:忽略NOT_NULL
:非 NULL,默認(rèn)策略NOT_EMPTY
:非空
默認(rèn)非空,所有更新時(shí)不生效的問題
解決方法
①設(shè)置全局的field-strategy
這樣全局配置會把所有的屬性都忽略,對于一些不需要改的屬性可能會影響業(yè)務(wù)的準(zhǔn)確性。
②給單獨(dú)的屬性設(shè)置field-strategy
根據(jù)實(shí)際應(yīng)用情況對某些屬性增加該注解來忽略策略
@TableField(strategy=FieldStrategy.IGNORED)
這樣增加該注解的屬性就可以使用updateById()方法進(jìn)行更新null值。
------當(dāng)然還有其他的好的方法也可以去參考
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- mybatis-plus 關(guān)于savebatch,saveorupdatebatch遇到的坑及解決辦法
- Mybatis-Plus使用saveOrUpdate及問題解決方法
- mybatis-plus中l(wèi)ambdaQuery()與lambdaUpdate()比較常見的使用方法總結(jié)
- Mybatis-Plus中updateById方法不能更新空值問題解決
- Mybatis-Plus中update()和updateById()將字段更新為null
- Mybatis-Plus使用updateById()、update()將字段更新為null
- MyBatis update標(biāo)簽詳解
相關(guān)文章
Java基于swing實(shí)現(xiàn)的彈球游戲代碼
這篇文章主要介紹了Java基于swing實(shí)現(xiàn)的彈球游戲代碼,包含了窗體界面設(shè)計(jì)與游戲的邏輯功能處理,具有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11application.yml文件中如何開啟mybatis自動駝峰映射
這篇文章主要介紹了application.yml文件中開啟mybatis自動駝峰映射的方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08為什么wait和notify必須放在synchronized中使用
這篇文章主要介紹了為什么wait和notify必須放在synchronized中使用,文章圍繞主題的相關(guān)問題展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考以參考一下2022-05-05利用微信小程序+JAVA實(shí)現(xiàn)微信支付的全過程
微信支付是一種在線支付解決方案,允許用戶通過微信內(nèi)的支付功能進(jìn)行付款,下面這篇文章主要給大家介紹了關(guān)于利用微信小程序+JAVA實(shí)現(xiàn)微信支付的相關(guān)資料,需要的朋友可以參考下2024-08-08基于java TCP網(wǎng)絡(luò)通信的實(shí)例詳解
本篇文章是對java中TCP網(wǎng)絡(luò)通信的實(shí)例進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05IDEA?一直scanning?files?to?index的四種完美解決方法(VIP典藏版)
這篇文章主要介紹了IDEA?一直scanning?files?to?index的四種完美解決方法(VIP典藏版),推薦第四種方法,第四種方法摸索研究后得出,親測好用,需要的朋友參考下吧2023-10-10Mybatis的SqlRunner執(zhí)行流程實(shí)現(xiàn)
MyBatis提供了一個(gè)用于操作數(shù)據(jù)庫的SqlRunner工具類,對JDBC做了很好的封裝,本文主要介紹了Mybatis的SqlRunner執(zhí)行流程實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10從java源碼分析線程池(池化技術(shù))的實(shí)現(xiàn)原理
這篇文章主要介紹了從java源碼分析線程池(池化技術(shù))的實(shí)現(xiàn)原理,池化技術(shù)是一種編程技巧,當(dāng)程序出現(xiàn)高并發(fā)時(shí),能夠明顯的優(yōu)化程序,降低系統(tǒng)頻繁創(chuàng)建銷毀連接等額外開銷,下文更多的相關(guān)介紹需要的小伙伴可以參考一下2022-04-04一篇文章帶你了解Java Spring基礎(chǔ)與IOC
這篇文章主要介紹了Java Spring基礎(chǔ)與IOC,文中講解的相關(guān)內(nèi)容非常詳細(xì),也運(yùn)用了大量的代碼進(jìn)行講解,感興趣的小伙伴可以參考一下2021-08-08