mybatis plus主键标注
时间: 2025-05-17 19:47:38 浏览: 72
### MyBatis Plus 中主键生成策略及其标注方法
在 MyBatis Plus 中,可以通过 `@TableId` 注解为主键字段指定不同的生成策略。常见的主键生成方式包括数据库自增、UUID、雪花算法等。对于某些特定场景,可以使用 `@KeySequence` 注解配合序列(Sequence)实现主键生成。
#### 数据库主键自增
当数据库本身支持主键自增时,可以在实体类中通过如下方式进行配置:
```java
@TableId(type = IdType.AUTO)
private Long id;
```
这种方式适用于 MySQL 的 AUTO_INCREMENT 或 Oracle 的 SEQUENCE[^1]。
---
#### UUID 主键生成
如果希望使用 UUID 作为主键,则可以选择以下配置:
```java
@TableId(type = IdType.UUID)
private String id;
```
该策略会自动为新记录生成一个基于 UUID 的字符串型主键[^2]。
---
#### 雪花算法 (Snowflake Algorithm)
MyBatis Plus 提供了内置的雪花算法用于分布式环境下的唯一 ID 生产。可通过以下方式启用:
```java
@TableId(type = IdType.ASSIGN_ID)
private Long id;
```
这种策略适合高并发场景下生成全局唯一的长整型主键[^3]。
---
#### 自定义主键值 (手动输入)
有时开发者可能需要完全控制主键值的生成逻辑,在这种情况下可以设置主键类型为 `INPUT` 并自行赋值给主键属性:
```java
@Data
@KeySequence(value = "SEQ_ACL_ROLE", clazz = Integer.class) // 定义使用的 Sequence 名称
public class AclUser implements Serializable {
private static final long serialVersionUID = 780903014942735924L;
@TableId(value = "ID", type = IdType.INPUT)
private Integer id;
}
```
上述代码片段展示了如何利用 `@KeySequence` 注解绑定数据库中的序列对象,并将其应用于主键生成过程。需要注意的是,这种方法依赖于底层数据库的支持(如 PostgreSQL 和 Oracle),因此需确保目标表已创建相应的序列资源。
---
#### 综合示例
假设有一个名为 `user_info` 的数据表以及对应的 Java 实体类 `UserInfo`,以下是完整的主键配置案例:
```java
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import org.springframework.data.annotation.KeySequence;
@Data
@KeySequence(value = "USER_INFO_SEQ") // 关联数据库中的 USER_INFO_SEQ 序列
public class UserInfo {
@TableId(value = "id", type = IdType.INPUT)
private Long id; // 手动填充或由 KeySequence 自动生成
private String username;
private String email;
}
```
在此基础上,框架会在保存操作前调用指定的序列获取下一个可用编号并赋予至 `id` 属性。
---
### 注意事项
- 如果采用 `ASSIGN_ID` 类型,则无需额外编码即可完成高效可靠的主键分配。
- 对于复杂业务需求或者跨平台兼容考虑,请优先选用标准化方案而非硬编码固定规则。
- 当项目涉及多套异构存储引擎时应审慎评估各选项优劣再做决定[^4]。
阅读全文
相关推荐


















