Mybatis 插入數據後返回自增主鍵ID

2020-09-09 早起的年輕人


1 xml 映射文件中處理

在映射器中配置獲取記錄主鍵值

在xml中 insert 標籤中定義 :
* useGeneratedKeys為true,用來設置返回主鍵id的值,
* keyProperty 代表資料庫記錄主鍵欄位
* keyColumn 代表 java對象成員屬性名

<!-- 插入數據:返回記錄主鍵id值 --><insert id=&34; useGeneratedKeys=&34; keyProperty=&34; keyColumn=&34;> insert into t_user (name,age) values ({age})</insert>

2 接口註解處理

在接口映射器中通過註解@Options分別設置參數useGeneratedKeys,keyProperty,keyColumn值 如下

// 返回主鍵欄位id值@Options(useGeneratedKeys = true, keyProperty = &34;, keyColumn = &34;)@Insert(&{name},34;)void insert(Student stu);

3 Mybatis Plus 中

調用 BaseMapper 的 insert方法後 ,默認將自增主鍵封裝在 插入對象中

4 聊一聊 useGeneratedKeys

在MyBatis中,允許設置名稱為「useGeneratedKeys」參數存在3個位置如下:

  • 在settings元素中設置useGeneratedKeys參數
  • 在xml映射器中設置useGeneratedKeys參數
  • 在接口映射器中設置useGeneratedKeys參數 34;user&34;add&34;true&34;id&{user.userName},#{user.userAget}) </insert>

相關焦點

  • 通過源碼分析Mybatis是如何返回資料庫生成的自增主鍵值?
    在Mybatis中,執行insert操作時,如果我們希望返回資料庫生成的自增主鍵值,那麼就需要使用到KeyGenerator對象。需要注意的是,KeyGenerator的作用,是返回資料庫生成的自增主鍵值,而不是生成資料庫的自增主鍵值。返回的主鍵值放到哪兒呢?
  • mybatis攔截器實現主鍵自動生成
    mybatis-plus就支持註解式的id自動生成,而且mybatis-plus只是對mybatis進行增強不做改變。朋友還是那句話,說為了項目穩定,之前項目組沒有使用mybatis-plus的經驗,貿然切換不知道會不會有什麼坑。後面沒招了,我就跟他說不然你用mybatis的攔截器實現一個吧。於是又有一篇吹水的創作題材出現。
  • 【系統架構】MySQL的自增ID用完了,插入數據會出現什麼問題?
    數據表定義的自增 ID,如果達到上限之後。再申請下一個 ID 的時候,獲得到的值將保持不變。也就是假設現在自增id只剩下一個。但是,當我再次 insert 時,結果出現了下面的這個錯誤:從這個結果我們可以看到,第一次插入數據的時候 id 值還是
  • 小學妹問:Mybatis常見註解有哪些?
    對此基本上有三種方案,分別是:手動指定(應用層)、自增主鍵(數據層單表)、選擇主鍵(數據層多表)。對應xml文件中的<insert>標籤。在應用層手動指定主鍵手動指定的方式不把主鍵區別看待,插入之前在應用層生成對象的時候就會給主鍵一個值,插入的時候與普通欄位沒啥區別。
  • MySQL中的自增主鍵用完了怎麼辦?
    面試官:"為什麼是自增主鍵?面試官:"那自增主鍵達到最大值了,用完了怎麼辦?我們先說一下,一旦自增id達到最大值,此時數據繼續插入是會報一個主鍵衝突異常如下所示//Duplicate entry '4294967295' for key 'PRIMARY'
  • 老大問:建表為啥還設置個自增 id ?用流水號當主鍵不正好麼
    設置成主鍵,這樣就不用 id 了,還減少一次回表查詢? 我:…… (說的好像很有道理,咱也不敢說話。) 老大:既然他們規定了,那你回去查一下為什麼要設計個自增 id ? 我:掏出小本本(回去查資料~)。
  • 關於主鍵,除了自增,你還可以這樣
    的IDENTITY,Oracle則是通過SEQUENCE來實現主鍵自增。使用自增主鍵,比較簡單,佔用空間較小;主鍵按順序增長存放,不會產生頁分裂;同時也有一些不足,如多個系統之間集成數據時,容易有主鍵衝突;單表自增對於資料庫單表壓力較大,不適用於高並發及分布式場景,自增主鍵容易被探知到系統業務量等。由此可見在系統業務量較小,並發量不大時使用自增主鍵不失為一種較好的選擇,但是當面對高並發、分布式需求時,使用自增主鍵會存在較大的瓶頸。
  • MySQL表自增id用完了該怎麼辦?
    MySQL無符號整數上限為2^32 -1,即4294967295表的自增id用完了怎麼辦表定義的自增id達到了上線後,再申請下一個id時,得到的值保持不變。`user` (`name`) VALUES ('張三');結果如圖:同樣我們在執行一次insert語句就會報主鍵衝突異常:MySQL InnoDB系統自增row_id用完了怎麼辦如果我們創建的表沒有指定主鍵,那MySQL
  • MySQL中的各種自增ID
    除非你的業務需求中需要在不足數據位數的時候,在前面補0,但是這個功能需要在定義欄位的時候結合UNSIGNED ZEROFILL關鍵字一起使用才有效果。表自增主鍵的自增值如果一張表的自增ID用完之後,我們再次向這個表中插入數據會怎麼樣呢?我們使用tinyint類型的自增主鍵舉例舉例來實驗一下。
  • 最全MyBatis中XML映射文件標籤分析+示例
    這個設置僅對多結果集的情況適用,它將列出語句執行後返回的結果集並每個結果集給一個名稱,名稱是逗號分隔的。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表獲取自增主鍵獲取自增主鍵,可以通過keyProperty來映射定義一個實體類:package com.lonelyWolf.mybatis.model;public
  • 面試官:資料庫自增ID用完了會怎麼樣?
    這些都是題外話,只是告訴你數據量大了是有可能達到上限的而已,回到Mysql自增ID上限的問題,可以分為兩個方面來說。1.有主鍵如果設置了主鍵,並且一般會把主鍵設置成自增。我們知道,Mysql裡int類型是4個字節,如果有符號位的話就是[-2^31,2^31-1],無符號位的話最大值就是2^32-1,也就是4294967295。
  • Spring boot怎麼整合Mybatis-plus
    "age", "20"));上面的分頁其實是調用BaseMapper的selectPage方法,這樣的分頁返回的數據確實是分頁後的數據九、主鍵策略mybatis-plus 的主鍵生成的類型 默認類型 是 IdType.ID_WORKER全局唯一ID,內容為空自動填充(默認配置),雪花算法1,局部主鍵策略實現在實體類中 ID屬性加註解
  • 面試官問:MySQL 的自增 ID 用完了,怎麼辦?
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫首先,創建一個最簡單的表,只包含一個自增 id,並插入一條數據。Duplicate entry '4294967295' for key 'PRIMARY' 0.00054 sec說明,當再次插入時,使用的自增 ID 還是 4294967295,報主鍵衝突的錯誤。
  • 分庫分表的 9種分布式主鍵ID 生成方案,挺全乎的
    不同數據節點間生成全局唯一主鍵是個棘手的問題,一張邏輯表 t_order 拆分成多個真實表 t_order_n,然後被分散到不同分片庫 db_0、db_1... ,各真實表的自增鍵由於無法互相感知從而會產生重複主鍵,此時資料庫本身的自增主鍵,就無法滿足分庫分表對主鍵全局唯一的要求。
  • 知道為什麼MySQL不推薦使用uuid或者雪花id作為主鍵?
    (long形且唯一,單機遞增),而是推薦連續自增的主鍵id,官方的推薦是auto_increment,那麼為什麼不建議採用uuid,使用uuid究竟有什麼壞處?,uuid的插入效率墊底,並且在後序增加了130W的數據,uudi的時間又直線下降。
  • mysql為什麼不推薦使用uuid或者雪花id作為主鍵
    ,來分析一下insert插入的時間來進行綜合其效率,為了做到最真實的效果,所有的數據採用隨機生成,比如名字、郵箱、地址都是隨機生成,程序已上傳自gitee,地址在文底。帶著疑問,我們來探討一下這個問題: 二: 使用uuid和自增id的索引結構對比2.1:使用自增id的內部結構
  • 為什麼MySQL不推薦使用uuid或者雪花id作為主鍵?
    前言在mysql中設計表的時候,mysql官方推薦不要使用uuid或者不連續不重複的雪花id(long形且唯一,單機遞增),而是推薦連續自增的主鍵id,官方的推薦是auto_increment,那麼為什麼不建議採用uuid,使用uuid究竟有什麼壞處?
  • MyBatis-Plus快速入門(一)
    ,導入數據。>插入策略往資料庫中插入一條記錄只需要直接調用mapper對象的insert方法進行插入即可。id填入SQL參數中。關於id生成策略的更多內容,可以參考這篇博客:https://www.cnblogs.com/haoxinyue/p/5208136.html在MP中,主要有以下幾種主鍵生成策略,我們可以結合IdType這個枚舉類的代碼來分析:自增(需保證資料庫中的主鍵欄位是自增的)手動輸入uuid雪花算法 .
  • 面試官問:MySQL 的自增 ID 用完了,怎麼辦?
    首先,創建一個最簡單的表,只包含一個自增 id,並插入一條數據。Duplicate entry '4294967295' for key 'PRIMARY' 0.00054 sec說明,當再次插入時,使用的自增 ID 還是 4294967295,報主鍵衝突的錯誤。
  • MyBatis如何做數據清洗
    原來的資料庫結構及業務邏輯發生了變化,升級後的系統需要兼容歷史數據,此時就需要對歷史數據進行清洗。,遇到了一個問題,那就是清洗後的數據無法指定主鍵即id的值,新寫入的數據主鍵值被數據自增ID替換掉了。/** * 自增主鍵 */@TableId(value = "id", type = IdType.AUTO)private Long id;問題就出現在@TableId註解上。