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

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

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

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

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

在這里插入圖片描述

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

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

數(shù)據(jù)庫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í),依舊無法保存主鍵。

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

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

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

主鍵生成方式類型如下(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)在的項(xiàng)目實(shí)踐中,表設(shè)計(jì)一般采用自增主鍵,那么在這當(dāng)中會(huì)涉及到數(shù)據(jù)插入后,獲取插入數(shù)據(jù)主鍵的一個(gè)場(chǎng)景處理。

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

代碼說明

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

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

在這里插入圖片描述

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

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

這是一部分邏輯,還沒有到,但是看方法名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明

在這里插入圖片描述

這是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ù)庫提供的自增數(shù)值型字段作為自增主鍵,它的優(yōu)點(diǎn)是:

自增主鍵

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

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

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

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

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

缺點(diǎn) :

1、因?yàn)樽詣?dò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ù)庫操作變慢。此時(shí)需要進(jìn)行數(shù)據(jù)庫的水平拆分,劃分到不同的數(shù)據(jù)庫中,那么當(dāng)添加數(shù)據(jù)時(shí),每個(gè)表都會(huì)自增長,導(dǎo)致主鍵沖突。

UUID

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

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

缺點(diǎn):

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

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

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

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

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

相關(guān)文章

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

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

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

    Java之操作Redis案例講解

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

手机| 永宁县| 蓬安县| 民乐县| 涞水县| 广南县| 铜山县| 灵璧县| 黑龙江省| 阳西县| 商丘市| 新干县| 彩票| 巢湖市| 平邑县| 永吉县| 沅江市| 晋城| 建德市| 蒲江县| 梓潼县| 加查县| 武安市| 元氏县| 大港区| 临湘市| 玛纳斯县| 赤城县| 乳源| 调兵山市| 和龙市| 台安县| 望都县| 台东市| 大丰市| 武城县| 香河县| 杭锦旗| 扎囊县| 新田县| 柳林县|