@TableId(value=“xxx”,type = IdType.xxx):
“value”:设置数据库字段值
“type”:设置主键类型、如果数据库主键设置了自增建议使用“AUTO”
注意:当不添加注解时,默认使用ID_WORKER
@TableId的type有以下几种类型:
类型 | 含义 |
---|---|
AUTO | 数据库自增ID 类型可以是Interger/Long; |
NONE | 数据库未设置主键类型(当手动设置主键id值后插入数据库,值会按设置的值插入,若未手动设置值,值会变成一串很长的数字插入) |
INPUT | 用户自己输入ID,如果未设置插入数据库,会报错 |
ID_WORKER | 生成的snowflakeId 是19位的全局唯一ID, 类型必须是Long |
UUID | 局唯一ID,类型是字符串 |
ID_WORKER_STR | idWorker 的字符串表示, 类型是字符串 |
1.数据库主键没有根据自己的设定进行自增,而是变成了一串数字;
原因:主键 id 上没有标识 @TableId(value = “id”,type = IdType.AUTO) 注解,默认使用了 type = IdType.ID_WORKER
2.type = IdType.IdWorker生成的Id和返回给前台的不一致;
原因:mybatis-plus 的 ID_WORKER 策略生成了一个 Long 型的很长的19位数字,这个数字传到前台之后,超过了 js 中数字的最大范围,导致最后两位始终为 0。
解决方案:
@TableId(value = “id”, type = IdType.ID_WORKER)
@JsonSerialize(using = ToStringSerializer.class)
添加 @JsonSerialize(using = ToStringSerializer.class) 将结果转换成 String,返回的时候主键都以 String 的格式返回给前端接收;或者在数据组装返回时,自己做个 String 的转换;