- 作者:老汪软件技巧
- 发表时间: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 值的策略是相当灵活的(也很容易出问题),需要我们根据实际需求,选择全局配置或局部注解的方式来实现期望的更新行为。