Mybatis-plus更新字段為null兩種常用方法及優(yōu)化
前言
更新時,把某些字段的值更新為null,但是目前mybatis-plus的update/updateById會忽略實體類中為null的字段,導(dǎo)致這些字段沒有更新還是原來的值。
網(wǎng)上比較常用的有兩種:
1、在實體類的屬性上增加注解:@TableField(updateStrategy = FieldStrategy.IGNORED)
/** * 手機(jī)號 **/ @TableField(updateStrategy = FieldStrategy.IGNORED) private String phone;
缺點(diǎn):當(dāng)在其它接口更新別的字段時,本來沒有想更新這個字段,但是也會把這個字段更新為null。
2、使用LambdaUpdateWrapper的set更新
// set更新 LambdaUpdateWrapper<UserEntity> updateWrapper = Wrappers.lambdaUpdate(); updateWrapper.set(UserEntity::getPhone, null); updateWrapper.eq(UserEntity::getUserId, "0001"); userMapper.update(null, updateWrapper);
缺點(diǎn):需要一個一個屬性set,比較麻煩。我平常使用的都是從DTO直接copy到Entity里面,要是updateWrapper.set的話比較繁瑣,而且有的值為null時不更新。
優(yōu)化:
還是使用LambdaUpdateWrapper的set更新,方法update(entity, updateWrapper)當(dāng)?shù)谝粋€參數(shù)實體類entity不為null時,其中entity中為null的屬性不會更新,不為null的會更新, updateWrapper.set()是不論是否為null都更新。
既可以攜程:
LambdaUpdateWrapper<UserEntity> updateWrapper = Wrappers.lambdaUpdate(); if (StringUtils.isEmpty(phone)) { // 這個值為null,才set,不然sql里面會兩次賦值,執(zhí)行sql時報錯 updateWrapper.set(UserEntity::getPhone, null); } updateWrapper.eq(UserEntity::getUserId, "0001"); UserEntity entity = new UserEntity(); entity.setName("張三"); entity.setAge(null); userMapper.update(null, updateWrapper);
說明:根據(jù)userId更新,name為張三,phone為null,而age不更新。
SQL:
update user set name = '張三', phone = null where user_id = '0001'
結(jié)論:使用update(entity, updateWrapper)更新
屬性為null不更新,使用entity保存;若屬性為null時更新表中字段為null,則用updateWrapper.set()保存數(shù)據(jù),set前需要判斷這個屬性的值為null。
總結(jié)
到此這篇關(guān)于Mybatis-plus更新字段為null兩種常用方法及優(yōu)化的文章就介紹到這了,更多相關(guān)Mybatis-plus更新字段為null內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA中通過Redis實現(xiàn)延時任務(wù)demo實例
Redis在2.0版本時引入了發(fā)布訂閱(pub/sub)功能,在發(fā)布訂閱中有一個channel(頻道),與消息隊列中的topic(主題)類似,可以通過redis的發(fā)布訂閱者模式實現(xiàn)延時任務(wù)功能,實例中會議室預(yù)約系統(tǒng),用戶預(yù)約管理員審核后生效,如未審批,需要自動變超期未處理,使用延時任務(wù)2024-08-08java的poi技術(shù)讀取和導(dǎo)入Excel實例
本篇文章主要介紹了java的poi技術(shù)讀取和導(dǎo)入Excel實例,報表輸出是Java應(yīng)用開發(fā)中經(jīng)常涉及的內(nèi)容,有需要的可以了解一下。2016-11-11Spring配置文件解析之BeanDefinitionDocumentReader詳解
這篇文章主要介紹了Spring配置文件解析之BeanDefinitionDocumentReader詳解,Spring的xml配置文件解析成Document對象,接下來的解析處理工作是在BeanDefinitionDocumentReader中對Document對象進(jìn)行解析,需要的朋友可以參考下2024-02-02SpringBoot使用Spring-Data-Jpa實現(xiàn)CRUD操作
這篇文章主要為大家詳細(xì)介紹了SpringBoot使用Spring-Data-Jpa實現(xiàn)CRUD操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08Spring AOP使用@Aspect注解 面向切面實現(xiàn)日志橫切的操作
這篇文章主要介紹了Spring AOP使用@Aspect注解 面向切面實現(xiàn)日志橫切的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06