MyBatis Plus教程之@TableId

本教程详细介绍了MyBatisPlus中@TableId注解的使用,包括如何指定数据表主键字段和类型。讲解了IdType枚举的各种主键类型,如:AUTO(数据库ID自增)、NONE(无状态,MyBatisPlus自动赋值)、INPUT(插入前自行设置主键值)、ASSIGN_ID(分配ID,使用雪花算法)和ASSIGN_UUID(分配UUID)。并给出了各种类型在实际操作中的示例和日志输出。
摘要由CSDN通过智能技术生成

本章节将介绍 @TableId 注解的用法,该注解用于将某个成员变量指定为数据表主键。实例:

1

2

3

4

5

@TableName("user")

public class UserBean {

   @TableId(value = "user_id", type = IdType.AUTO)

   private Integer userId;

}

上面实例中,将 UserBean 中的 userId 字段标识为主键,并且对应数据表中的 user_id 字段。

下面将介绍 @TableId 注解的属性:

value

指定数据表主键字段名称,不是必填的,默认为空字符串。

type

指定数据表主键类型,如:ID自增、UUID等。该属性的值是一个 IdType 枚举类型,默认为 IdType.NONE。

IdType 枚举

IdType 枚举可取值如下:

AUTO

数据库 ID 自增。如果我们创建数据库表时使用了 AUTO_INCREMENT 修饰主键,如下:

1

2

3

4

5

6

CREATE TABLE `user` (

  `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',

  `namevarchar(100) DEFAULT NULL COMMENT '用户名',

  -- ... 忽略 ...

  PRIMARY KEY (`user_id`)

);

我们使用 @TableId 时可以指定为 IdType.AUTO。

NONE

无状态,该类型为 type 属性的默认主键类型(全局属性为 IdType.INPUT)。当我们设置 @TableId 类型为NONE 时,且不手动设置主键值,MyBatis Plus 将默认给出一个 Long 类型的字符串。例如:

1

2

3

4

5

6

7

8

// JavaBean 定义

@TableId(value = "user_id", type = IdType.NONE)

private Long userId;

// 调用方法

AnnotationUserBean userBean = new AnnotationUserBean(

        "测试-" System.currentTimeMillis(), "男", (int)(Math.random() * 50) + 10);

userMapper.insert(userBean);

执行 insert 方法,输出日志如下:

1

2

Preparing: INSERT INTO mybatis_test.user ( user_id, name, sex, age ) VALUES ( ?, ?, ?, ? )

Parameters: 1315521648090255362(Long), 测试-1602479776677(String), 男(String), 47(Integer)

其中,1315521648090255362 就是 MyBatis Plus 自动设置的值。

INPUT

insert 前自行 set 主键值。例如:

1

2

3

4

5

6

7

8

// JavaBean 定义

@TableId(value = "user_id", type = IdType.INPUT)

private Long userId;

// 调用方法

AnnotationUserBean userBean = new AnnotationUserBean(

        "测试-" System.currentTimeMillis(), "男", (int)(Math.random() * 50) + 10);

userMapper.insert(userBean);

执行 insert 方法,输出日志如下:

1

2

Preparing: INSERT INTO mybatis_test.user ( user_id, name, sex, age ) VALUES ( ?, ?, ?, ? )

Parameters: null, 测试-1602479950289(String), 男(String), 22(Integer)

从上面可以日志得知,当我们没有设置 user_id 主键值时,MyBatis Plus 并没有设置 Long 类型的值。

ASSIGN_ID

分配ID(主键类型为 Number(Long和Integer) 或 String)(since 3.3.0),使用接口 IdentifierGenerator 的方法 nextId(默认实现类为 DefaultIdentifierGenerator 雪花算法)。例如:

1

2

3

4

5

6

7

8

// JavaBean 定义

@TableId(value = "user_id", type = IdType.ASSIGN_ID)

private Long userId;

// 调用方法

AnnotationUserBean userBean = new AnnotationUserBean(

        "测试-" System.currentTimeMillis(), "男", (int)(Math.random() * 50) + 10);

userMapper.insert(userBean);

执行 insert 方法,输出日志如下:

1

2

Preparing: INSERT INTO mybatis_test.user ( user_id, name, sex, age ) VALUES ( ?, ?, ?, ? )

Parameters: 1315523711071158273(Long), 测试-1602480268514(String), 男(String), 57(Integer)

上面日志中的 user_id “1315523711071158273” 是通过调用 DefaultIdentifierGenerator 的 nextId 方法获取。 

ASSIGN_UUID

分配 UUID,主键类型为 String (since 3.3.0),使用接口 IdentifierGenerator 的方法 nextUUID(默认 default 方法)。实例:

1

2

3

4

5

6

7

8

9

// JavaBean 定义

@TableId(value = "user_id", type = IdType.ASSIGN_UUID)

private String userId;

// 调用方法

AnnotationUser2Bean userBean = new AnnotationUser2Bean(

        "测试-" System.currentTimeMillis(), "男",

        (int)(Math.random() * 50) + 10);

userMapper.insert(userBean);

执行 insert 方法,输出日志如下:

1

2

Preparing: INSERT INTO mybatis_test.user ( user_id, name, sex, age ) VALUES ( ?, ?, ?, ? )

Parameters: 48c60eb8d6e684d0cb3ae7e0ef603239(String), 测试-1602480769751(String), 男(String), 37(Integer)

上面日志中的 “48c60eb8d6e684d0cb3ae7e0ef603239” 用户ID是通过 IdentifierGenerator 的 nextUUID 方法得到。

ID_WORKER(已废弃)

分布式全局唯一 ID 长整型类型(请使用 ASSIGN_ID)

UUID(已废弃)

32 位 UUID 字符串(请使用 ASSIGN_UUID)

ID_WORKER_STR(已废弃)

分布式全局唯一 ID 字符串类型(请使用 ASSIGN_ID)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值