Mybatis Plus 為我們提供了三種設置 主鍵生成策略的方式。它們的優先級順序是:局部注解 > 全局 > 默認(雪花算法)。下面我們來一一介紹
局部和全局設置舉例
全局設置
自3.3.0開始,默認使用雪花算法+UUID(不含中划線)
自定義ID生成器
Spring-Boot
方式一:聲明為Bean供Spring掃描注入
@Component public class CustomIdGenerator implements IdentifierGenerator { @Override public Long nextId(Object entity) { //可以將當前傳入的class全類名來作為bizKey,或者提取參數來生成bizKey進行分布式Id調用生成. String bizKey = entity.getClass().getName(); //根據bizKey調用分布式ID生成 long id = ....; //返回生成的id值即可. return id; } }
方式二:使用配置類
@Bean public IdentifierGenerator idGenerator() { return new CustomIdGenerator(); }
方式三:通過MybatisPlusPropertiesCustomizer自定義
@Bean public MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() { return plusProperties -> plusProperties.getGlobalConfig().setIdentifierGenerator(new CustomIdGenerator()); }
@TableId(type = IdType.ASSIGN_ID)
值 | 描述 |
---|---|
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 長整型類型(please use ASSIGN_ID ) |
|
32位UUID字符串(please use ASSIGN_UUID ) |
|
分布式全局唯一ID 字符串類型(please use ASSIGN_ID ) |
特別說明:
1、如果設置類型是AUTO自增策略,數據庫字段一定設置自增
2、創建時間,修改時間設置,數據庫級別和代碼級別(不建議數據庫級別)設計思路:繼承類,重寫方法