在mybatis-plus中,@tableid注解用于标识实体类的主键字段,并可以配置多种属性。以下是@tableid可选的属性及其说明:
1.value
作用:指定数据库表中的主键列名(如果字段名与列名不一致时使用)。
示例:
@tableid(value = "user_id") private long id;
- 表示实体类的
id字段对应数据库表的user_id列。
2.type
作用:指定主键生成策略(idtype枚举类型)。
可选值:
| 值 | 说明 |
|---|---|
| idtype.auto | 数据库自增(mysql的auto_increment) |
| idtype.none | 无策略,需手动设置主键值 |
| idtype.input | 用户手动输入主键值 |
| idtype.assign_id | 默认策略,使用雪花算法生成long类型id |
| idtype.assign_uuid | 生成uuid字符串类型id |
| idtype.id_worker | 已废弃,改用assign_id |
| idtype.uuid | 已废弃,改用assign_uuid |
示例:
@tableid(type = idtype.auto) private long id; // 依赖数据库自增
3.keepglobalformat(3.5.0+)
作用:是否保持全局主键格式(如全局配置了前缀/后缀,是否应用到当前字段)。
默认值:false
示例:
@tableid(keepglobalformat = true) private string customid;
全局配置(替代@tableid)
如果不想在每个实体类上写@tableid,可以在application.yml中配置全局策略:
mybatis-plus: global-config: db-config: id-type: assign_id # 全局主键策略(默认为assign_id) table-prefix: t_ # 表前缀(可选)
常见问题
数据库自增但未生效:
- 确保数据库表的主键列设置了
auto_increment。 - 确保
@tableid(type = idtype.auto)。
雪花算法id冲突:
assign_id生成的id可能因系统时间回拨导致重复,需配置workerid和datacenterid。
uuid主键:
- 使用
@tableid(type = idtype.assign_uuid)时,字段类型应为string。
完整示例
@data
@tablename("sys_user")
public class user {
@tableid(value = "user_id", type = idtype.assign_id)
private long id;// 雪花算法id
@tableid(value = "uuid", type = idtype.assign_uuid)
private string uuid;// uuid字符串
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论