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

mybatis-plus添加數(shù)據(jù)時id自增問題及解決

 更新時間:2022年01月15日 09:47:06   作者:歪嘴戰(zhàn)神-王德發(fā)  
這篇文章主要介紹了mybatis-plus添加數(shù)據(jù)時id自增問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis-plus添加數(shù)據(jù)時id自增問題

mybatis-plus插入數(shù)據(jù),id自增列變的很長.比如下圖:

在這里插入圖片描述

mybatis-plus中遇到一個,添加數(shù)據(jù)到數(shù)據(jù)庫,而數(shù)據(jù)庫中的id列是自增列

使用plus中自帶的insert方法添加到數(shù)據(jù)庫,id自增變的很長很長,

數(shù)據(jù)庫id字段數(shù)據(jù)類型為long

解決方案

在實體類自增的id字段添加一個注解

在這里插入圖片描述

mybatis plus在插入記錄時,有以下幾種方法:

boolean insert(T var1);
boolean insertAllColumn(T var1);
boolean insertBatch(List var1);
boolean insertBatch(List var1, int var2);
boolean insertOrUpdateBatch(List var1);
boolean insertOrUpdateBatch(List var1, int var2);

當(dāng)時實體中,主鍵生成方式不設(shè)置生成方式時,默認(rèn)的是自增。所有當(dāng)你設(shè)置主鍵的值時,依舊無法保存主鍵。

@TableId(value = “id”)
private Integer id;

我們可以設(shè)置主鍵的生成方式

@TableId(value = “id”,type = IdType.INPUT) 這種方式是主鍵手動輸入

主鍵生成方式類型如下(IdType):

  • AUTO(0, “數(shù)據(jù)庫ID自增”),
  • INPUT(1, “用戶輸入ID”),
  • ID_WORKER(2, “全局唯一ID”),
  • UUID(3, “全局唯一ID”),
  • NONE(4, “該類型為未設(shè)置主鍵類型”),
  • ID_WORKER_STR(5, “字符串全局唯一ID”);

插入記錄的主鍵自增賦值機制說明

現(xiàn)在的項目實踐中,表設(shè)計一般采用自增主鍵,那么在這當(dāng)中會涉及到數(shù)據(jù)插入后,獲取插入數(shù)據(jù)主鍵的一個場景處理。

對于這種情況,mybatis框架做了封裝,提供了支持。

代碼說明

通過debug方式,跟進(jìn)執(zhí)行路徑,查看對應(yīng)邏輯代碼。

1、找到執(zhí)行入口

在這里插入圖片描述

這里的參數(shù)賦值有三個,但不包括id的賦值,id是由數(shù)據(jù)庫自增。

這里看到一個KeyGenerator的類型,這個名字name的很好,自說明性很好。

2、看看keyGenerator的執(zhí)行邏輯

在這里插入圖片描述

這里可以看出,參數(shù)類型的id依然是空,但是上圖的sql執(zhí)行已結(jié)束。

3、 跟進(jìn)邏輯執(zhí)行

在這里插入圖片描述

這是一部分邏輯,還沒有到,但是看方法名assign,就要到了。

4、繼續(xù)進(jìn)入下一層邏輯

在這里插入圖片描述

這個時候,id仍然是null

5、繼續(xù)進(jìn)入下一層邏輯

在這里插入圖片描述

這里我們看到有set的動作,在執(zhí)行前,id是仍然為null

6、關(guān)鍵取值

在這里插入圖片描述

在Object value 的賦值邏輯,看到數(shù)據(jù)是從rs中獲取,值是184

7、關(guān)鍵賦值

在這里插入圖片描述

在這里插入圖片描述

在執(zhí)行完set后,插入數(shù)據(jù)的類型對象的id有了值。

到這里自增id賦值就結(jié)束了。

總結(jié)

自增id的補償賦值很好的彌補了同自定義id的不足。但是為什么框架能做到呢。看下面的注釋說明

在這里插入圖片描述

這是JDBC的標(biāo)準(zhǔn)接口,提供了這個口子,在sql執(zhí)行返回后,可以帶上自增id的信息,因此應(yīng)用層框架可以執(zhí)行賦值,避免二次查詢。

實際項目是采用自增主鍵,還是自定義賦值主鍵,需要充分考慮到兩者的優(yōu)缺點同實際的情況結(jié)合。優(yōu)缺點可以參考如下:

這種方式是使用數(shù)據(jù)庫提供的自增數(shù)值型字段作為自增主鍵,它的優(yōu)點是:

自增主鍵

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

優(yōu)點是:

1、數(shù)據(jù)庫自動編號,速度快,而且是增量增長,按順序存放,對于檢索非常有利;

2、數(shù)字型,占用空間小,易排序,在程序中傳遞也方便;

3、如果通過非系統(tǒng)增加記錄時,可以不用指定該字段,不用擔(dān)心主鍵重復(fù)問題。

缺點 :

1、因為自動增長,在手動要插入指定ID的記錄時會顯得麻煩,尤其是當(dāng)系統(tǒng)與其它系統(tǒng)集成時,需要數(shù)據(jù)導(dǎo)入時,很難保證原系統(tǒng)的ID不發(fā)生主鍵沖突(前提是老系統(tǒng)也是數(shù)字型的)。

2、如果經(jīng)常有合并表的操作,就可能會出現(xiàn)主鍵重復(fù)的情況很難處理分布式存儲的數(shù)據(jù)表。

3、數(shù)據(jù)量特別大時,會導(dǎo)致查詢數(shù)據(jù)庫操作變慢。此時需要進(jìn)行數(shù)據(jù)庫的水平拆分,劃分到不同的數(shù)據(jù)庫中,那么當(dāng)添加數(shù)據(jù)時,每個表都會自增長,導(dǎo)致主鍵沖突。

UUID

優(yōu)點:

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

缺點:

1、比較占地方,和INT類型相比,存儲一個UUID要花費更多的空間。

2、使用UUID后,URL顯得冗長,不夠友好。

3、Join操作性能比int要低。

4、UUID做主鍵將會添加到表上的其他索引中,因此會降低性能。

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

相關(guān)文章

  • Java8深入學(xué)習(xí)之熟透Optional

    Java8深入學(xué)習(xí)之熟透Optional

    這篇文章主要給大家介紹了關(guān)于Java8深入學(xué)習(xí)之熟透Optional的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java之操作Redis案例講解

    Java之操作Redis案例講解

    這篇文章主要介紹了Java之操作Redis案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java通過MyBatis框架對MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法

    Java通過MyBatis框架對MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法

    MyBatis框架由Java的JDBC API進(jìn)一步封裝而來,在操作數(shù)據(jù)庫方面效果拔群,接下來我們就一起來看看Java通過MyBatis框架對MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法:
    2016-06-06
  • java時間相關(guān)處理小結(jié)

    java時間相關(guān)處理小結(jié)

    這篇文章介紹了java時間相關(guān)處理,有需要的朋友可以參考一下
    2013-11-11
  • java并發(fā)鎖的實現(xiàn)

    java并發(fā)鎖的實現(xiàn)

    Java中的鎖主要是為了解決多個線程訪問共享數(shù)據(jù)時的競爭問題,確保線程能夠安全地訪問和修改共享數(shù)據(jù),本文主要介紹了java并發(fā)鎖的實現(xiàn),感興趣的可以了解一下
    2024-04-04
  • Java?Lambda表達(dá)式常用的函數(shù)式接口

    Java?Lambda表達(dá)式常用的函數(shù)式接口

    這篇文章主要介紹了Java?Lambda表達(dá)式常用的函數(shù)式接口,文章基于Java?Lambda表達(dá)式展開對常用的函數(shù)式接口的介紹,具有一的的參考價值需要的小伙伴可以參考一下
    2022-04-04
  • 基于binarywang封裝的微信工具包生成二維碼

    基于binarywang封裝的微信工具包生成二維碼

    這篇文章主要介紹了基于binarywang封裝的微信工具包生成二維碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • MyBatis查詢數(shù)據(jù)返回null的解決

    MyBatis查詢數(shù)據(jù)返回null的解決

    本文主要介紹了MyBatis查詢數(shù)據(jù)返回null的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • SpringBoot 集成 Jasypt 對數(shù)據(jù)庫加密以及踩坑的記錄分享

    SpringBoot 集成 Jasypt 對數(shù)據(jù)庫加密以及踩坑的記錄分享

    這篇文章主要介紹了SpringBoot 集成 Jasypt 對數(shù)據(jù)庫加密以及踩坑,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 認(rèn)識Java中的Stub與StubQueue

    認(rèn)識Java中的Stub與StubQueue

    StubQueue是用來保存生成的本地代碼的Stub隊列,隊列每一個元素對應(yīng)一個InterpreterCodelet對象,InterpreterCodelet對象繼承自抽象基類Stub,下面我們介紹一下StubQueue類及相關(guān)類Stub、InterpreterCodelet類和CodeletMark類。需要的的下伙伴可以參考下面文字內(nèi)容
    2021-09-09

最新評論

伊川县| 海门市| 吉林省| 广丰县| 灵丘县| 永福县| 定安县| 资溪县| 塔城市| 航空| 平原县| 福州市| 荔浦县| 芜湖市| 十堰市| 岱山县| 济阳县| 肇州县| 宁陕县| 渝中区| 和政县| 山东省| 陵水| 昌平区| 巴里| 灵璧县| 白山市| 泸州市| 夏邑县| 通化市| 佛冈县| 抚远县| 株洲市| 杭锦后旗| 保德县| 图木舒克市| 永顺县| 南丰县| 乡城县| 公主岭市| 德阳市|