@TableId注解详细介绍
Posted Dyhamics
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@TableId注解详细介绍相关的知识,希望对你有一定的参考价值。
@TableId注解
@TableId注解是专门用在主键上的注解,如果数据库中的主键字段名和实体中的属性名,不一样且不是驼峰之类的对应关系,可以在实体中表示主键的属性上加@Tableid注解,并指定@Tableid注解的value属性值为表中主键的字段名既可以对应上。
比如数据中的表中的字段是vote_id,但是实体类是voteId。那么就需要在voteId上打上这个注解,如下:
/** 主键 */
@TableId("vote_id")
@TableId(value = "vote_id")
private Long voteId;
@TableId注解源码
package com.baomidou.mybatisplus.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TableId
String value() default "";
IdType type() default IdType.NONE;
@TableId注解使用介绍
从源码可以看出,设置主键映射时:
value映射主键字段的名字
type 设置主键类型、主键的生成策略
值 | 描述 |
---|---|
AUTO | 数据库自增 |
NONE | MP set主键,雪花算法实现 |
INPUT | 需要手动赋值 |
ASSIGN_ID | MP分配ID,Long、Integer、String |
ASSIGN_UUID | 分配UUID,String |
数据库自增 AUTO
开发者无需赋值,自己根据当前表中id最大值自增+1
手动赋值的话还是使用数据库id中最大值+1 的方式赋予id
public class VoteInfo extends MybatisPlusBaseEntity
@TableId(type = IdType.AUTO)
private Long voteId;
自动生成主键 使用雪花算法 NONE
配合新增使用 用的时候需要注意主键长度 但是MyBatisPlus3.20的时候是采取该字段最大值+1,数据类型改int为long,注意雪花id生成的长度否则会报错,同时如果主键如果数据类型为int需要修改成Long。
public class VoteInfo extends MybatisPlusBaseEntity
@TableId(type = IdType.NONE)
private Long voteId;
开发者手动赋值 INPUT
如果插入操作中,没有对id进行赋值,那么存进数据库中的将为0(long)数据库一般会采取自增id的方式处理 当前数据库编号的值+1。如果赋值了,就用开发者所赋的值。
ASSIGN_ID
等同于ID_ WORKER(3) ,ID_ WORKER STR(3) ,使用mp自动赋值 采取雪花算法,但是MyBatisPlus3.20的时候是采取该字段最大值+1
ASSIGN_ID
等同于UUID,要求主键类型必须是String类型,会自动生成UUID进行赋值,需要考虑数据库的字段设计,数据库中的int类型的,所以存不进去,但因为主键自增,如果要修改int类型为varchar类型的话,需要去除主键自增。
@TableId注解
@TableId 主键注解
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
value | string | "" | 主键字段名 |
type | Enum | IdType.NONE | 主键类型 |
类型:
值 | 描述 |
---|---|
Auto | 数据库自增 |
Input | 自行输入 |
ID_Worker | 分布式全局唯一ID 长整型类型 |
UUID | 32位UUID字符串 |
NONE | 无状态 |
ID_WORKER_STR | 分布式全局唯一ID 字符串类型 |
以上是关于@TableId注解详细介绍的主要内容,如果未能解决你的问题,请参考以下文章
关于MybatisPlus使用@TableId(value = “id“, type = IdType.AUTO)注解使主键id自增长无效的问题