一、MyBatis-Plus中Id生成策略如下
1.数据库自增(AUTO)
- 依赖数据库的自增主键:AUTO_INCREMENT
- 配置:
@TableId(type = IdType.AUTO
- 要求:数据库表的ID字段必须设值为自增类型
2.雪花算法
- MyBatis-Plus
默认
的分布式ID生成策略,基于雪花算法(Snowflake) - 生成19位长整形ID,适合分布式系统
- 配置
@TableId(type = IdType.ASSIGN_ID
或不指定(默认)
3.UUID生成(ASSIGN_UUID)
- 生成32位UUID字符串,不带中划线
- 配置
@TableId(type = IdType.ASSIGN_UUID)
4.手动输入(INPUT)
- 需要手动设置 ID 值,否则会报错
- 配置:
@TableId(type = IdType.INPUT)
5.其他策略
- NONE:未设置主键类型,跟随全局策略
- ID_WORKER/ID_WORKER_STR:已过时,推荐使用 ASSIGN_ID
示例代码
public class User {
// 数据库自增
@TableId(type = IdType.AUTO)
private Long id;
// 雪花算法生成
// @TableId(type = IdType.ASSIGN_ID)
// private Long id;
// UUID生成
// @TableId(type = IdType.ASSIGN_UUID)
// private String id;
// 其他字段...
}
全局配置方式(在配置类中):
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 全局设置主键生成策略
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setDbConfig(new GlobalConfig.DbConfig()
.setIdType(IdType.ASSIGN_ID)); // 全局使用雪花算法
return interceptor;
}
选择哪种 ID 生成策略取决于具体场景:
- 单机应用:推荐使用数据库自增(AUTO)
- 分布式应用:推荐使用雪花算法(ASSIGN_ID)
- 需要字符串 ID:可使用 UUID 策略(ASSIGN_UUID)