中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決mybatis-plus添加數據時id自增問題

發布時間:2022-01-15 11:24:07 來源:億速云 閱讀:1927 作者:小新 欄目:開發技術

小編給大家分享一下如何解決mybatis-plus添加數據時id自增問題,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

mybatis-plus添加數據時id自增問題

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

如何解決mybatis-plus添加數據時id自增問題

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

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

數據庫id字段數據類型為long

解決方案

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

如何解決mybatis-plus添加數據時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);

當時實體中,主鍵生成方式不設置生成方式時,默認的是自增。所有當你設置主鍵的值時,依舊無法保存主鍵。

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

我們可以設置主鍵的生成方式

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

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

  • AUTO(0, “數據庫ID自增”),

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

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

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

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

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

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

現在的項目實踐中,表設計一般采用自增主鍵,那么在這當中會涉及到數據插入后,獲取插入數據主鍵的一個場景處理。

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

代碼說明

通過debug方式,跟進執行路徑,查看對應邏輯代碼。

1、找到執行入口

如何解決mybatis-plus添加數據時id自增問題

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

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

2、看看keyGenerator的執行邏輯

如何解決mybatis-plus添加數據時id自增問題

這里可以看出,參數類型的id依然是空,但是上圖的sql執行已結束。

3、 跟進邏輯執行

如何解決mybatis-plus添加數據時id自增問題

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

4、繼續進入下一層邏輯

如何解決mybatis-plus添加數據時id自增問題

這個時候,id仍然是null

5、繼續進入下一層邏輯

如何解決mybatis-plus添加數據時id自增問題

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

6、關鍵取值

如何解決mybatis-plus添加數據時id自增問題

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

7、關鍵賦值

如何解決mybatis-plus添加數據時id自增問題

如何解決mybatis-plus添加數據時id自增問題

在執行完set后,插入數據的類型對象的id有了值。

到這里自增id賦值就結束了。

總結

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

如何解決mybatis-plus添加數據時id自增問題

這是JDBC的標準接口,提供了這個口子,在sql執行返回后,可以帶上自增id的信息,因此應用層框架可以執行賦值,避免二次查詢。

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

這種方式是使用數據庫提供的自增數值型字段作為自增主鍵,它的優點是:

自增主鍵

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

優點是:

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

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

3、如果通過非系統增加記錄時,可以不用指定該字段,不用擔心主鍵重復問題。

缺點 :

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

2、如果經常有合并表的操作,就可能會出現主鍵重復的情況很難處理分布式存儲的數據表。

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

UUID

優點:

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

缺點:

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

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

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

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

看完了這篇文章,相信你對“如何解決mybatis-plus添加數據時id自增問題”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三亚市| 略阳县| 沙田区| 乡城县| 清丰县| 章丘市| 德庆县| 神农架林区| 湖口县| 安多县| 崇州市| 梅州市| 永丰县| 进贤县| 锡林郭勒盟| 祁门县| 东乌珠穆沁旗| 望奎县| 宁河县| 德阳市| 宜阳县| 白水县| 兴化市| 武功县| 佛教| 安庆市| 滕州市| 仁寿县| 镇坪县| 临汾市| 中阳县| 新巴尔虎右旗| 奈曼旗| 前郭尔| 喀喇| 靖远县| 吴旗县| 吉水县| 麦盖提县| 江华| 湖南省|