MyBatis-Plus 3.x FieldStrategy 作用

1. 5 个选项的作用

1.1 IGNORED 忽略判断,无论字段是 null / 空 / 有值,一律强制写进 SQL

1.2 NOT_NULL 字段 非 null 时才写进 SQL(null 时忽略该字段)

1.3 NOT_EMPTY 字段 非 null 且非空 时才写(对 String 还要求非空串,对 Collection 要求非空,对 Array 要求非空)

1.4 DEFAULT 跟随全局配置(即 mybatis-plus.global-config.db-config.update-strategy/insert-strategy 的值,通常默认是 NOT_NULL)

1.5 NEVER 永远不写该字段(无论什么值都被忽略)

注意:FieldStrategy 在不同位置作用不同:

@TableField(insertStrategy=...) 只影响 INSERT

@TableField(updateStrategy=...) 只影响 UPDATE

@TableField(whereStrategy=...) 只影响 WHERE 条件

不带前缀的 @TableField(strategy=...) 同时影响 insert+update(旧用法,3.1.2+ 推荐用带前缀的)

MyBatis-Plus中insertStrategy全局默认值为NOT_NULL,updateStrategy全局默认值为NOT_NULL,selectStrategy全局默认值为NOT_EMPTY

2.各自典型使用场景

2.1 IGNORED --- 需要"显式覆盖为 null"

场景:你确实想把一个已有值重置/清空为 NULL。例如"取消绑定"用户头像、清空备注字段,业务上允许该列 NULL。

风险:如果列是 NOT NULL(就像你之前 device_status 案例),用 IGNORED 且传了 null 会直接抛 Column ... cannot be null。这正是一开始的报错根因。

2.2 NOT_NULL --- 最常用,只更新有值的字段

场景:部分字段更新(Patch 语义)。前端只传要改的字段,没传的保持数据库原值。例如用户资料编辑,只改昵称时不小心把头像置 null。

这也是 MyBatis-Plus 全局默认值,绝大多数字段都用它。

2.3 NOT_EMPTY --- 比 NOT_NULL 更严格,针对文本/集合

场景:字符串字段不允许被更新成空串 "",或 List 不允许被清成空集合。例如标签列表、备注,业务上"空串/NULL/空集合"都视为无效输入。

注意:NOT_EMPTY 对基本类型(int 等)效果同 NOT_NULL,因为基本类型永远非空。

2.4 DEFAULT --- 交给全局统一策略

场景:某个字段没有特殊需求,希望和项目全局配置保持一致,避免在每个字段上硬编码策略。方便后续统一切换策略(如从 NOT_NULL 切到 NOT_EMPTY)。

2.5 NEVER --- 该字段永远由数据库/其它方式维护

场景:字段由数据库自动生成或永远不该被 ORM 写入。例如:

主键自增 id(配合 @TableId(type = IdType.AUTO) 时通常不需要,但某些只读列可标 NEVER)

创建时间只在 insert 时由 fillStrategy/自动填充处理,update 时绝不允许覆盖

审计字段、版本号等由框架托管

相关推荐
香吧香35 分钟前
java服务异常日志只打印异常类型,没有堆栈定位分析
java·jvm·异常
qq_2518364571 小时前
AI 疾病自查功能SpringbootAI项目实战 · 技术实现文档
java·ai·ai编程
逆境不可逃2 小时前
Pi Agent 学习笔记:对话太长以后,如何压缩上下文
java
MetaLite2 小时前
JDK 8~26 核心特性一览:从 Stream 到 Scoped Values
java
我要见SA姐12 小时前
告别 Copilot?Codex 本地化部署指南
运维·数据库·机器学习·oracle·回归
wno7042 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
君顾12 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房
xcLeigh2 小时前
聊聊国产化替换:好用数据迁移工具KDMS怎么帮咱们搞定评估难
数据库·sql·数据迁移·kes·kdms
Elastic 中国社区官方博客3 小时前
列式存储并不等同于列式数据库。Columnar 模式为 Elasticsearch 带来了什么
大数据·运维·数据库·elasticsearch·搜索引擎
我要见SA姐13 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
数据库·ide·vscode·oracle·编辑器