@TableId @TableField

@TableId

在 Java 的 ORM 框架中,@TableId 注解是 MyBatis-Plus 提供的核心注解之一,用于标识实体类中的主键字段。

1. 基本作用

@TableId 用于将实体类的某个字段与数据库表的主键列进行映射,告诉 MyBatis-Plus 该字段是主键,并在 CRUD 操作中自动处理主键的生成策略(如自增、UUID、雪花算法等)。

2. 核心属性

属性名 类型 说明
value String 指定数据库表中主键列的列名(默认与字段名一致,若不一致需显式配置)。
type Enum 主键生成策略(见下文“主键策略”)。
exist boolean 是否为数据库表字段(false 表示该字段不映射到数据库列,默认 true)。
fill FieldFill 自动填充策略(配合 MyBatis-Plus 的自动填充功能使用)。

3. 主键生成策略(type 属性)

枚举值 说明
AUTO 数据库自增(依赖数据库表的自增列,如 MySQL 的 AUTO_INCREMENT)。
NONE 无状态(未设置主键生成策略,需手动赋值,否则插入时可能报错)。
INPUT 手动输入(用户需手动为字段赋值,适用于自定义 ID 或外部传入 ID)。
ASSIGN_ID 分配 ID(默认策略):使用雪花算法生成 Long 型 ID(兼容数字和字符串)。
ASSIGN_UUID 分配 UUID:生成不带中划线的 UUID 字符串(32 位)。

@TableField

@TableField 是 MyBatis-Plus 框架中的一个注解,用于标识实体类中的字段与数据库表字段的映射关系。它提供了丰富的配置选项,可以灵活地处理字段名、自动填充、逻辑删除等场景。

常用属性说明

属性 说明
value 数据库字段名
exist 是否为数据库表字段
condition 查询条件构造器
fill 自动填充策略
select 是否进行 select 查询
keepGlobalFormat 是否保持全局命名规则

FieldFill 枚举说明:

枚举值 说明
DEFAULT 默认不填充
INSERT 插入时填充(如 create_by, create_time)
UPDATE 更新时填充(如 update_by, update_time)
INSERT_UPDATE 插入和更新时都填充
DELETE 删除时填充(较少用)

示例:

@Data
@TableName("t_user")
public class User {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    @TableField(value = "user_name", exist = true, condition = SqlCondition.LIKE)
    private String name;

    @TableField(value = "user_age", exist = true, updateStrategy = FieldStrategy.IGNORED)
    private Integer age;

    @TableField(value = "email_address", exist = true, select = false)
    private String email;

    @TableField(value = "is_active", exist = true, fill = FieldFill.INSERT)
    private Boolean active;

    @TableLogic
    @TableField(value = "deleted_flag", exist = true)
    private Integer deleted;

    @TableField(exist = false)
    private transient String tempData;

    @Version
    private Integer version;
}
本文为原创内容,作者:闲鹤,原文链接:https://blog.uwenya.cc/1658.html,转载请注明出处。

发表评论