• 作者:老汪软件技巧
  • 发表时间:2024-08-19 07:03
  • 浏览量:

Mybatis-Plus~想必大多数的Java开发同学都用到过,什么?你没用过?那我给你介绍下 ^^/

MyBatis-Plus(简称 MP)是一个在MyBatis基础上增强的工具,它不改变MyBatis的任何核心机制,而是在此基础上提供了一系列增强功能,旨在简化开发工作,提高开发效率。MP的特性非常之多,比如什么:无侵入性(MyBatis-Plus作为增强工具,不会对现有工程产生影响,保证了与MyBatis的兼容性)+性能损耗小(它启动时自动注入基本的CRUD操作,对性能几乎没有损耗)+强大的CRUD支持(内置通用的Mapper和Service,通过少量配置即可实现大部分单表CRUD操作,同时提供了条件构造器以满足复杂查询需求。再也不用自己写SQL了!!)+Lambda表达式支持(允许使用Lambda表达式方便地编写查询条件,减少手误哈哈)。。。

MyBatis-Plus的入门和使用相对简单,它通过提供注解和API的方式进行数据持久化,使得编码更加便捷和简洁,同时,MyBatis-Plus的社区活跃,关键人家文档和注释都是中文的!!!

但是,正如任何强大的工具都需要正确的使用方法,MP虽然入门很简单,但是如果我们对他的底层逻辑完全不了解,也会遇到很多问题,今天这篇文章就是源于一次更新操作中对null的不当处理。。。

场景说明

Mybatis-Plus 在数据库更新操作中,提供了 update() 和 updateById() 两个常用方法。

不知道大家有没有考虑过,更新一对象所涉及到的一个重要问题:如何处理传入实体参数中的 null 值。

有时,我们需要将实体中的 null 值同步更新到数据库中,以保证数据的一致,而有时,我们则希望数据库中的字段保持原值,忽略实体中的 null 值,那么如何让MP智能的区分不同的场景并正确得进行更新操作呢?

没错,使用策略。

MyBatis-Plus 中的策略介绍

MyBatis-Plus 提供了三种字段 null 值处理策略,分别是:

这三种策略的引入,为开发者在不同场景下提供了灵活的选择。

updateById 的使用

updateById() 方法在默认情况下采用 NOT_NULL 策略,即只有当字段值非 null 时才会进行更新。

就是如果你需要更新为 null 的字段,可以通过以下两种方式实现:

修改全局更新策略:在 Mybatis-Plus 的配置文件中设置字段策略为 IGNORED。修改字段注解:在实体类中,对需要更新为 null 的字段使用 @TableField 注解,并设置 updateStrategy 属性为 IGNORED。

@TableField(updateStrategy = FieldStrategy.IGNORED) 
private Date patchedDate;

update 的使用

与 updateById() 不同,update() 方法结合 UpdateWrapper 使用时,可以更灵活地控制更新逻辑,如果需要将某个字段设置为 null,可以直接使用 set 方法进行设置。

总个小结

通过上述介绍,我们可以看到 Mybatis-Plus 在处理数据库更新时 null 值的策略是相当灵活的(也很容易出问题),需要我们根据实际需求,选择全局配置或局部注解的方式来实现期望的更新行为。