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

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

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

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

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

在這里插入圖片描述

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

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

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

解決方案

在實(shí)體類自增的id字段添加一個(gè)注解

在這里插入圖片描述

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

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í)體中,主鍵生成方式不設(shè)置生成方式時(shí),默認(rèn)的是自增。所有當(dāng)你設(shè)置主鍵的值時(shí),依舊無(wú)法保存主鍵。

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

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

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

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

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

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

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

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

代碼說(shuō)明

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

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

在這里插入圖片描述

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

這里看到一個(gè)KeyGenerator的類型,這個(gè)名字name的很好,自說(shuō)明性很好。

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

這個(gè)時(shí)候,id仍然是null

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

在這里插入圖片描述

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

6、關(guān)鍵取值

在這里插入圖片描述

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

7、關(guān)鍵賦值

在這里插入圖片描述

在這里插入圖片描述

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

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

總結(jié)

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

在這里插入圖片描述

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

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

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

自增主鍵

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

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

1、數(shù)據(jù)庫(kù)自動(dòng)編號(hào),速度快,而且是增量增長(zhǎng),按順序存放,對(duì)于檢索非常有利;

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

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

缺點(diǎn) :

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

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

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

UUID

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

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

缺點(diǎn):

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

2、使用UUID后,URL顯得冗長(zhǎng),不夠友好。

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

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

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

相關(guān)文章

  • mybatisPlus 實(shí)體類與數(shù)據(jù)庫(kù)表映射關(guān)系詳解

    mybatisPlus 實(shí)體類與數(shù)據(jù)庫(kù)表映射關(guān)系詳解

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

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

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

    Spring Boot的listener(監(jiān)聽(tīng)器)簡(jiǎn)單使用實(shí)例詳解

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

    java對(duì)象初始化順序驗(yàn)證示例

    以下這段小程序?qū)φ{(diào)用對(duì)象構(gòu)造函數(shù)時(shí),父類構(gòu)造函數(shù)、成員變量初始化函數(shù),以及非靜態(tài)初始化塊調(diào)用順序進(jìn)行驗(yàn)證,不考慮靜態(tài)成員及靜態(tài)初始化塊
    2014-02-02
  • SpringBoot利用自定義注解實(shí)現(xiàn)隱私數(shù)據(jù)脫敏(加密顯示)的解決方案

    SpringBoot利用自定義注解實(shí)現(xiàn)隱私數(shù)據(jù)脫敏(加密顯示)的解決方案

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

    SpringCloud入門(mén)實(shí)驗(yàn)環(huán)境搭建

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

    SpringBoot實(shí)現(xiàn)接口參數(shù)加密解密的示例代碼

    加密解密本身并不是難事,問(wèn)題是在何時(shí)去處理?SpringMVC?中給我們提供了?ResponseBodyAdvice?和?RequestBodyAdvice,利用這兩個(gè)工具可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行預(yù)處理,非常方便。廢話不多說(shuō),我們一起來(lái)學(xué)習(xí)一下
    2022-09-09
  • JAVA中String類與StringBuffer類的區(qū)別

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

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

    sentinel配置 持久化到nacos的詳細(xì)過(guò)程

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

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

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

最新評(píng)論