@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数据库自增
NONEMP set主键,雪花算法实现
INPUT需要手动赋值
ASSIGN_IDMP分配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注解详细介绍的主要内容,如果未能解决你的问题,请参考以下文章

@TableId注解

关于MybatisPlus使用@TableId(value = “id“, type = IdType.AUTO)注解使主键id自增长无效的问题

注解式项目开发!详细解析Java中各个注解的作用和使用方式

MYBatis-Plus常用注解@TableName@TableId@TableField@TableLogic

Java学习注解和反射超详细笔记

Annotation 注解开发介绍优势 与好处java为啥采用注解开发