您好,登錄后才能下訂單哦!
本篇內容介紹了“mybatis-plus怎么使用雪花算法ID生成策略”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
@TableId(value="id",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_WORKER | 分布式全局唯一ID 長整型類型(please use ASSIGN_ID) |
UUID | 32位UUID字符串(please use ASSIGN_UUID) |
ID_WORKER_STR | 分布式全局唯一ID 字符串類型(please use ASSIGN_ID) |
上面的注解設置了值,對應在MybatisDefaultParameterHandler中有判斷這個類型和設置ID的處理,判斷idType.getKey() == IdType.ASSIGN_ID.getKey()時,使用identifierGenerator.nextId(entity)創建了一個雪花算法ID。
protected static void populateKeys(TableInfo tableInfo, MetaObject metaObject, Object entity) { IdType idType = tableInfo.getIdType(); String keyProperty = tableInfo.getKeyProperty(); if (StringUtils.isNotBlank(keyProperty) && null != idType && idType.getKey() >= 3) { IdentifierGenerator identifierGenerator = GlobalConfigUtils.getGlobalConfig(tableInfo.getConfiguration()).getIdentifierGenerator(); Object idValue = metaObject.getValue(keyProperty); if (StringUtils.checkValNull(idValue)) { if (idType.getKey() == IdType.ASSIGN_ID.getKey()) { if (Number.class.isAssignableFrom(tableInfo.getKeyType())) { metaObject.setValue(keyProperty, identifierGenerator.nextId(entity)); } else { metaObject.setValue(keyProperty, identifierGenerator.nextId(entity).toString()); } } else if (idType.getKey() == IdType.ASSIGN_UUID.getKey()) { metaObject.setValue(keyProperty, identifierGenerator.nextUUID(entity)); } } } }
3.X版本后默認就是使用 IdType.ASSIGN_ID,即雪花算法,如果需要使用主鍵自增,則需要修改IdType.AUTO
首先來看主鍵生成策略的接口是IdentifierGenerator。mp中默認有一個實現類就是DefaultIdentifierGenerator,這個就是雪花算法的實現類。這個類中使用的Sequence就是雪花算法的實現類了。
如果想自己創建雪花算法手動創建ID怎么辦
com.baomidou.mybatisplus.core.toolkit包下有一個IdWork的類,這個類就是使用上面的DefaultIdentifierGenerator來獲取雪花算法ID,我們可以直接使用IdWork同名方法getId或者getIdStr來手動獲取一個雪花算法ID。
Long id=IdWorker.getIdStr()
第一種,使用spring掃描注解創建bean使用
@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; } }
第二種,直接把寫好的CustomIdGenerator實現類配置為一個bean
@Bean public IdentifierGenerator idGenerator() { return new CustomIdGenerator(); }
public static void main(String[] args) { // 返回值 1385106677482582018 System.out.println(IdWorker.getId()); // 返回值 "1385106677482582019" System.out.println(IdWorker.getIdStr()); }
“mybatis-plus怎么使用雪花算法ID生成策略”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。