MP 支持多種主鍵策略 默認是推特的“” 雪花算法“” ,也可以設置其他策略下面我演示主鍵策略使用
MP的主鍵定義在一個一個枚舉類中 源碼如下
public enum IdType {
AUTO(0),//數據庫自增 依賴數據庫
NONE(1),// 表示該類型未甚至主鍵類型 (如果沒有主鍵策略)默認根據雪花算法生成
INPUT(2),//用戶輸入ID(該類型可以通過自己注冊填充插件進行填充)
//下面這三種類型,只有當插入對象id為空時 才會自動填充。
ID_WORKER(3),//全局唯一(idWorker)數值類型
UUID(4),//全局唯一(UUID)
ID_WORKER_STR(5);//全局唯一(idWorker的字符串表示)
private final int key;
private IdType(int key) {
this.key = key;
}
public int getKey() {
return this.key;
}
}
1,局部主鍵策略實現
在實體類中 ID屬性加注解
@TableId(type = IdType.AUTO) 主鍵自增 數據庫中需要設置主鍵自增
private Long id;
@TableId(type = IdType.NONE) 默認 跟隨全局策略走
private Long id;
@TableId(type = IdType.UUID) UUID類型主鍵
private Long id;
@TableId(type = IdType.ID_WORKER) 數值類型 數據庫中也必須是數值類型 否則會報錯
private Long id;
@TableId(type = IdType.ID_WORKER_STR) 字符串類型 數據庫也要保證一樣字符類型
private Long id;
@TableId(type = IdType.INPUT) 用戶自定義了 數據類型和數據庫保持一致就行
private Long id;
2,全局主鍵策略實現
需要在application.yml文件中
添加
mybatis-plus:
mapper-locations:
- com/mp/mapper/*
global-config:
db-config:
id-type: uuid/none/input/id_worker/id_worker_str/auto 表示全局主鍵都采用該策略(如果全局策略和局部策略都有設置,局部策略優先級高)