MyBatis Plus注解 @TableField

MyBatis Plus @TableField注解详解

1. 概述

@TableFieldMyBatis-Plus 框架提供的核心注解之一,用于映射实体类字段与数据库表列的关系,并配置字段在 CRUD 操作中的行为策略。
作用范围:实体类的成员变量

2. 核心属性说明

@TableField 注解具有多个属性,其中最常用的有 valueexistfill

  1. value 属性: 用于指定字段在数据库表中的列名,如果实体类字段名与数据库表列名不一致时,通过该属性指定映射关系。示例:

    @TableField(value = "user_name") // 数据库列名为 user_name,实体字段为 userName
    private String userName;
    
  2. exist 属性: 用于指定字段是否为数据库表中的字段,如果为 false,则表示该字段仅在Java实体类中存在,而不对应数据库表中的列,避免 MyBatis-Plus 生成 SQL 时包含该字段。示例:

    @TableField(exist = false) // 该字段不在数据库表中
    private String tempData;
    
  3. 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.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每周都想吃火锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值