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

MybatisPlus 主鍵策略的幾種實(shí)現(xiàn)方法

 更新時(shí)間:2024年10月18日 11:45:16   作者:伍拾貳i  
MybatisPlus-Plus支持多種主鍵生成策略,可以通過(guò)@TableId注解的type屬性配置,主要策略包括AUTO、INPUT、ASSING_ID、ASSING_UUID和NONE,每種策略適用于不同的場(chǎng)景,下面就來(lái)介紹一下

MybatisPlus-Plus提供了多種主鍵生成策略,我們可以通過(guò)@TableId注解的 類(lèi)型屬性來(lái)設(shè)置主鍵id的增長(zhǎng)策略,一共有幾個(gè)多個(gè)主鍵策略,可根據(jù)情況自由配置。

主鍵策略

1、AUTO(自動(dòng)增長(zhǎng)策略)

AUTO自動(dòng)增長(zhǎng)策略,對(duì)于像MySQL這樣的支持主鍵自動(dòng)遞增的數(shù)據(jù)庫(kù),我們可以使用IdType.AUTO策略。

@Data
public class UserInfo {
    //指定主鍵使用數(shù)據(jù)庫(kù)ID自增策略
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String userName;
    private String passWord;
}

2、INPUT(插入前自行設(shè)置主鍵值)

自定義輸入策略:如果不想使用數(shù)據(jù)庫(kù)的自增主鍵,也可以使用INPUT進(jìn)行自己傳遞主鍵即可,進(jìn)行插入工作,但在插入之前一定要檢查數(shù)據(jù)庫(kù)是否已經(jīng)存在了該主鍵。

(1)針對(duì)有序列的數(shù)據(jù)庫(kù):Oracle,SQLServer等,當(dāng)需要建立一個(gè)自增序列時(shí),需要用到序列。

提示:
在Oracle 11g中,設(shè)置自增擴(kuò),需要先創(chuàng)建序列(SQUENCE)再創(chuàng)建一個(gè)觸發(fā)器(TRIGGER)。
在Oracle 12c中,只需要使用IDENTITY屬性就可以了,和MySQL一樣簡(jiǎn)單。

(2)Mybatis-Plus已經(jīng)定義好了常見(jiàn)的數(shù)據(jù)庫(kù)主鍵序列,我們首先只需要在@Configuration類(lèi)中定義好@Bean:Mybatis -Plus內(nèi)置了如下數(shù)據(jù)庫(kù)主鍵序列(如果內(nèi)置支持不滿(mǎn)足你的需求,可實(shí)現(xiàn)IKeyGenerator接口來(lái)進(jìn)行擴(kuò)展):

DB2KeyGenerator
H2KeyGenerator
KingbaseKeyGenerator
OracleKeyGenerator
PostgreKeyGenerator

(3)然后實(shí)體類(lèi)配置主鍵 Sequence,指定主鍵策略為IdType.INPUT即可:

@Data
@KeySequence(value = "SEQ_ACL_ROLE" , clazz = Integer.class)
public class AclUser implements Serializable {
    private static final long serialVersionUID = 780903014942735924L;
    @TableId(value = "ID",type = IdType.INPUT)
    private Integer id;

3、ASSING_ID(雪花算法)

如果不設(shè)置類(lèi)型值,默認(rèn)則使用IdType.ASSIGN_ID策略(自3.3.0起)。該策略會(huì)使用雪花算法自動(dòng)生成主鍵ID,主鍵類(lèi)型為L(zhǎng)ong或String(分別對(duì)應(yīng)的MySQL的表字段為BIGINT和VARCHAR)

雪花算法(SnowFlake)是 Twitter 開(kāi)源的分布式 id 生成算法。其核心思想就是:使用一個(gè) 64 bit 的 long 型的數(shù)字作為全局唯一 id。在分布式系統(tǒng)中的應(yīng)用十分廣泛,且 ID 引入了時(shí)間戳,基本上保持自增的。

@Data
public class UserInfo {
    //指定主鍵生成策略使用雪花算法(默認(rèn)策略)
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String userName;
    private String passWord;
}

4、ASSING_UUID(不含中劃線的UUID)

如果使用IdType.ASSIGN_UUID策略,并重新自動(dòng)生成排除中劃線的UUID作為主鍵。主鍵類(lèi)型為String,對(duì)應(yīng)MySQL的表分段為VARCHAR(32)

@Data
public class UserInfo {
    //指定主鍵生成策略為不含中劃線的UUID
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    private String userName;
    private String passWord;
}

5、NONE(無(wú)狀態(tài))

如果使用 IdType.NONE 策略,表示未設(shè)置主鍵類(lèi)型(注解里等于跟隨全局,全局里約等于 INPUT)

雪花算法

算法介紹

雪花算法的原理就是生成一個(gè)的 64 位比特位的 long 類(lèi)型的唯一 id。

1.最高 1 位固定值 0,因?yàn)樯傻?id 是正整數(shù),如果是 1 就是負(fù)數(shù)了。
2.接下來(lái) 41 位存儲(chǔ)毫秒級(jí)時(shí)間戳,2^41/(1000*60*60*24*365)=69,大概可以使用 69 年。
3.再接下 10 位存儲(chǔ)機(jī)器碼,包括 5 位 datacenterId 和 5 位 workerId。最多可以部署 2^10=1024 臺(tái)機(jī)器。
4.最后 12 位存儲(chǔ)序列號(hào)。同一毫秒時(shí)間戳?xí)r,通過(guò)這個(gè)遞增的序列號(hào)來(lái)區(qū)分。即對(duì)于同一臺(tái)機(jī)器而言,同一毫秒時(shí)間戳下,可以生成 2^12=4096 個(gè)不重復(fù) id。

可以將雪花算法作為一個(gè)單獨(dú)的服務(wù)進(jìn)行部署,然后需要全局唯一 id 的系統(tǒng),請(qǐng)求雪花算法服務(wù)獲取id 即可。

對(duì)于每一個(gè)雪花算法服務(wù),需要先指定 10 位的機(jī)器碼,這個(gè)根據(jù)自身業(yè)務(wù)進(jìn)行設(shè)定即可。例如機(jī)房號(hào)+機(jī)器號(hào),機(jī)器號(hào)+服務(wù)號(hào),或者是其他可區(qū)別標(biāo)識(shí)的 10 位比特位的整數(shù)值都行。

算法優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 高并發(fā)分布式環(huán)境下生成不重復(fù) id,每秒可生成百萬(wàn)個(gè)不重復(fù) id。

  • 基于時(shí)間戳,以及同一時(shí)間戳下序列號(hào)自增,基本保證 id 有序遞增。

  • 不依賴(lài)第三方庫(kù)或者中間件。

  • 算法簡(jiǎn)單,在內(nèi)存中進(jìn)行,效率高。

缺點(diǎn):

依賴(lài)服務(wù)器時(shí)間,服務(wù)器時(shí)鐘回?fù)軙r(shí)可能會(huì)生成重復(fù) id。算法中可通過(guò)記錄最后一個(gè)生成 id 時(shí)的時(shí)間戳來(lái)解決,每次生成 id 之前比較當(dāng)前服務(wù)器時(shí)鐘是否被回?fù)埽苊馍芍貜?fù) id。

到此這篇關(guān)于MybatisPlus 主鍵策略的幾種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)MybatisPlus 主鍵策略?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Post請(qǐng)求參數(shù)是數(shù)組或者List時(shí)的請(qǐng)求處理方式

    Post請(qǐng)求參數(shù)是數(shù)組或者List時(shí)的請(qǐng)求處理方式

    這篇文章主要介紹了Post請(qǐng)求參數(shù)是數(shù)組或者List時(shí)的請(qǐng)求處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot中實(shí)現(xiàn)接收文件和對(duì)象

    SpringBoot中實(shí)現(xiàn)接收文件和對(duì)象

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)接收文件和對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • SpringBoot錯(cuò)誤處理機(jī)制以及自定義異常處理詳解

    SpringBoot錯(cuò)誤處理機(jī)制以及自定義異常處理詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot錯(cuò)誤處理機(jī)制以及自定義異常處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Java中Thread類(lèi)基本用法詳解

    Java中Thread類(lèi)基本用法詳解

    Java中的Thread類(lèi)是用于創(chuàng)建和管理線程的類(lèi),Thread類(lèi)提供了許多方法來(lái)管理線程,包括啟動(dòng)線程、中斷線程、暫停線程等,下面這篇文章主要給大家介紹了關(guān)于Java中Thread類(lèi)基本用法的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • springboot實(shí)現(xiàn)修改請(qǐng)求狀態(tài)404改為200

    springboot實(shí)現(xiàn)修改請(qǐng)求狀態(tài)404改為200

    這篇文章主要介紹了springboot實(shí)現(xiàn)修改請(qǐng)求狀態(tài)404改為200方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Springboot調(diào)整接口響應(yīng)返回時(shí)長(zhǎng)詳解(解決響應(yīng)超時(shí)問(wèn)題)

    Springboot調(diào)整接口響應(yīng)返回時(shí)長(zhǎng)詳解(解決響應(yīng)超時(shí)問(wèn)題)

    當(dāng)后端對(duì)于數(shù)據(jù)量較大的處理或是某些耗時(shí)的操作時(shí),需要先對(duì)請(qǐng)求接口的請(qǐng)求進(jìn)行響應(yīng),下面這篇文章主要給大家介紹了關(guān)于Springboot調(diào)整接口響應(yīng)返回時(shí)長(zhǎng)(解決響應(yīng)超時(shí)問(wèn)題)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)

    Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)

    本文主要介紹Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)的內(nèi)容,感興趣的小伙伴可以參考下文
    2021-08-08
  • java RocketMQ快速入門(mén)基礎(chǔ)知識(shí)

    java RocketMQ快速入門(mén)基礎(chǔ)知識(shí)

    這篇文章主要介紹了java RocketMQ快速入門(mén)基礎(chǔ)知識(shí),所以RocketMQ是站在巨人的肩膀上(kafka),又對(duì)其進(jìn)行了優(yōu)化讓其更滿(mǎn)足互聯(lián)網(wǎng)公司的特點(diǎn)。它是純Java開(kāi)發(fā),具有高吞吐量、高可用性、適合大規(guī)模分布式系統(tǒng)應(yīng)用的特點(diǎn)。,需要的朋友可以參考下
    2019-06-06
  • Java編程中的構(gòu)造函數(shù)詳細(xì)介紹

    Java編程中的構(gòu)造函數(shù)詳細(xì)介紹

    這篇文章主要介紹了Java編程中的構(gòu)造函數(shù)詳細(xì)介紹,介紹了其概念,格式,與其他函數(shù)的區(qū)別,作用等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java?JNI的高級(jí)用法示例詳解

    Java?JNI的高級(jí)用法示例詳解

    JNI是Java高級(jí)應(yīng)用中不可或缺的技術(shù)之一,它允許Java程序與本地代碼進(jìn)行交互,大大拓寬了Java應(yīng)用的范圍和性能,這篇文章主要介紹了Java?JNI高級(jí)用法的相關(guān)資料,需要的朋友可以參考下
    2025-11-11

最新評(píng)論

揭西县| 浮梁县| 巨野县| 延边| 谢通门县| 长武县| 吴忠市| 永泰县| 三江| 如皋市| 潮安县| 夏河县| 巫山县| 札达县| 镶黄旗| 桂平市| 庆城县| 沽源县| 宝坻区| 奉贤区| 华坪县| 柯坪县| 原平市| 西青区| 轮台县| 绥德县| 钟山县| 始兴县| 珠海市| 荔浦县| 漯河市| 婺源县| 厦门市| 西安市| 日照市| 盐城市| 赤城县| 珠海市| 花莲县| 林周县| 台安县|