欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

快速解決 MyBatis-Plus 中 ID 自增問題(推薦)

 更新時(shí)間:2025年02月07日 14:37:52   作者:迷迷的k  
本文介紹了MyBatis-Plus中自動(dòng)生成ID過長導(dǎo)致的問題及解決方法,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

MyBatis-Plus 中自動(dòng)生成的 ID 過長,可能導(dǎo)致以下問題的出現(xiàn):

  • 由于屬性的 ID 是由 mp 內(nèi)部的 UUID 生成,比如使用 Integer類型 將存不進(jìn)去
  • 當(dāng)后端傳入 mp 雪花算法自動(dòng)生成的 ID 時(shí),前端接收的時(shí)候可能會導(dǎo)致精度的損失

問題一:由于屬性的 ID 是由 mp 內(nèi)部的 UUID 生成,比如使用 Integer類型 將存不進(jìn)去

報(bào)錯(cuò)信息如下所示:

ested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.xxx' with value '111042370348747XXXX Cause: java.lang.IllegalArgumentException: java.lang.ClassCastException@14041406

解決方法:

將 ID 字段類型改為 long,這樣就能保證有足夠位數(shù)放入生成的 ID

問題二:當(dāng)后端傳入 mp 雪花算法自動(dòng)生成的 ID 時(shí),前端接收的時(shí)候可能會導(dǎo)致精度的損失

解決方法:

第一步:

首先在對應(yīng)的類的主鍵屬性上,增加以下代碼配置

@TableId(value = "id",type = IdType.AUTO)
    private Long id;

type 屬性中,其他類型如下: 

AUTO:AUTO(0, “數(shù)據(jù)庫ID自增”),

INPUT:INPUT(1, “用戶輸入ID”),

ID_WORKER:ID_WORKER(2, “全局唯一ID”),

UUID:UUID(3, “全局唯一ID”),

NONE:NONE(4, “該類型為未設(shè)置主鍵類型”),

ID_WORKER_STR:ID_WORKER_STR(5, “字符串全局唯一ID”);

這里的 @TableId 注解需要添加以下依賴:

這里的版本號最好與 mp 的主依賴的版本保持一致

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>版本號</version>
</dependency>

第二步:

將之前的被自增長的ID數(shù)據(jù)刪除

第三步:

在需要解決 mp 自增長的表中,執(zhí)行以下語句

ALTER TABLE table_name AUTO_INCREMENT = value;
 

其中, table_name 是對應(yīng)的表名,value 是你需要進(jìn)行自增的 ID 值

比如:value 賦值為 2,則 mp 下次生成的 ID 則為2,即從 2 開始

自增主鍵與 UUID 的優(yōu)缺點(diǎn)

自增主鍵:

這種方式是使用數(shù)據(jù)庫提供的自增數(shù)值型字段作為自增主鍵

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

  • 數(shù)據(jù)庫自動(dòng)編號,速度快,而且是增量增長,按順序存放,對于檢索非常有利
  • 數(shù)字型,占用空間小,易排序,在程序中傳遞也方便
  • 如果通過非系統(tǒng)增加記錄時(shí),可以不用指定該字段,不用擔(dān)心主鍵重復(fù)問題

缺點(diǎn) :

  • 因?yàn)樽詣?dòng)增長,在手動(dòng)要插入指定ID的記錄時(shí)會顯得麻煩,尤其是當(dāng)系統(tǒng)與其它系統(tǒng)集成時(shí),需要數(shù)據(jù)導(dǎo)入時(shí),很難保證原系統(tǒng)的ID不發(fā)生主鍵沖突(前提是老系統(tǒng)也是數(shù)字型的)
  • 如果經(jīng)常有合并表的操作,就可能會出現(xiàn)主鍵重復(fù)的情況很難處理分布式存儲的數(shù)據(jù)表
  • 數(shù)據(jù)量特別大時(shí),會導(dǎo)致查詢數(shù)據(jù)庫操作變慢;此時(shí)需要進(jìn)行數(shù)據(jù)庫的水平拆分,劃分到不同的數(shù)據(jù)庫中,那么當(dāng)添加數(shù)據(jù)時(shí),每個(gè)表都會自增長,導(dǎo)致主鍵沖突

UUID:

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

能夠保證獨(dú)立性,程序可以在不同的數(shù)據(jù)庫間遷移,效果不受影響;保證生成的ID不僅是表獨(dú)立的,而且是庫獨(dú)立的,這點(diǎn)在你想切分?jǐn)?shù)據(jù)庫的時(shí)候尤為重要

缺點(diǎn):

  • 比較占地方,和INT類型相比,存儲一個(gè)UUID要花費(fèi)更多的空間
  • 使用UUID后,URL顯得冗長,不夠友好
  • Join 操作性能比 int 要低
  • UUID做主鍵將會添加到表上的其他索引中,因此會降低性能

到此這篇關(guān)于解決 MyBatis-Plus 中 ID 自增問題的文章就介紹到這了,更多相關(guān)MyBatis-Plus ID 自增內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決kafka:org.apache.kafka.common.errors.TimeoutException問題

    解決kafka:org.apache.kafka.common.errors.TimeoutException問題

    這篇文章主要介紹了解決kafka:org.apache.kafka.common.errors.TimeoutException問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • RabbitMQ之死信隊(duì)列深入解析

    RabbitMQ之死信隊(duì)列深入解析

    這篇文章主要介紹了RabbitMQ之死信隊(duì)列深入解析,?死信,顧名思義就是無法被消費(fèi)的消息,字面意思可以這樣理解,一般來說,producer將消息投遞到 broker 或者直接到 queue 里了,consumer 從 queue 取消息進(jìn)行消費(fèi),需要的朋友可以參考下
    2023-09-09
  • Java關(guān)于遠(yuǎn)程調(diào)試程序教程(以Eclipse為例)

    Java關(guān)于遠(yuǎn)程調(diào)試程序教程(以Eclipse為例)

    這篇文章主要介紹了Java關(guān)于遠(yuǎn)程調(diào)試程序教程(以Eclipse為例),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • MyBatis更新時(shí)新值為null時(shí),updateById()更新失敗問題

    MyBatis更新時(shí)新值為null時(shí),updateById()更新失敗問題

    這篇文章主要介紹了MyBatis更新時(shí)新值為null時(shí),updateById()更新失敗問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • java制作簡單的坦克大戰(zhàn)

    java制作簡單的坦克大戰(zhàn)

    坦克大戰(zhàn)是我們小時(shí)候玩紅白機(jī)時(shí)代的經(jīng)典游戲,看到有不少小伙伴都使用各種語言實(shí)現(xiàn)了一下,手癢癢,也使用java做的一個(gè)比較簡單的坦克大戰(zhàn),主要面向于學(xué)過Java的人群,與學(xué)了一段時(shí)間的人,有利于面向?qū)ο笏枷氲奶岣?,推薦給大家。
    2015-03-03
  • Spring中的ClassPathXmlApplicationContext源碼詳解

    Spring中的ClassPathXmlApplicationContext源碼詳解

    這篇文章主要介紹了Spring中的ClassPathXmlApplicationContext源碼詳解,ApplicationContext的主要實(shí)現(xiàn)類是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默認(rèn)從類路徑加載配置文件,后者默認(rèn)從文件系統(tǒng)中裝載配置文件,需要的朋友可以參考下
    2023-12-12
  • Java線程池框架核心代碼解析

    Java線程池框架核心代碼解析

    這篇文章主要針對Java線程池框架核心代碼進(jìn)行詳細(xì)解析,分析Java線程池框架的實(shí)現(xiàn)ThreadPoolExecutor,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java消息摘要算法MAC實(shí)現(xiàn)與應(yīng)用完整示例

    Java消息摘要算法MAC實(shí)現(xiàn)與應(yīng)用完整示例

    這篇文章主要介紹了Java消息摘要算法MAC實(shí)現(xiàn)與應(yīng)用,結(jié)合完整實(shí)例形式分析了java消息摘要算法MAC的概念、原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • java反編譯工具jd-gui使用詳解

    java反編譯工具jd-gui使用詳解

    JD-GUI是一個(gè)獨(dú)立的圖形實(shí)用程序,顯示“.class”文件的Java源代碼,本文主要介紹了java反編譯工具jd-gui使用詳解,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • es創(chuàng)建索引和mapping的實(shí)例

    es創(chuàng)建索引和mapping的實(shí)例

    這篇文章主要介紹了es創(chuàng)建索引和mapping的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論