中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mybatis-plus怎么使用雪花算法ID生成策略

發布時間:2021-12-03 16:25:41 來源:億速云 閱讀:3632 作者:iii 欄目:開發技術

本篇內容介紹了“mybatis-plus怎么使用雪花算法ID生成策略”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

mybatis-plus 可以通過@TableId注解指定主鍵生成策略

@TableId(value="id",type=IdType.ASSIGN_ID)
描述
AUTO數據庫ID自增
NONE無狀態,該類型為未設置主鍵類型(注解里等于跟隨全局,全局里約等于 INPUT)
INPUTinsert前自行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)
UUID32位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就是雪花算法的實現類了。

mybatis-plus怎么使用雪花算法ID生成策略

mybatis-plus怎么使用雪花算法ID生成策略

mybatis-plus怎么使用雪花算法ID生成策略

如果想自己創建雪花算法手動創建ID怎么辦

com.baomidou.mybatisplus.core.toolkit包下有一個IdWork的類,這個類就是使用上面的DefaultIdentifierGenerator來獲取雪花算法ID,我們可以直接使用IdWork同名方法getId或者getIdStr來手動獲取一個雪花算法ID。

Long id=IdWorker.getIdStr()

自定義ID生成器實現

第一種,使用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();
}

Mybatis-plus 中生成雪花算法id的工具類

public static void main(String[] args) {
    // 返回值  1385106677482582018
    System.out.println(IdWorker.getId());
    // 返回值 "1385106677482582019"
    System.out.println(IdWorker.getIdStr());
}

“mybatis-plus怎么使用雪花算法ID生成策略”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博白县| 顺平县| 交城县| 陕西省| 偏关县| 神木县| 略阳县| 鄂尔多斯市| 葵青区| 佛冈县| 建水县| 高唐县| 马龙县| 泗洪县| 普安县| 探索| 乐亭县| 株洲市| 仲巴县| 荃湾区| 东光县| 香港| 丹阳市| 新巴尔虎左旗| 东乡| 都江堰市| 囊谦县| 富民县| 平罗县| 青阳县| 长子县| 瓮安县| 周宁县| 中超| 丰顺县| 峨边| 莲花县| 长沙县| 天峻县| 尼勒克县| 那坡县|