Mybatis Plus ID生成器
本文最后更新于:2024年9月8日 晚上
Mybatis Plus ID生成器
实体类字段注解@TableId(type=IdType.)
- 自3.3.0开始,默认使用雪花算法+UUID(不含中划线)
值 |
描述 |
AUTO |
数据库ID自增 |
NONE |
无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) |
INPUT |
insert前自行set主键值 |
ASSIGN_ID |
分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator 的方法nextId (默认实现类为DefaultIdentifierGenerator 雪花算法) |
ASSIGN_UUID |
分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator 的方法nextUUID (默认default方法) |
ID_WORKER |
分布式全局唯一ID 长整型类型(please use ASSIGN_ID ) |
UUID |
32位UUID字符串(please use ASSIGN_UUID ) |
ID_WORKER_STR |
分布式全局唯一ID 字符串类型(please use ASSIGN_ID ) |
自定义ID生成器
方法 |
主键生成策略 |
主键类型 |
说明 |
nextId |
ASSIGN_ID, ID_WORKER, ID_WORKER_STR |
Long,Integer,String |
支持自动转换为String类型,但数值类型不支持自动转换,需精准匹配,例如返回Long,实体主键就不支持定义为Integer |
nextUUID |
ASSIGN_UUID, UUID |
String |
默认不含中划线的UUID生成 |
方式一:声明为bean供spring扫描注入
1 2 3 4 5 6 7 8 9 10 11 12
| @Component public class CustomIdGenerator implements IdentifierGenerator { @Override public Long nextId(Object entity) { String bizKey = entity.getClass().getName(); long id = ....; return id; } }
|
方式二:使用配置类
1 2 3 4
| @Bean public IdentifierGenerator idGenerator() { return new CustomIdGenerator(); }
|
方式三:通过MybatisPlusPropertiesCustomizer自定义
1 2 3 4
| @Bean public MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() { return plusProperties -> plusProperties.getGlobalConfig().setIdentifierGenerator(new CustomIdGenerator()); }
|