@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,转载请注明出处。