MyBatis-Plus更新对象时将字段值更新为null的四种常见方法

 更新时间:2024年11月06日 11:56:26   作者:sg_knight  
MyBatis-Plus 是一个 MyBatis 的增强工具,在简化开发、提高效率方面表现非常出色,而,在使用 MyBatis-Plus 更新对象时,默认情况下是不会将字段值更新为 null 的,如果你需要将某些字段的值更新为 null,有几种方法可以实现,本文将介绍几种常见的方法

引言

MyBatis-Plus 是一个 MyBatis 的增强工具,在简化开发、提高效率方面表现非常出色。然而,在使用 MyBatis-Plus 更新对象时,默认情况下是不会将字段值更新为 null 的。这是因为 MyBatis-Plus 使用了非空字段策略(FieldStrategy),默认配置为 NOT_NULL,即只更新非空字段。

如果你需要将某些字段的值更新为 null,有几种方法可以实现。本文将介绍几种常见的方法。

方法一:使用 set 方法手动设置字段为 null

在更新对象时,你可以手动将需要更新为 null 的字段设置为 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,但这通常不推荐,因为它会影响所有的更新操作。

在 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;  
}

注意:这种方法会影响全局的字段策略,可能会导致一些意外的更新行为,因此不推荐使用。

方法四:自定义方法(高级用法)

如果你需要更复杂的更新逻辑,可以自定义 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);  
}

然后调用自定义方法:

userMapper.updateNameById(1L, null); // 将 name 字段更新为 null

总结

MyBatis-Plus 提供了多种方法来将字段值更新为 null,你可以根据具体需求选择合适的方法。手动设置字段为 null 和使用 UpdateWrapper/LambdaUpdateWrapper 是最常见和推荐的方法。全局配置策略虽然简单,但可能会影响其他更新操作,因此应谨慎使用。自定义方法则提供了更高的灵活性,适用于复杂的更新逻辑。

以上就是MyBatis-Plus更新对象时将字段值更新为null的常见方法的详细内容,更多关于MyBatis-Plus字段值更新为null的资料请关注脚本之家其它相关文章!

相关文章

  • springboot自动重连Redis的实现方法

    springboot自动重连Redis的实现方法

    由于网络或服务器问题,Redis连接可能会断开,导致应用程序无法继续正常工作,本文主要介绍了springboot自动重连Redis的实现方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • java小程序火锅店点餐系统

    java小程序火锅店点餐系统

    这篇文章主要介绍了java小程序火锅店点餐系统,采用Java语言和Vue技术,以小程序模式实现的火锅点菜系统,文中提供了解决思路和部分实现代码,需要的朋友可以参考下
    2023-03-03
  • 关于Java集合框架面试题(含答案)下

    关于Java集合框架面试题(含答案)下

    Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点。这里,我列出了一些关于Java集合的重要问题和答案。
    2015-12-12
  • Jenkins一键打包部署SpringBoot应用

    Jenkins一键打包部署SpringBoot应用

    本文主要介绍了Jenkins一键打包部署SpringBoot应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 关于Maven混合配置私有仓库和公共仓库的问题

    关于Maven混合配置私有仓库和公共仓库的问题

    这篇文章主要介绍了Maven混合配置私有仓库和公共仓库,通过实例代码详细介绍了私有和公共仓库混合配置的方法,需要的朋友可以参考下
    2022-06-06
  • 详解Spring Cloud Netflix Zuul中的速率限制

    详解Spring Cloud Netflix Zuul中的速率限制

    这篇文章主要介绍了详解Spring Cloud Netflix Zuul中的速率限制,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • SpringBoot整合Kafka、Flink实现流式处理的方法

    SpringBoot整合Kafka、Flink实现流式处理的方法

    这篇文章给大家介绍SpringBoot整合Kafka、Flink实现流式处理,本文将指导您如何在SpringBoot应用中整合Kafka和Flink,从而实现一个完整的实时数据处理流水线,感兴趣的朋友跟随小编一起看看吧
    2025-06-06
  • Hyperlane 文件分块上传服务端的解决方案

    Hyperlane 文件分块上传服务端的解决方案

    在现代Web应用中,文件上传是一个核心功能,尤其是对于大文件,传统的上传方式常常因网络中断或超时而失败,为了解决这一痛点,我们推出了基于 Hyperlane 的文件分块上传服务端代码,为开发者提供了一个高效、可靠的大文件上传解决方案,感兴趣的朋友一起看看吧
    2025-04-04
  • 微信公众号开发消息推送功能

    微信公众号开发消息推送功能

    微信公众号分为服务号、订阅号、企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以,这篇文章主要介绍了微信公众号开发消息推送功能,需要的朋友可以参考下
    2023-02-02
  • spring关于组件的注入及获取流程场景分析

    spring关于组件的注入及获取流程场景分析

    这篇文章主要介绍了spring关于组件的注入及获取流程场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-07-07

最新评论