欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis-Plus更新對象時(shí)將字段值更新為null的四種常見方法

 更新時(shí)間:2024年11月06日 11:56:26   作者:sg_knight  
MyBatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具,在簡化開發(fā)、提高效率方面表現(xiàn)非常出色,而,在使用 MyBatis-Plus 更新對象時(shí),默認(rèn)情況下是不會將字段值更新為 null 的,如果你需要將某些字段的值更新為 null,有幾種方法可以實(shí)現(xiàn),本文將介紹幾種常見的方法

引言

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í)例解析

    這篇文章主要介紹了Java instanceof和getClass()區(qū)別實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • IDEA創(chuàng)建Java項(xiàng)目文件并運(yùn)行教程解析

    IDEA創(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值

    這篇文章主要介紹了詳解Java8的forEach(...)如何提供index值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • idea中同一SpringBoot項(xiàng)目多端口啟動

    idea中同一SpringBoot項(xiàng)目多端口啟動

    本文主要介紹了idea中同一SpringBoot項(xiàng)目多端口啟動,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法

    JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法

    本文主要介紹了JAVA根據(jù)ip地址獲取歸屬地的實(shí)現(xiàn)方法,要通過Java程序獲取IP地址對應(yīng)的城市,需要借助第三方的IP地址庫,下面就來介紹一下,感興趣的可以了解一下
    2023-10-10
  • AsyncHttpClient的默認(rèn)配置源碼流程解讀

    AsyncHttpClient的默認(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)

    這篇文章主要介紹了Java的Socket網(wǎng)絡(luò)編程的多播與廣播實(shí)現(xiàn),包括網(wǎng)絡(luò)編程發(fā)送和接受數(shù)據(jù)的一些基礎(chǔ)知識整理,需要的朋友可以參考下
    2016-01-01
  • 淺談Spring中如何使用設(shè)計(jì)模式

    淺談Spring中如何使用設(shè)計(jì)模式

    這篇文章主要介紹了淺談Spring中如何使用設(shè)計(jì)模式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • java利用正則表達(dá)式處理特殊字符的方法實(shí)例

    java利用正則表達(dá)式處理特殊字符的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于java利用正則表達(dá)式處理特殊字符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java中獲取類路徑classpath的簡單方法(推薦)

    Java中獲取類路徑classpath的簡單方法(推薦)

    下面小編就為大家?guī)硪黄狫ava中獲取類路徑classpath的簡單方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09

最新評論