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

mybatis-plus主鍵生成策略

 更新時間:2020年08月27日 10:38:40   作者:愛瑪999  
這篇文章主要介紹了mybatis-plus主鍵生成策略,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧

MP 支持多種主鍵策略 默認是推特的“” 雪花算法“” ,也可以設(shè)置其他策略下面我演示主鍵策略使用

MP的主鍵定義在一個一個枚舉類中 源碼如下

public enum IdType {
  AUTO(0),//數(shù)據(jù)庫自增 依賴數(shù)據(jù)庫
  NONE(1),// 表示該類型未甚至主鍵類型 (如果沒有主鍵策略)默認根據(jù)雪花算法生成
  INPUT(2),//用戶輸入ID(該類型可以通過自己注冊填充插件進行填充)
  //下面這三種類型,只有當插入對象id為空時 才會自動填充。
  ID_WORKER(3),//全局唯一(idWorker)數(shù)值類型
  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,局部主鍵策略實現(xiàn)

在實體類中 ID屬性加注解

@TableId(type = IdType.AUTO) 主鍵自增 數(shù)據(jù)庫中需要設(shè)置主鍵自增
private Long id;
@TableId(type = IdType.NONE) 默認 跟隨全局策略走
private Long id;
@TableId(type = IdType.UUID) UUID類型主鍵
private Long id;
@TableId(type = IdType.ID_WORKER) 數(shù)值類型 數(shù)據(jù)庫中也必須是數(shù)值類型 否則會報錯
private Long id;
@TableId(type = IdType.ID_WORKER_STR) 字符串類型  數(shù)據(jù)庫也要保證一樣字符類型
private Long id;
@TableId(type = IdType.INPUT) 用戶自定義了 數(shù)據(jù)類型和數(shù)據(jù)庫保持一致就行
private Long id;

2,全局主鍵策略實現(xiàn)

 需要在application.yml文件中

添加

mybatis-plus:
 mapper-locations:
  - com/mp/mapper/*
 global-config:
  db-config:
   id-type: uuid/none/input/id_worker/id_worker_str/auto  表示全局主鍵都采用該策略(如果全局策略和局部策略都有設(shè)置,局部策略優(yōu)先級高)

  Mybatis-Plus中另外的幾種主鍵生成策略

 1、分布式系統(tǒng)中主鍵的生成策略

​ 在分布式系統(tǒng)中,常見的主鍵生成策略有以下幾種:

1.1 數(shù)據(jù)庫自增長序列或字段

​ 最常見的方式。利用數(shù)據(jù)庫,全數(shù)據(jù)庫唯一。

​ 優(yōu)點:

​ 1)簡單,代碼方便,性能可以接受。

​ 2)數(shù)字ID天然排序,對分頁或者需要排序的結(jié)果很有幫助。

​ 缺點:

​ 1)不同數(shù)據(jù)庫語法和實現(xiàn)不同,數(shù)據(jù)庫遷移的時候或多數(shù)據(jù)庫版本支持的時候需要處理。

​ 2)在單個數(shù)據(jù)庫或讀寫分離或一主多從的情況下,只有一個主庫可以生成。有單點故障的風險。

​ 3)在性能達不到要求的情況下,比較難于擴展。

​ 4)如果遇見多個系統(tǒng)需要合并或者涉及到數(shù)據(jù)遷移會相當痛苦。

​ 5)分表分庫的時候會有麻煩。

​ 優(yōu)化方案:

​ 針對主庫單點,如果有多個Master庫,則每個Master庫設(shè)置的起始數(shù)字不一樣,步長一樣,可以是Master的個數(shù)。比如:Master1 生成的是 1,4,7,10,Master2生成的是2,5,8,11 Master3生成的是 3,6,9,12。這樣就可以有效生成集群中的唯一ID,也可以大大降低ID生成數(shù)據(jù)庫操作的負載。類似于Redis的生成策略

1.2 UUID

​ 常見的方式??梢岳脭?shù)據(jù)庫也可以利用程序生成,一般來說全球唯一。

​ 優(yōu)點:

​ 1)簡單,代碼方便。

​ 2)生成ID性能非常好,基本不會有性能問題。

​ 3)全球唯一,在遇見數(shù)據(jù)遷移,系統(tǒng)數(shù)據(jù)合并,或者數(shù)據(jù)庫變更等情況下,可以從容應(yīng)對。

 缺點:

​ 1)沒有排序,無法保證趨勢遞增。

​ 2)UUID往往是使用字符串存儲,查詢的效率比較低。

​ 3)存儲空間比較大,如果是海量數(shù)據(jù)庫,就需要考慮存儲量的問題。

​ 4)傳輸數(shù)據(jù)量大

​ 5)可讀性差

1.3 UUID to Int64

​ UUID的變種:解決了UUID可讀性差和無序的問題

1.4 Redis生成ID

​ 當使用數(shù)據(jù)庫來生成ID性能不夠要求的時候,我們可以嘗試使用Redis來生成ID。這主要依賴于Redis是單線程的,所以也可以用生成全局唯一的ID。可以用Redis的原子操作 INCR和INCRBY來實現(xiàn)。

​ 可以使用Redis集群來獲取更高的吞吐量。假如一個集群中有5臺Redis??梢猿跏蓟颗_Redis的值分別是1,2,3,4,5,然后步長都是5。各個Redis生成的ID為:

​ A:1,6,11,16,21

​ B:2,7,12,17,22

​ C:3,8,13,18,23

​ D:4,9,14,19,24

​ E:5,10,15,20,25

​ 這個,隨便負載到哪個機確定好,未來很難做修改。但是3-5臺服務(wù)器基本能夠滿足器上,都可以獲得不同的ID。但是步長和初始值一定需要事先需要了。使用Redis集群也可以方式單點故障的問題。

​ 另外,比較適合使用Redis來生成每天從0開始的流水號。比如訂單號=日期+當日自增長號??梢悦刻煸赗edis中生成一個Key,使用INCR進行累加。

​ 優(yōu)點:

​ 1)不依賴于數(shù)據(jù)庫,靈活方便,且性能優(yōu)于數(shù)據(jù)庫。

​ 2)數(shù)字ID天然排序,對分頁或者需要排序的結(jié)果很有幫助。

​ 缺點:

​ 1)如果系統(tǒng)中沒有Redis,還需要引入新的組件,增加系統(tǒng)復(fù)雜度。

​ 2)需要編碼和配置的工作量比較大。

1.5 Twitter的snowflake算法 (雪花算法)

​ snowflake是Twitter開源的分布式ID生成算法,結(jié)果是一個long型的ID。其核心思想是:使用41bit作為毫秒數(shù),10bit作為機器的ID(5個bit是數(shù)據(jù)中心,5個bit的機器ID),12bit作為毫秒內(nèi)的流水號(意味著每個節(jié)點在每毫秒可以產(chǎn)生 4096 個 ID),最后還有一個符號位,永遠是0。具體實現(xiàn)的代碼可以參看https://github.com/twitter/snowflake。

​ snowflake算法可以根據(jù)自身項目的需要進行一定的修改。比如估算未來的數(shù)據(jù)中心個數(shù),每個數(shù)據(jù)中心的機器數(shù)以及統(tǒng)一毫秒可以能的并發(fā)數(shù)來調(diào)整在算法中所需要的bit數(shù)。

​ 優(yōu)點:

​ 1)不依賴于數(shù)據(jù)庫,靈活方便,且性能優(yōu)于數(shù)據(jù)庫。

​ 2)ID按照時間在單機上是遞增的。

​ 缺點:

​ 1)在單機上是遞增的,但是由于涉及到分布式環(huán)境,每臺機器上的時鐘不可能完全同步,也許有時候也會出現(xiàn)不是全局遞增的情況。

​ MP中的ID_WORKER就是使用的這種算法

1.6 zookeeper生成唯一ID

​ zookeeper主要通過其znode數(shù)據(jù)版本來生成序列號,可以生成32位和64位的數(shù)據(jù)版本號,客戶端可以使用這個版本號來作為唯一的序列號。
​ 很少會使用zookeeper來生成唯一ID。主要是由于需要依賴zookeeper,并且是多步調(diào)用API,如果在競爭較大的情況下,需要考慮使用分布式鎖。因此,性能在高并發(fā)的分布式環(huán)境下,也不甚理想。

1.7 MongoDB的ObjectId

​ MongoDB的ObjectId和snowflake算法類似。它設(shè)計成輕量型的,不同的機器都能用全局唯一的同種方法方便地生成它。MongoDB 從一開始就設(shè)計用來作為分布式數(shù)據(jù)庫,處理多個節(jié)點是一個核心要求。使其在分片環(huán)境中要容易生成得多。

到此這篇關(guān)于mybatis-plus主鍵生成策略的文章就介紹到這了,更多相關(guān)mybatis-plus 主鍵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 將數(shù)據(jù)加載到內(nèi)存中的操作

    java 將數(shù)據(jù)加載到內(nèi)存中的操作

    這篇文章主要介紹了java 將數(shù)據(jù)加載到內(nèi)存中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java RPC框架熔斷降級機制原理解析

    Java RPC框架熔斷降級機制原理解析

    這篇文章主要介紹了Java RPC框架熔斷降級機制原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-02-02
  • java實現(xiàn)微信小程序登錄態(tài)維護的示例代碼

    java實現(xiàn)微信小程序登錄態(tài)維護的示例代碼

    本篇文章主要介紹了java實現(xiàn)微信小程序登錄態(tài)維護的示例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-09-09
  • spring源碼下載、編譯、debug的詳細教程

    spring源碼下載、編譯、debug的詳細教程

    這篇文章主要介紹了spring源碼下載、編譯、debug的詳細教程,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot之controller參數(shù)校驗詳解

    SpringBoot之controller參數(shù)校驗詳解

    介紹了Java中使用@Validated和@Valid進行參數(shù)校驗的方法,包括不同標簽的使用場景、基本屬性和一些常用的注解類型,同時,還討論了如何在控制器中使用這些校驗標簽,以及如何處理校驗結(jié)果和自定義錯誤消息,最后,還介紹了如何實現(xiàn)分組校驗和嵌套校驗,并提供了一些示例代碼
    2024-11-11
  • Java系統(tǒng)變量參數(shù)獲取設(shè)置System.getProperties()的方法

    Java系統(tǒng)變量參數(shù)獲取設(shè)置System.getProperties()的方法

    這篇文章主要介紹了Java系統(tǒng)變量參數(shù)System.getProperties()獲取設(shè)置方法,文末給大家提到了Systm.getenv()與System.getProperties()區(qū)別,需要的朋友可以參考下
    2022-01-01
  • SpringBoot Jackson日期格式化統(tǒng)一配置的實現(xiàn)

    SpringBoot Jackson日期格式化統(tǒng)一配置的實現(xiàn)

    Spring項目中經(jīng)常需要配置日期時間格式格式,本文主要介紹了SpringBoot Jackson日期格式化統(tǒng)一配置的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-08-08
  • SSM+微信小程序?qū)崿F(xiàn)物業(yè)管理系統(tǒng)及實例代碼

    SSM+微信小程序?qū)崿F(xiàn)物業(yè)管理系統(tǒng)及實例代碼

    這篇文章主要介紹了SSM+微信小程序?qū)崿F(xiàn)物業(yè)管理系統(tǒng),ssm微信小程序物業(yè)管理系統(tǒng),有網(wǎng)站后臺管理系統(tǒng),本文通過實例代碼給大家展示系統(tǒng)的功能,需要的朋友可以參考下
    2022-02-02
  • MyBatis查詢?、修改?、刪除操作示例代碼

    MyBatis查詢?、修改?、刪除操作示例代碼

    MyBatis?作為一款靈活的持久層框架,提供了直接編寫?SQL?語句的能力,避免了其他?ORM?框架可能帶來的性能和功能限制,本文介紹?MyBatis?中如何高效執(zhí)行這三種操作,并通過代碼示例展示最佳實踐,感興趣的朋友一起看看吧
    2024-08-08
  • SpringBoot2.3新特性優(yōu)雅停機詳解

    SpringBoot2.3新特性優(yōu)雅停機詳解

    這篇文章主要介紹了SpringBoot2.3新特性優(yōu)雅停機詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-05-05

最新評論

莎车县| 汉川市| 额敏县| 桐柏县| 鸡西市| 油尖旺区| 永泰县| 炉霍县| 涪陵区| 美姑县| 苏尼特左旗| 东台市| 霍山县| 林芝县| 囊谦县| 额济纳旗| 扎兰屯市| 安乡县| 临夏县| 荔浦县| 濮阳市| 常德市| 津市市| 长治市| 绵竹市| 清远市| 东台市| 织金县| 乌拉特前旗| 宁远县| 永定县| 黑龙江省| 博野县| 蒲城县| 江门市| 蒙自县| 曲阜市| 兴国县| 根河市| 美姑县| 墨玉县|