MyBatis-Plus更新對象時(shí)將字段值更新為null的四種常見方法
引言
MyBatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具,在簡化開發(fā)、提高效率方面表現(xiàn)非常出色。然而,在使用 MyBatis-Plus 更新對象時(shí),默認(rèn)情況下是不會將字段值更新為 null 的。這是因?yàn)?MyBatis-Plus 使用了非空字段策略(FieldStrategy),默認(rèn)配置為 NOT_NULL,即只更新非空字段。
如果你需要將某些字段的值更新為 null,有幾種方法可以實(shí)現(xiàn)。本文將介紹幾種常見的方法。
方法一:使用 set 方法手動設(shè)置字段為 null
在更新對象時(shí),你可以手動將需要更新為 null 的字段設(shè)置為 null。然后,MyBatis-Plus 會將這些字段包含在更新語句中。
User user = new User(); user.setId(1L); user.setName(null); // 將 name 字段更新為 null userMapper.updateById(user);
方法二:使用 UpdateWrapper 或 LambdaUpdateWrapper
UpdateWrapper
和 LambdaUpdateWrapper
提供了更靈活的更新條件,你可以使用它們來明確指定哪些字段需要更新為 null
。
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id", 1L) .set("name", null); // 將 name 字段更新為 null userMapper.update(null, updateWrapper);
或者使用 LambdaUpdateWrapper
:
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper.eq(User::getId, 1L) .set(User::getName, null); // 將 name 字段更新為 null userMapper.update(null, lambdaUpdateWrapper);
方法三:配置全局策略(不推薦)
雖然可以通過配置全局的 FieldStrategy 為 IGNORED 來允許更新為 null,但這通常不推薦,因?yàn)樗鼤绊懰械母虏僮鳌?/p>
在 application.yml 或 application.properties 中配置:
mybatis-plus: global-config: db-config: field-strategy: ignored # 允許字段為 null
或者在 Java 配置類中配置:
@Bean public MybatisPlusConfig customMybatisPlusConfig() { MybatisPlusConfig config = new MybatisPlusConfig(); GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setDbConfig(new DbConfig().setFieldStrategy(FieldStrategy.IGNORED)); config.setGlobalConfig(globalConfig); return config; }
注意:這種方法會影響全局的字段策略,可能會導(dǎo)致一些意外的更新行為,因此不推薦使用。
方法四:自定義方法(高級用法)
如果你需要更復(fù)雜的更新邏輯,可以自定義 Mapper 方法,并在 XML 文件中編寫自定義的 SQL 語句。
@Mapper public interface UserMapper extends BaseMapper<User> { @Update("UPDATE user SET name = #{name} WHERE id = #{id}") int updateNameById(@Param("id") Long id, @Param("name") String name); }
然后調(diào)用自定義方法:
userMapper.updateNameById(1L, null); // 將 name 字段更新為 null
總結(jié)
MyBatis-Plus 提供了多種方法來將字段值更新為 null,你可以根據(jù)具體需求選擇合適的方法。手動設(shè)置字段為 null 和使用 UpdateWrapper/LambdaUpdateWrapper 是最常見和推薦的方法。全局配置策略雖然簡單,但可能會影響其他更新操作,因此應(yīng)謹(jǐn)慎使用。自定義方法則提供了更高的靈活性,適用于復(fù)雜的更新邏輯。
以上就是MyBatis-Plus更新對象時(shí)將字段值更新為null的常見方法的詳細(xì)內(nèi)容,更多關(guān)于MyBatis-Plus字段值更新為null的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java instanceof和getClass()區(qū)別實(shí)例解析
這篇文章主要介紹了Java instanceof和getClass()區(qū)別實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07IDEA創(chuàng)建Java項(xiàng)目文件并運(yùn)行教程解析
這篇文章主要介紹了IDEA創(chuàng)建Java項(xiàng)目文件并運(yùn)行教程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11詳解Java8的forEach(...)如何提供index值
這篇文章主要介紹了詳解Java8的forEach(...)如何提供index值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03idea中同一SpringBoot項(xiàng)目多端口啟動
本文主要介紹了idea中同一SpringBoot項(xiàng)目多端口啟動,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法
本文主要介紹了JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法,要通過Java程序獲取IP地址對應(yīng)的城市,需要借助第三方的IP地址庫,下面就來介紹一下,感興趣的可以了解一下2023-10-10AsyncHttpClient的默認(rèn)配置源碼流程解讀
這篇文章主要為大家介紹了AsyncHttpClient的默認(rèn)配置源碼流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12簡單講解Java的Socket網(wǎng)絡(luò)編程的多播與廣播實(shí)現(xiàn)
這篇文章主要介紹了Java的Socket網(wǎng)絡(luò)編程的多播與廣播實(shí)現(xiàn),包括網(wǎng)絡(luò)編程發(fā)送和接受數(shù)據(jù)的一些基礎(chǔ)知識整理,需要的朋友可以參考下2016-01-01java利用正則表達(dá)式處理特殊字符的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于java利用正則表達(dá)式處理特殊字符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12