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

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

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

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

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

在這里插入圖片描述

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

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

數據庫id字段數據類型為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);

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

@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方式,跟進執(zhí)行路徑,查看對應邏輯代碼。

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

在這里插入圖片描述

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

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

這個時候,id仍然是null

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

在這里插入圖片描述

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

6、關鍵取值

在這里插入圖片描述

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

7、關鍵賦值

在這里插入圖片描述

在這里插入圖片描述

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

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

總結

自增id的補償賦值很好的彌補了同自定義id的不足。但是為什么框架能做到呢??聪旅娴淖⑨屨f明

在這里插入圖片描述

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

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

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

自增主鍵

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

優(yōu)點是:

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

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

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

缺點 :

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

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

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

UUID

優(yōu)點:

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

缺點:

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

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

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

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

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

相關文章

  • mybatisPlus 實體類與數據庫表映射關系詳解

    mybatisPlus 實體類與數據庫表映射關系詳解

    這篇文章主要介紹了mybatisPlus 實體類與數據庫表映射關系詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • 詳解spring項目中如何動態(tài)刷新bean

    詳解spring項目中如何動態(tài)刷新bean

    這篇文章主要為大家介紹了詳解spring項目中如何動態(tài)刷新bean,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Spring Boot的listener(監(jiān)聽器)簡單使用實例詳解

    Spring Boot的listener(監(jiān)聽器)簡單使用實例詳解

    監(jiān)聽器(Listener)的注冊方法和 Servlet 一樣,有兩種方式:代碼注冊或者注解注冊。接下來通過本文給大家介紹Spring Boot的listener(監(jiān)聽器)簡單使用,需要的朋友可以參考下
    2017-04-04
  • java對象初始化順序驗證示例

    java對象初始化順序驗證示例

    以下這段小程序對調用對象構造函數時,父類構造函數、成員變量初始化函數,以及非靜態(tài)初始化塊調用順序進行驗證,不考慮靜態(tài)成員及靜態(tài)初始化塊
    2014-02-02
  • SpringBoot利用自定義注解實現隱私數據脫敏(加密顯示)的解決方案

    SpringBoot利用自定義注解實現隱私數據脫敏(加密顯示)的解決方案

    這兩天在整改等保測出的問題,里面有一個“用戶信息泄露”的風險項(就是后臺系統(tǒng)里用戶的一些隱私數據直接明文顯示了),其實指的就是要做數據脫敏,本文給大家介紹了SpringBoot利用自定義注解實現隱私數據脫敏(加密顯示)的解決方案,需要的朋友可以參考下
    2023-11-11
  • SpringCloud入門實驗環(huán)境搭建

    SpringCloud入門實驗環(huán)境搭建

    這篇文章主要介紹了SpringCloud入門實驗環(huán)境搭建的相關資料,幫助大家更好的理解和學習使用SpringCloud,感興趣的朋友可以了解下
    2021-04-04
  • SpringBoot實現接口參數加密解密的示例代碼

    SpringBoot實現接口參數加密解密的示例代碼

    加密解密本身并不是難事,問題是在何時去處理?SpringMVC?中給我們提供了?ResponseBodyAdvice?和?RequestBodyAdvice,利用這兩個工具可以對請求和響應進行預處理,非常方便。廢話不多說,我們一起來學習一下
    2022-09-09
  • JAVA中String類與StringBuffer類的區(qū)別

    JAVA中String類與StringBuffer類的區(qū)別

    這篇文章主要為大家詳細介紹了JAVA中String類與StringBuffer類的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • sentinel配置 持久化到nacos的詳細過程

    sentinel配置 持久化到nacos的詳細過程

    這篇文章主要介紹了sentinel配置 持久化到nacos的詳細過程,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-08-08
  • spring?boot如何配置靜態(tài)路徑詳解(404出現的坑)

    spring?boot如何配置靜態(tài)路徑詳解(404出現的坑)

    這篇文章主要給大家介紹了關于spring?boot如何配置靜態(tài)路徑的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02

最新評論