最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis-plus?如何使用雪花算法ID生成策略

 更新時間:2021年12月03日 14:54:22   作者:WannaRunning  
這篇文章主要介紹了mybatis-plus如何使用雪花算法ID生成策略,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

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

@TableId(value="id",type=IdType.ASSIGN_ID)
描述
AUTO 數(shù)據(jù)庫ID自增
NONE 無狀態(tài),該類型為未設(shè)置主鍵類型(注解里等于跟隨全局,全局里約等于 INPUT)
INPUT insert前自行set主鍵值
ASSIGN_ID 分配ID(主鍵類型為Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默認(rèn)實(shí)現(xiàn)類為DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID 分配UUID,主鍵類型為String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默認(rèn)default方法)
ID_WORKER 分布式全局唯一ID 長整型類型(please use ASSIGN_ID)
UUID 32位UUID字符串(please use ASSIGN_UUID)
ID_WORKER_STR 分布式全局唯一ID 字符串類型(please use ASSIGN_ID)

上面的注解設(shè)置了值,對應(yīng)在MybatisDefaultParameterHandler中有判斷這個類型和設(shè)置ID的處理,判斷idType.getKey() == IdType.ASSIGN_ID.getKey()時,使用identifierGenerator.nextId(entity)創(chuàng)建了一個雪花算法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版本后默認(rèn)就是使用 IdType.ASSIGN_ID,即雪花算法,如果需要使用主鍵自增,則需要修改IdType.AUTO

看一下源碼大概找一下雪花算法的實(shí)現(xiàn)方式

首先來看主鍵生成策略的接口是IdentifierGenerator。mp中默認(rèn)有一個實(shí)現(xiàn)類就是DefaultIdentifierGenerator,這個就是雪花算法的實(shí)現(xiàn)類。這個類中使用的Sequence就是雪花算法的實(shí)現(xiàn)類了。

如果想自己創(chuàng)建雪花算法手動創(chuàng)建ID怎么辦

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

Long id=IdWorker.getIdStr()

自定義ID生成器實(shí)現(xiàn)

第一種,使用spring掃描注解創(chuàng)建bean使用

@Component
public class CustomIdGenerator implements IdentifierGenerator {
    @Override
    public Long nextId(Object entity) {
       //可以將當(dāng)前傳入的class全類名來作為bizKey,或者提取參數(shù)來生成bizKey進(jìn)行分布式Id調(diào)用生成.
       String bizKey = entity.getClass().getName();
        //根據(jù)bizKey調(diào)用分布式ID生成
        long id = ....;
       //返回生成的id值即可.
        return id;
    }
}

第二種,直接把寫好的CustomIdGenerator實(shí)現(xiàn)類配置為一個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());
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java多線程常見案例分析線程池與單例模式及阻塞隊列

    Java多線程常見案例分析線程池與單例模式及阻塞隊列

    這篇文章主要介紹了多線程的常見案例,線程池(重點(diǎn))、單例模式、阻塞隊列,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 在webservice里調(diào)用耗時方法出錯的解決方案

    在webservice里調(diào)用耗時方法出錯的解決方案

    這篇文章主要介紹了在webservice里調(diào)用耗時方法出錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • springboot如何獲取接口下所有實(shí)現(xiàn)類

    springboot如何獲取接口下所有實(shí)現(xiàn)類

    這篇文章主要介紹了springboot如何獲取接口下所有實(shí)現(xiàn)類問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • MyBatis ORM映射方式示例詳解

    MyBatis ORM映射方式示例詳解

    MyBatis作為一種靈活且強(qiáng)大的ORM框架,提供了多種映射方式,包括基于XML的映射、基于注解的映射以及混合映射,這篇文章主要介紹了MyBatis ORM映射方式詳解,需要的朋友可以參考下
    2024-12-12
  • Java的枚舉,注解和反射(一)

    Java的枚舉,注解和反射(一)

    今天小編就為大家分享一篇關(guān)于Java枚舉,注解與反射原理說明,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-07-07
  • 基于Spring Security實(shí)現(xiàn)對密碼進(jìn)行加密和校驗

    基于Spring Security實(shí)現(xiàn)對密碼進(jìn)行加密和校驗

    我們在入門案例中,其實(shí)已經(jīng)是一個非常簡單的認(rèn)證,但是用戶名是寫死的,密碼也需要從控制臺查看,很顯然實(shí)際中并不能這么做,下面的學(xué)習(xí)中,我們來實(shí)現(xiàn)基于內(nèi)存模型的認(rèn)證以及用戶的自定義認(rèn)證,密碼加密等內(nèi)容,需要的朋友可以參考下
    2024-07-07
  • IDEA Ultimate2020.2版本配置Tomcat詳細(xì)教程

    IDEA Ultimate2020.2版本配置Tomcat詳細(xì)教程

    這篇文章主要介紹了IDEA Ultimate2020.2版本配置Tomcat教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Spring-boot oauth2使用RestTemplate進(jìn)行后臺自動登錄的實(shí)現(xiàn)

    Spring-boot oauth2使用RestTemplate進(jìn)行后臺自動登錄的實(shí)現(xiàn)

    這篇文章主要介紹了Spring-boot oauth2使用RestTemplate進(jìn)行后臺自動登錄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot中利用@Valid和@Validated進(jìn)行參數(shù)校驗

    SpringBoot中利用@Valid和@Validated進(jìn)行參數(shù)校驗

    為了保證數(shù)據(jù)的正確性、完整性,前后端都需要進(jìn)行數(shù)據(jù)檢驗,作為一名后端開發(fā)工程師,不能僅僅依靠前端來校驗數(shù)據(jù),我們還需要對接口請求的參數(shù)進(jìn)行后端的校驗,所以本文給大家介紹了SpringBoot中利用@Valid和@Validated進(jìn)行參數(shù)校驗,需要的朋友可以參考下
    2024-09-09
  • Spring中的ContextLoaderListener詳細(xì)解析

    Spring中的ContextLoaderListener詳細(xì)解析

    這篇文章主要介紹了Spring中的ContextLoaderListener詳細(xì)解析,在web容器即Tomact容器啟動web應(yīng)用即servlet應(yīng)用時,會觸發(fā)ServletContextEvent時間,這個事件會被ServletContextListener監(jiān)聽,需要的朋友可以參考下
    2023-12-12

最新評論

珲春市| 惠水县| 东海县| 宁武县| 海门市| 慈利县| 双城市| 涡阳县| 满洲里市| 兴义市| 安图县| 余干县| 四会市| 开江县| 深州市| 陆丰市| 新巴尔虎右旗| 郧西县| 聂荣县| 奉节县| 邵阳县| 阿克陶县| 民乐县| 新泰市| 上犹县| 谷城县| 凌云县| 额敏县| 永州市| 南陵县| 海盐县| 任丘市| 鞍山市| 利辛县| 麟游县| 桐柏县| 华安县| 伽师县| 瑞昌市| 南汇区| 若尔盖县|