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

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

解決方案

在實(shí)體類自增的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í)體中,主鍵生成方式不設(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”);

插入記錄的主鍵自增賦值機(jī)制說明

現(xiàn)在的項目實(shí)踐中,表設(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的補(bǔ)償賦值很好的彌補(bǔ)了同自定義id的不足。但是為什么框架能做到呢??聪旅娴淖⑨屨f明

在這里插入圖片描述

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

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

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

自增主鍵

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

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

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

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

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

缺點(diǎn) :

1、因?yàn)樽詣釉鲩L,在手動要插入指定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)點(diǎn):

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

缺點(diǎn):

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

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

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

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

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

相關(guān)文章

最新評論