关于MYSQL中ID自动生成问题

发布于:2025-07-31 ⋅ 阅读:(26) ⋅ 点赞:(0)

一、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)

网站公告

今日签到

点亮在社区的每一天
去签到