Mybatis在insert插入操作后如何返回主鍵id問題
一、使用JDBC的getGeneratedKeys方法
JDBC 提供了一個 getGeneratedKeys 方法,用于獲取插入記錄的主鍵 ID。
在 MyBatis 中,我們可以通過設置 useGeneratedKeys 和 keyProperty 屬性來使用該方法。
1. 設置 useGeneratedKeys 屬性
useGeneratedKeys 屬性的作用是告訴 MyBatis 使用 JDBC 的 getGeneratedKeys 方法獲取插入記錄的主鍵 ID。
在配置文件中,我們可以在 insert 元素中設置 useGeneratedKeys 屬性:
<insert id="insertUser" parameterType="User" useGeneratedKeys="true"> insert into user (name, age) values (#{name}, #{age}) </insert>
2. 設置keyProperty屬性
keyProperty 屬性的作用是指定主鍵 ID 賦值的目標屬性。
在配置文件中,我們可以在 insert 元素中設置 keyProperty 屬性:
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user (name, age) values (#{name}, #{age}) </insert>
使用 JDBC 的 getGeneratedKeys 方法獲取主鍵 ID 的方式非常簡單,但需要注意的是,該方法只適用于支持自動生成主鍵的數(shù)據(jù)庫,如 MySQL、Oracle 等。
二、使用SELECT LAST_INSERT_ID()函數(shù)
對于不支持 JDBC 的 getGeneratedKeys 方法的數(shù)據(jù)庫,我們可以使用 SELECT LAST_INSERT_ID() 函數(shù)獲取插入記錄的主鍵 ID。
在 MyBatis 中,我們可以通過設置 useGeneratedKeys 和 keyProperty 屬性來使用該方法。
1. 設置 useGeneratedKeys 屬性
在配置文件中,我們可以在 insert 元素中設置 useGeneratedKeys 屬性,并將其值設為 false:
<insert id="insertUser" parameterType="User" useGeneratedKeys="false"> insert into user (name, age) values (#{name}, #{age}) <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> </insert>
2. 使用 SELECT LAST_INSERT_ID() 函數(shù)
在 insert 元素結束后,我們可以使用 SELECT LAST_INSERT_ID() 函數(shù)獲取插入記錄的主鍵 ID:
<insert id="insertUser" parameterType="User" useGeneratedKeys="false"> insert into user (name, age) values (#{name}, #{age}) <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> </insert>
使用 SELECT LAST_INSERT_ID() 函數(shù)獲取主鍵 ID 的方式也比較簡單,但需要注意的是,該方法只適用于支持 SELECT LAST_INSERT_ID() 函數(shù)的數(shù)據(jù)庫,如 MySQL 等。
三、使用UUID作為主鍵
在某些情況下,我們可能并不需要數(shù)據(jù)庫自動生成主鍵,而是需要自定義主鍵。
在這種情況下,我們可以使用 UUID 作為主鍵,MyBatis 中也提供了相應的支持。
1. 定義主鍵為 UUID
在定義表結構時,我們可以將主鍵定義為 UUID 類型:
CREATE TABLE user ( id VARCHAR(36) PRIMARY KEY, name VARCHAR(20), age INT );
2. 使用 UUID 生成主鍵
在 MyBatis 中,我們可以使用 UUID 生成主鍵,并將其賦值給對象的 id 屬性。
在配置文件中,我們可以在 insert 元素中使用 selectKey 元素來生成主鍵:
<insert id="insertUser" parameterType="User"> <selectKey resultType="java.lang.String" keyProperty="id" order="BEFORE"> SELECT UUID() </selectKey> insert into user (id, name, age) values (#{id}, #{name}, #{age}) </insert>
在 selectKey 元素中,我們使用 SELECT UUID() 函數(shù)生成主鍵,并將其賦值給對象的 id 屬性。
這樣,在執(zhí)行插入操作時,id 屬性就會被賦值為生成的 UUID。
使用 UUID 作為主鍵的方式可以靈活地滿足不同的需求,但需要注意的是,在某些場景下,UUID 的性能可能不如自增主鍵。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
最詳細的Java循環(huán)結構解析之for循環(huán)教程(適合小白)
:循環(huán)結構是指在程序中需要反復執(zhí)行某個功能而設置的一種程序結構,下面這篇文章主要給大家介紹了關于Java循環(huán)結構解析之for循環(huán)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-09-09Java面試之動態(tài)規(guī)劃與組合數(shù)
這篇文章主要介紹了Java面試之動態(tài)規(guī)劃與組合數(shù)的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09springboot實現(xiàn)發(fā)送短信驗證碼的示例代碼
項目里面有用到用戶手機號注冊發(fā)短信功能,本文主要介紹了springboot實現(xiàn)發(fā)送短信驗證碼的示例代碼,具有一定的參考價值,感興趣的可以了解一下2023-09-09SpringBoot+SseEmitter和Vue3+EventSource實現(xiàn)實時數(shù)據(jù)推送
本文主要介紹了SpringBoot+SseEmitter和Vue3+EventSource實現(xiàn)實時數(shù)據(jù)推送,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-03-03