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

Mybatis?selectKey 如何返回新增用戶的id值

 更新時(shí)間:2022年01月23日 10:19:20   作者:_七七  
這篇文章主要介紹了Mybatis?selectKey 如何返回新增用戶的id值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis selectKey返回新增用戶的id值

一、需求:新增用戶后,同時(shí)還要返回當(dāng)前新增用戶的id值

id是由數(shù)據(jù)庫(kù)的自動(dòng)增長(zhǎng)來(lái)實(shí)現(xiàn)的,所以就相當(dāng)于我們要在新增后將自動(dòng)增長(zhǎng)auto_increment的值返回。

?<insert id="saveUser" parameterType="USER">
??? ?<!-- 配置保存時(shí)獲取插入的id -->?
??? ?<selectKey keyColumn="id" keyProperty="id" resultType="int">?
??? ??? ?select last_insert_id() as id;?
??? ?</selectKey>
??? ?insert into user(username,birthday,sex,address)?
??? ?values(#{username},#{birthday},#{sex},#{address})?
?</insert>

通過(guò)LAST_INSERT_ID()獲得剛插入的自動(dòng)增長(zhǎng)的id的值

或者

SELECT @@IDENTITY AS id
?<insert id="saveUser" parameterType="USER">
?? ?insert into user(username,birthday,sex,address)?
??? ?values(#{username},#{birthday},#{sex},#{address})
?? ?<selectKey resultClass="long" keyProperty="id">
?? ??? ?SELECT @@IDENTITY AS id
?? ?</selectKey>
</insert>

這時(shí)也能返回新增那一條數(shù)據(jù)的id,這時(shí)的selectkey沒(méi)有要求寫(xiě)在前面以@@定義的變量都是系統(tǒng)的全局變量。

二、為什么要使用selectKey?

數(shù)據(jù)庫(kù)主鍵包括自增和非自增,有時(shí)候新增一條數(shù)據(jù)不僅僅知道成功就行了,后邊的邏輯可能還需要這個(gè)新增的主鍵,這時(shí)候再查詢數(shù)據(jù)庫(kù)就有點(diǎn)耗時(shí)耗力,我們可以采用selectKey來(lái)幫助我們獲取新增的主鍵。

三、屬性解析

  • keyProperty

結(jié)果集映射目標(biāo)類(lèi)的屬性;

若存在多個(gè),則使用逗號(hào)分隔;

  • keyColumn

目標(biāo)類(lèi)的屬性,映射結(jié)果集的列名;

若存在多個(gè),則使用逗號(hào)分割;

  • resultType

設(shè)置返回類(lèi)型;

可使用全類(lèi)名或者是別名;

  • order

設(shè)置此selectKey的執(zhí)行順序是早于sql語(yǔ)句,還是晚于sql語(yǔ)句;

候選值是BEFORE和AFTER;

  • statementType

設(shè)置sql語(yǔ)句的映射類(lèi)型;候選值有:

STATEMENT,PREPARED,CALLABLE;

  • databaseID

與ibatis全局配置中的databaseIdProvider標(biāo)簽呼應(yīng)

Mybatis selectKey 采坑筆記

一、現(xiàn)象描述

觀察某張表的數(shù)據(jù)時(shí),發(fā)現(xiàn)設(shè)置了自增屬性的AutoId,在插入數(shù)據(jù)后并不是自增的,而是數(shù)值跳躍著增加的。

二、問(wèn)題排查

在確認(rèn)AutoId的自增屬性設(shè)置沒(méi)有問(wèn)題后,開(kāi)始懷疑是不是insert語(yǔ)句的問(wèn)題,insert語(yǔ)句是MyBatis Generator自動(dòng)生成的,示例如下:

<insert id="insert" parameterType="com.xx.yy.datasource.domain.User" >
? <selectKey resultType="java.lang.Long" keyProperty="autoId" order="BEFORE" >
? SELECT LAST_INSERT_ID()
</selectKey>
? insert into User (AutoId, UserId, Mobile, Username, CreateTime, LastModifyTime)
? values (#{autoId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{mobile,jdbcType=VARCHAR},?
? ?#{username,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{lastModifyTime,jdbcType=TIMESTAMP}
? ?)
?</insert>

insert into 語(yǔ)句在語(yǔ)法上是沒(méi)有問(wèn)題的,那縮小排查范圍,就是selectKey的用法可能有問(wèn)題!

三、selectKey 用法再認(rèn)識(shí)

  • resultType:表示的是返回主鍵的類(lèi)型
  • keyProperty:對(duì)應(yīng)的domain 對(duì)象中需要被賦值的屬性,一般是主鍵
  • order:如果設(shè)置為 BEFORE,那么它會(huì)首先選擇主鍵,設(shè)置 keyProperty 然后執(zhí)行插入語(yǔ)句。如果設(shè)置為 AFTER,那么先執(zhí)行插入語(yǔ)句,然后是 selectKey 元素

四、selectKey用法的坑

SelectKey需要注意order屬性,像MySQL一類(lèi)支持自動(dòng)增長(zhǎng)類(lèi)型的數(shù)據(jù)庫(kù)中,order需要設(shè)置為after才會(huì)取到正確的值,像Oracle這樣取序列的情況,需要設(shè)置為before。

在上面示例的insert用法中,就是order屬性設(shè)置成了BEFORE才導(dǎo)致自增屬性沒(méi)有生效。改成AFTER后,主鍵就開(kāi)始自增了。

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

相關(guān)文章

  • 詳解Java泛型及其應(yīng)用

    詳解Java泛型及其應(yīng)用

    這篇文章主要介紹了Java泛型及其應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java多線程之定時(shí)器Timer的實(shí)現(xiàn)

    Java多線程之定時(shí)器Timer的實(shí)現(xiàn)

    定時(shí)/計(jì)劃功能在Java應(yīng)用的各個(gè)領(lǐng)域都使用得非常多,比方說(shuō)Web層面。本文主要為大家介紹了Java多線程中定時(shí)器Timer的實(shí)現(xiàn),感興趣的小伙伴可以了解一下
    2022-10-10
  • Java并發(fā)之Phaser的全面解析詳解

    Java并發(fā)之Phaser的全面解析詳解

    Phaser是Java中一個(gè)靈活的同步工具,其優(yōu)點(diǎn)在于支持多階段的任務(wù)拆分與同步,并且能夠動(dòng)態(tài)地注冊(cè)與注銷(xiāo)參與者,下面我們就來(lái)深入了解一下Phaser的應(yīng)用吧
    2024-02-02
  • Java實(shí)現(xiàn)FTP服務(wù)器功能實(shí)例代碼

    Java實(shí)現(xiàn)FTP服務(wù)器功能實(shí)例代碼

    FTP(File Transfer Protocol 文件傳輸協(xié)議)是Internet 上用來(lái)傳送文件的協(xié)議,本文給大家分享Java實(shí)現(xiàn)FTP服務(wù)器功能實(shí)例代碼,對(duì)java實(shí)現(xiàn)ftp服務(wù)器相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Springboot?異步任務(wù)和定時(shí)任務(wù)的異步處理

    Springboot?異步任務(wù)和定時(shí)任務(wù)的異步處理

    本文介紹了Springboot異步任務(wù)和定時(shí)任務(wù)的異步處理,Springboot?中,異步任務(wù)和定時(shí)任務(wù)是經(jīng)常遇到的處理問(wèn)題方式,為了能夠用好這兩項(xiàng)配置,不干擾正常的業(yè)務(wù),需要對(duì)其進(jìn)行異步化配置。怎么設(shè)置合理的異步處理線程就是其核心和關(guān)鍵,下文詳情需要的朋友可以參考下
    2022-05-05
  • 解讀List?list=new?ArrayList()是怎么回事

    解讀List?list=new?ArrayList()是怎么回事

    這篇文章主要介紹了解讀List?list=new?ArrayList()是怎么回事,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java9中接口的私有方法詳解

    Java9中接口的私有方法詳解

    印象中Java?接口就沒(méi)有論述私有方法這回事。既然?Java?9?添加了這項(xiàng)特性,那么,應(yīng)該就有它的用途,我們一起來(lái)看看?Java?9?中的接口的私有方法是什么樣的吧
    2023-04-04
  • Struts2學(xué)習(xí)教程之自定義類(lèi)型轉(zhuǎn)換器的方法

    Struts2學(xué)習(xí)教程之自定義類(lèi)型轉(zhuǎn)換器的方法

    類(lèi)型轉(zhuǎn)換器的作用是將請(qǐng)求中的字符串或字符串?dāng)?shù)組參數(shù)與action中的對(duì)象進(jìn)行相互轉(zhuǎn)換。下面這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)教程之自定義類(lèi)型轉(zhuǎn)換器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • java設(shè)計(jì)模式之單例模式的詳解及優(yōu)點(diǎn)

    java設(shè)計(jì)模式之單例模式的詳解及優(yōu)點(diǎn)

    這篇文章主要介紹了java設(shè)計(jì)模式之單例模式的詳解及優(yōu)點(diǎn)的相關(guān)資料,如果一個(gè)類(lèi)始終只能創(chuàng)建一個(gè)實(shí)例,那么這個(gè)類(lèi)被稱(chēng)為單例類(lèi),這種設(shè)計(jì)模式被稱(chēng)為單例模式,需要的朋友可以參考下
    2017-08-08
  • 如何獲取Maven項(xiàng)目的版本號(hào)

    如何獲取Maven項(xiàng)目的版本號(hào)

    最近需要在項(xiàng)目中獲取項(xiàng)目的版本號(hào),最笨的方法莫過(guò)于硬編碼一個(gè)版本號(hào),當(dāng)然之前我也是這么干的。不過(guò)閑下來(lái)的時(shí)候突發(fā)奇想Spring Boot項(xiàng)目中pom.xml定義的版本號(hào)(也就是project.version的值)能不能通過(guò)API獲得呢?于是利用摸魚(yú)的時(shí)間研究了這種無(wú)聊透頂?shù)臇|西。
    2021-05-05

最新評(píng)論

页游| 新疆| 图木舒克市| 宁远县| 农安县| 安陆市| 洮南市| 休宁县| 晋中市| 潮州市| 建德市| 上虞市| 宜君县| 新疆| 澜沧| 祁门县| 山东| 彰化市| 新沂市| 固镇县| 镇赉县| 灯塔市| 临洮县| 于田县| 石柱| 肇东市| 乌兰县| 罗平县| 磐安县| 临泽县| 绥德县| 仁布县| 井研县| 公主岭市| 洞头县| 鲁甸县| 依安县| 柘城县| 太仓市| 兴山县| 泰宁县|