@TableId注解详细介绍

时间:2024-11-12 07:26:38

@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_UUID
等同于UUID,要求主键类型必须是String类型,会自动生成UUID进行赋值,需要考虑数据库的字段设计,数据库中的int类型的,所以存不进去,但因为主键自增,如果要修改int类型为varchar类型的话,需要去除主键自增。