91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

宁明县| 河南省| 上蔡县| 庐江县| 自治县| 阳东县| 康定县| 泗洪县| 永修县| 纳雍县| 芦溪县| 静海县| 高尔夫| 宣威市| 安仁县| 岱山县| 玛曲县| 古蔺县| 忻州市| 库车县| 卓资县| 宜川县| 龙江县| 施秉县| 喀喇| 商丘市| 淳化县| 和顺县| 红河县| 富裕县| 囊谦县| 锡林浩特市| 宝山区| 瑞金市| 洛川县| 康平县| 故城县| 溆浦县| 恩平市| 民勤县| 北流市|