亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis在insert插入操作后如何返回主鍵id問題

 更新時(shí)間:2023年12月08日 10:31:57   作者:z1ztai  
這篇文章主要介紹了Mybatis在insert插入操作后如何返回主鍵id問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、使用JDBC的getGeneratedKeys方法

JDBC 提供了一個(gè) getGeneratedKeys 方法,用于獲取插入記錄的主鍵 ID。

在 MyBatis 中,我們可以通過(guò)設(shè)置 useGeneratedKeys 和 keyProperty 屬性來(lái)使用該方法。

1. 設(shè)置 useGeneratedKeys 屬性

useGeneratedKeys 屬性的作用是告訴 MyBatis 使用 JDBC 的 getGeneratedKeys 方法獲取插入記錄的主鍵 ID。

在配置文件中,我們可以在 insert 元素中設(shè)置 useGeneratedKeys 屬性:

<insert id="insertUser" parameterType="User" useGeneratedKeys="true">
    insert into user (name, age) values (#{name}, #{age})
</insert>

2. 設(shè)置keyProperty屬性

keyProperty 屬性的作用是指定主鍵 ID 賦值的目標(biāo)屬性。

在配置文件中,我們可以在 insert 元素中設(shè)置 keyProperty 屬性:

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
    insert into user (name, age) values (#{name}, #{age})
</insert>

使用 JDBC 的 getGeneratedKeys 方法獲取主鍵 ID 的方式非常簡(jiǎn)單,但需要注意的是,該方法只適用于支持自動(dòng)生成主鍵的數(shù)據(jù)庫(kù),如 MySQL、Oracle 等。

二、使用SELECT LAST_INSERT_ID()函數(shù)

對(duì)于不支持 JDBC 的 getGeneratedKeys 方法的數(shù)據(jù)庫(kù),我們可以使用 SELECT LAST_INSERT_ID() 函數(shù)獲取插入記錄的主鍵 ID。

在 MyBatis 中,我們可以通過(guò)設(shè)置 useGeneratedKeys 和 keyProperty 屬性來(lái)使用該方法。

1. 設(shè)置 useGeneratedKeys 屬性

在配置文件中,我們可以在 insert 元素中設(shè)置 useGeneratedKeys 屬性,并將其值設(shè)為 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 元素結(jié)束后,我們可以使用 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 的方式也比較簡(jiǎn)單,但需要注意的是,該方法只適用于支持 SELECT LAST_INSERT_ID() 函數(shù)的數(shù)據(jù)庫(kù),如 MySQL 等。

三、使用UUID作為主鍵

在某些情況下,我們可能并不需要數(shù)據(jù)庫(kù)自動(dòng)生成主鍵,而是需要自定義主鍵。

在這種情況下,我們可以使用 UUID 作為主鍵,MyBatis 中也提供了相應(yīng)的支持。

1. 定義主鍵為 UUID

在定義表結(jié)構(gòu)時(shí),我們可以將主鍵定義為 UUID 類型:

CREATE TABLE user (
    id VARCHAR(36) PRIMARY KEY,
    name VARCHAR(20),
    age INT
);

2. 使用 UUID 生成主鍵

在 MyBatis 中,我們可以使用 UUID 生成主鍵,并將其賦值給對(duì)象的 id 屬性。

在配置文件中,我們可以在 insert 元素中使用 selectKey 元素來(lái)生成主鍵:

<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ù)生成主鍵,并將其賦值給對(duì)象的 id 屬性。

這樣,在執(zhí)行插入操作時(shí),id 屬性就會(huì)被賦值為生成的 UUID。

使用 UUID 作為主鍵的方式可以靈活地滿足不同的需求,但需要注意的是,在某些場(chǎng)景下,UUID 的性能可能不如自增主鍵。

總結(jié)

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

相關(guān)文章

  • SpringBoot從2.7.x 升級(jí)到3.3注意事項(xiàng)

    SpringBoot從2.7.x 升級(jí)到3.3注意事項(xiàng)

    從SpringBoot 2.7.x升級(jí)到3.3涉及多個(gè)重要變更,特別是因?yàn)?nbsp;Spring Boot 3.x 系列基于 Jakarta EE 9,而不再使用 Java EE,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-09-09
  • 最詳細(xì)的Java循環(huán)結(jié)構(gòu)解析之for循環(huán)教程(適合小白)

    最詳細(xì)的Java循環(huán)結(jié)構(gòu)解析之for循環(huán)教程(適合小白)

    :循環(huán)結(jié)構(gòu)是指在程序中需要反復(fù)執(zhí)行某個(gè)功能而設(shè)置的一種程序結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于Java循環(huán)結(jié)構(gòu)解析之for循環(huán)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Java面試之動(dòng)態(tài)規(guī)劃與組合數(shù)

    Java面試之動(dòng)態(tài)規(guī)劃與組合數(shù)

    這篇文章主要介紹了Java面試之動(dòng)態(tài)規(guī)劃與組合數(shù)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • springboot實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的示例代碼

    springboot實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的示例代碼

    項(xiàng)目里面有用到用戶手機(jī)號(hào)注冊(cè)發(fā)短信功能,本文主要介紹了springboot實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java編寫簡(jiǎn)單計(jì)算器的完整實(shí)現(xiàn)過(guò)程

    Java編寫簡(jiǎn)單計(jì)算器的完整實(shí)現(xiàn)過(guò)程

    這篇文章主要給大家介紹了關(guān)于Java編寫簡(jiǎn)單計(jì)算器的完整實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • IDEA與JDK、Maven安裝配置完整步驟解析

    IDEA與JDK、Maven安裝配置完整步驟解析

    這篇文章主要介紹了如何安裝和配置IDE(IntelliJ?IDEA),包括IDE的安裝步驟、JDK的下載與配置、Maven的安裝與配置,以及如何在IDE中使用Maven進(jìn)行Java開發(fā),需要的朋友可以參考下
    2025-03-03
  • Spring實(shí)現(xiàn)郵件發(fā)送功能

    Spring實(shí)現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了Spring實(shí)現(xiàn)郵件發(fā)送功能,簡(jiǎn)單的發(fā)送郵件工具JavaMailSender使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • SpringBoot+SseEmitter和Vue3+EventSource實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)推送

    SpringBoot+SseEmitter和Vue3+EventSource實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)推送

    本文主要介紹了SpringBoot+SseEmitter和Vue3+EventSource實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)推送,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Spring?Cloud?Eureka(全面解析)?大白話

    Spring?Cloud?Eureka(全面解析)?大白話

    這篇文章主要介紹了Spring?Cloud?Eureka(全面解析)?大白話,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring boot跨域設(shè)置實(shí)例詳解

    Spring boot跨域設(shè)置實(shí)例詳解

    這篇文章主要介紹了Spring boot跨域設(shè)置實(shí)例詳解,簡(jiǎn)單介紹了跨域的定義,原因,使用場(chǎng)景及解決方案,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論