mybatisPlus FieldStrategy 策略作用小结

 更新时间:2025年12月10日 09:47:02   作者:爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ  
MyBatis-Plus的FieldStrategy枚举用于控制实体字段在插入、更新和查询条件中的空值处理策略,下面就来详细的介绍一下mybatisPlus FieldStrategy 策略,感兴趣的可以了解一下

MyBatis-Plus 的 FieldStrategy 枚举用于控制实体字段在 插入(Insert)更新(Update)查询条件(Where) 中的空值处理策略。理解这些策略对避免数据异常非常重要,以下是详细解释:

一、各策略的作用

1.IGNORED

  • 作用忽略空值判断,无论字段值是否为 null、空字符串("") 或空集合,都会参与 SQL 操作。
  • 场景:强制将字段更新为 null(解决 saveOrUpdate 无法更新 null 的问题)。

2.NOT_NULL

  • 作用仅忽略 null,非 null 的空字符串或空集合仍会参与 SQL 操作。
  • 场景:允许字段为空字符串,但不允许 null(如数据库字段允许 '' 但不允许 NULL)。

3.NOT_EMPTY

  • 作用忽略 null、空字符串("") 和空集合
  • 场景:字符串或集合类型字段必须有实际值(如用户名、列表数据)。

4.DEFAULT

  • 作用全局默认策略,通常等价于 NOT_NULL(取决于 MyBatis-Plus 版本)。
  • 场景:使用全局配置的默认行为。

5.NEVER

  • 作用永远不参与 SQL 操作,无论值是什么。
  • 场景:字段仅用于业务逻辑,不与数据库交互(如临时计算字段)。

二、不同方法(insert/update/where)的策略差异

1.insertStrategy(插入时)

  • 影响范围save()saveBatch() 等插入方法。
  • 示例
    @TableField(insertStrategy = FieldStrategy.NOT_NULL)
    private String username; // 插入时忽略 null 值
    

2.updateStrategy(更新时)

  • 影响范围updateById()saveOrUpdate()update(entity, wrapper) 等更新方法。
  • 示例
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String email; // 更新时允许将 email 设置为 null
    

3.whereStrategy(查询条件时)

  • 影响范围Wrapper 条件构造器中的实体参数。
  • 示例
    @TableField(whereStrategy = FieldStrategy.NOT_EMPTY)
    private String phone; // 查询条件中忽略空字符串和 null
    

三、策略对比表

策略插入(Insert)更新(Update)查询条件(Where)
IGNORED字段值无论如何都插入字段值无论如何都更新字段值无论如何都作为条件
NOT_NULL忽略 null,插入其他值忽略 null,更新其他值忽略 null,其他值作为条件
NOT_EMPTY忽略 null、""、空集合忽略 null、""、空集合忽略 null、""、空集合
DEFAULT按全局配置(通常为 NOT_NULL)按全局配置(通常为 NOT_NULL)按全局配置(通常为 NOT_NULL)
NEVER字段不参与插入字段不参与更新字段不作为条件

四、常见应用场景

1. 允许更新字段为null

@TableField(updateStrategy = FieldStrategy.IGNORED)
private String remark; // 允许将备注更新为 null

2. 插入时自动填充默认值

@TableField(insertStrategy = FieldStrategy.NOT_NULL)
private Integer status = 1; // 插入时若未设置值,则使用默认值 1

3. 避免空字符串作为查询条件

@TableField(whereStrategy = FieldStrategy.NOT_EMPTY)
private String keyword; // 避免空字符串作为查询条件

五、全局配置 vs 字段注解

  • 全局配置(优先级低):

    mybatis-plus:
      global-config:
        db-config:
          insert-strategy: NOT_NULL
          update-strategy: NOT_NULL
          where-strategy: NOT_EMPTY
    
  • 字段注解(优先级高):

    @TableField(insertStrategy = FieldStrategy.IGNORED, 
                updateStrategy = FieldStrategy.NOT_NULL)
    private String nickname;
    

六、总结

  • IGNORED:强制让 null 参与 SQL 操作,解决 saveOrUpdate 无法更新 null 的问题。
  • NOT_NULL:最常用,避免 null 导致数据库字段被意外覆盖。
  • NOT_EMPTY:适合字符串和集合类型,确保有实际数据。
  • 更新 null 字段:优先使用 FieldStrategy.IGNORED 注解,而非全局配置。

合理配置这些策略可以避免 null 值导致的意外数据问题,提高代码健壮性。

到此这篇关于mybatisPlus FieldStrategy 策略作用的文章就介绍到这了,更多相关mybatisPlus FieldStrategy 策略内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IntelliJ IDEA的代码搁置功能实现

    IntelliJ IDEA的代码搁置功能实现

    本文主要介绍了IntelliJ IDEA的代码搁置功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • java.lang.String类的使用

    java.lang.String类的使用

    这篇文章主要介绍了java.lang.String类的使用,以及字符串的相关知识,需要了解相关知识的小伙伴可以参考该篇文章
    2021-08-08
  • Java多线程案例之单例模式懒汉+饿汉+枚举

    Java多线程案例之单例模式懒汉+饿汉+枚举

    这篇文章主要介绍了Java多线程案例之单例模式懒汉+饿汉+枚举,文章着重介绍在多线程的背景下简单的实现单例模式,需要的小伙伴可以参考一下
    2022-06-06
  • Java NIO 通道概念选择器使用示例详解

    Java NIO 通道概念选择器使用示例详解

    这篇文章主要为大家介绍了Java NIO 通道概念选择器使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • JAVA日期处理类详解

    JAVA日期处理类详解

    这篇文章主要介绍了Java实现的日期处理类,结合完整实例形式分析了Java针对日期的获取、运算、转换等相关操作技巧,需要的朋友可以参考下
    2021-08-08
  • Java 详解如何从尾到头打印链表

    Java 详解如何从尾到头打印链表

    在我们平时的代码过程中,链表是我们经常遇到的一个数据结构,它非常的简单,但Java并不能直接将一个链表打印出来,通过这篇文章我们来讲解一下这个问题
    2022-01-01
  • 详解阿里云maven镜像库配置(gradle,maven)

    详解阿里云maven镜像库配置(gradle,maven)

    这篇文章主要介绍了详解阿里云maven镜像库配置(gradle,maven),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Intellij IDEA解析jacoco结果文件的方法

    Intellij IDEA解析jacoco结果文件的方法

    这篇文章主要介绍了Intellij IDEA解析jacoco结果文件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Spring Boot日志介绍和配置

    Spring Boot日志介绍和配置

    在程序中,日志对象通过LoggerFactory获取,日志框架如SLF4J提供统一API,便于管理和维护,日志级别分为FATAL、ERROR、WARN、INFO、DEBUG、TRACE,通过配置可细化日志输出,日志还可持久化存储和格式化,使用lombok可简化日志代码的编写
    2024-11-11
  • java中JsonObject与JsonArray转换方法实例

    java中JsonObject与JsonArray转换方法实例

    在项目日常开发中常常会遇到JSONArray和JSONObject的转换,很多公司刚入职的小萌新会卡在这里,下面这篇文章主要给大家介绍了关于java中JsonObject与JsonArray转换方法的相关资料,需要的朋友可以参考下
    2023-04-04

最新评论