Mybatis-Plus 之 @TableId(value=“xxx”,type = IdType.xxx)注解

Mybatis-Plus 之 @TableId(value=“xxx”,type = IdType.xxx)注解


@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_STRidWorker 的字符串表示, 类型是字符串

常见问题:

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 的转换;


版权声明:本文为weixin_44958006原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。