1. 概述
@TableField是MyBatis-Plus 框架提供的核心注解之一,用于映射实体类字段与数据库表列的关系,并配置字段在 CRUD 操作中的行为策略。
作用范围:实体类的成员变量
2. 核心属性说明
@TableField 注解具有多个属性,其中最常用的有 value、exist 和fill。
-
value属性: 用于指定字段在数据库表中的列名,如果实体类字段名与数据库表列名不一致时,通过该属性指定映射关系。示例:@TableField(value = "user_name") // 数据库列名为 user_name,实体字段为 userName private String userName; -
exist属性: 用于指定字段是否为数据库表中的字段,如果为false,则表示该字段仅在Java实体类中存在,而不对应数据库表中的列,避免 MyBatis-Plus 生成 SQL 时包含该字段。示例:@TableField(exist = false) // 该字段不在数据库表中 private String tempData; -
fill属性: 用于指定字段的自动填充策略,结合 MetaObjectHandler 接口的实现,可以实现创建时间、更新时间等字段的自动填充。常用的策略有:FieldFill.DEFAULT:不进行自动填充。FieldFill.INSERT:只在插入数据时自动填充。FieldFill.UPDATE:只在更新数据时自动填充。FieldFill.INSERT_UPDATE:在插入和更新数据时都进行自动填充。
@TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;
3. 策略配置
在 MyBatis-Plus 中,FieldStrategy 是用于控制实体类字段在 CRUD 操作 中如何被处理的核心枚举类,主要通过 @TableField 注解的 insertStrategy(插入策略)、updateStrategy(更新策略)、whereStrategy(查询条件策略) 三个属性配置。
3.1 FieldStrategy 枚举的 5 种策略
| 策略值 | 核心含义 | 适用操作类型 | 典型场景 |
|---|---|---|---|
IGNORED | 完全忽略字段的空值/空内容判断,无论字段值是什么(null/""/有效值),都会参与操作。 | 插入、更新、查询 | 主动将字段设为 null(如清空数据)、必须插入空字符串("")等场景。 |
NOT_NULL(默认) | 仅当字段值 不为 null 时,才参与操作(空字符串 "" 会被忽略)。 | 插入、更新、查询 | 大部分常规场景,避免 null 覆盖现有值,仅处理明确赋值的非空字段。 |
NOT_EMPTY | 仅当字段值 不为 null 且不为空字符串 "" 时,才参与操作(仅对字符串有效)。 | 插入、更新、查询 | 字符串字段需严格校验“非空且非空串”,如用户名、手机号等必填项。 |
NEVER | 字段始终不参与任何操作(CRUD 全忽略)。 | 插入、更新、查询 | 临时字段、计算属性(如 transient 修饰的字段),无需与数据库交互的字段。 |
DEFAULT | 跟随全局配置的策略(不常用,一般用具体策略替代)。 | 插入、更新、查询 | 需统一遵循全局策略时使用(优先级低于局部注解配置)。 |
3.2 三大注解属性的作用(@TableField 中配置)
@TableField 通过以下三个属性分别控制 插入、更新、查询 时的字段策略,默认值均为 NOT_NULL:
| 注解属性 | 作用范围 | 说明 |
|---|---|---|
insertStrategy | 插入操作(insert) | 控制字段在执行 insert 时是否被写入 SQL 的 INSERT 语句。 |
updateStrategy | 更新操作(update) | 控制字段在执行 update 时是否被写入 SQL 的 SET 语句。 |
whereStrategy | 查询操作(select) | 控制字段在生成查询条件(如 WHERE 子句)时是否被纳入条件判断。 |
示例:
// 插入时允许为 null(如备注,可选填)
@TableField(insertStrategy = FieldStrategy.IGNORED)
private String remark;
// 更新时允许将 nickname 设为 null(如用户主动清空昵称)
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String nickname;
3.3 全局策略
全局策略:可在配置文件中设置默认策略(如 application.yml),作用于所有未单独配置的字段:
mybatis-plus:
global-config:
db-config:
field-strategy: not_null # 全局默认策略(插入、更新、查询)
局部策略:@TableField 的 insertStrategy/updateStrategy/whereStrategy 会 覆盖全局策略,优先级更高。
The End.
MyBatis Plus @TableField注解详解
1831

被折叠的 条评论
为什么被折叠?



