1、简介
- MyBatis-Plus 中的主键生成策略是一个关键特性,它决定了如何为新插入的行生成唯一标识符(即主键)。
- MyBatis-Plus 提供了多种主键生成策略,以满足不同场景下的需求。
2、常见主键生成策略
1. AUTO(数据库ID自增)
- 描述:这是最常用的主键生成策略之一,特别适用于像 MySQL 这样支持主键自动递增的数据库。当使用 AUTO 策略时,MyBatis-Plus 会依赖数据库的自增机制来生成主键。
- 使用场景:适用于单表操作,且数据库支持主键自增的场景。
- 配置方式:在实体类的主键字段上使用
@TableId(type = IdType.AUTO)
注解来指定。
2. INPUT(用户输入)
- 描述:该策略假定主键值由用户(或开发者)在插入数据前手动设置。如果主键是自定义的,或者需要从外部系统获取,那么 INPUT 策略是一个很好的选择。
- 使用场景:适用于需要手动设置主键的场景,比如当主键是业务相关或者需要从外部系统获取时。
- 配置方式:在实体类的主键字段上使用
@TableId(type = IdType.INPUT)
注解来指定。
3. ASSIGN_ID(雪花算法)
- 描述:雪花算法(SnowFlake)是 Twitter 开源的分布式 ID 生成算法,它能够生成一个 64 位的唯一 ID。该算法在分布式系统中应用广泛,因为它能够在不依赖数据库的情况下生成全局唯一的 ID,并且 ID 呈递增趋势。
- 使用场景:适用于分布式系统,且需要全局唯一递增 ID 的场景。
- 配置方式:在实体类的主键字段上使用
@TableId(type = IdType.ASSIGN_ID)
注解来指定。如果不指定 type,MyBatis-Plus 默认也会使用 ASSIGN_ID 策略(自 3.3.0 版本起)。
4. ASSIGN_UUID(不含中划线的UUID)
- 描述:该策略使用 UUID(Universally Unique Identifier)作为主键,但与标准的 UUID 不同的是,它生成的是不含中划线的 UUID 字符串。UUID 是一种由 32 个十六进制数字组成的字符串,理论上能够保证全局唯一。
- 使用场景:适用于需要全局唯一主键,但不关心主键递增性的场景。
- 配置方式:在实体类的主键字段上使用
@TableId(type = IdType.ASSIGN_UUID)
注解来指定。
5. NONE(无状态)
- 描述:NONE 策略表示不使用任何主键生成策略,需要开发者手动设置主键值。这实际上是一种特殊的 INPUT 策略,但它没有显式地指出主键是由用户输入的。
- 使用场景:在特殊情况下,当开发者想要完全控制主键的生成过程时,可以使用 NONE 策略。
- 配置方式:在实体类的主键字段上使用
@TableId(type = IdType.NONE)
注解来指定。但请注意,如果不设置 type 属性,且全局配置中也未指定主键生成策略,那么 MyBatis-Plus 可能会默认使用 AUTO 或其他策略。