Mybatis - SelectKey

一、背景:

SelectKey在Mybatis中是為了解決Insert數(shù)據(jù)時(shí)不支持主鍵自動(dòng)生成的問(wèn)題,他可以很隨意的設(shè)置生成主鍵的方式。

屬性 -描述:

① keyProperty : selectKey 語(yǔ)句結(jié)果應(yīng)該被設(shè)置的目標(biāo)屬性。

② resultType:結(jié)果的類型。MyBatis 通??梢运愠鰜?lái),但是寫上也沒(méi)有問(wèn)題。MyBatis 允許任何簡(jiǎn)單類型用作主鍵的類型,包括字符串。

③ order: 這可以被設(shè)置為 BEFORE 或 AFTER。如果設(shè)置為 BEFORE,那么它會(huì)首先選擇主鍵,設(shè)置 keyProperty 然后執(zhí)行插入語(yǔ)句。如果設(shè)置為 AFTER,那么先執(zhí)行插入語(yǔ)句,然后是 selectKey 元素-這和如 Oracle 數(shù)據(jù)庫(kù)相似,可以在插入語(yǔ)句中嵌入序列調(diào)用。

④ statementType:和前面的相同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 語(yǔ)句的映射類型,分別代表PreparedStatement 和CallableStatement 類型。

二、應(yīng)用場(chǎng)景

使用SELECT LAST_INSERT_ID() 這個(gè)sql語(yǔ)句來(lái)獲取插入記錄后返回的自增id

<insert id="insert" parameterClass="UserDO">

INSERT INTO user( user_id,user_nick,tel_phone,address,status, user_type,remark, gmt_create, gmt_modified)
VALUES ( #userId#, #userNick#, #telPhone#, #address#, #status#,
#userType#, #remark#, now(), now())
<selectKey keyProperty="id" resultClass="java.lang.Long">
SELECT LAST_INSERT_ID() AS value
</selectKey>
</insert>
其中user表的主鍵是自增的id.

三、存在的問(wèn)題

【1-1】<selectKey keyProperty="id" resultClass="java.lang.Long">
SELECT LAST_INSERT_ID() AS value
</selectKey>
在高并發(fā)多個(gè)數(shù)據(jù)表都有寫入的情況,下,這個(gè)語(yǔ)句返回的就有可能是另外一張表剛剛寫入的記錄id,這樣根據(jù)這個(gè)id去查詢就返回沒(méi)有這個(gè)記錄了。
【1-2】解決方案:用這個(gè)user表的唯一索引user_id去重新查一次user表來(lái)獲取這個(gè)id,這種重新去查的方法基本可以滿足大部分場(chǎng)景需求

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的...
    笨鳥(niǎo)慢飛閱讀 6,248評(píng)論 0 4
  • 我站在大足石刻最著名的寶頂山石刻長(zhǎng)廊前,仿佛是打開(kāi)了一扇中國(guó)古代石刻歷史之門。讓我驚嘆的是,我們的前人怎么會(huì)有這種...
    新月如水閱讀 1,884評(píng)論 14 15
  • 1,一個(gè)普通的春節(jié) 我們一家都不是特別注重節(jié)日的人,不會(huì)有特別的慶祝。即便是過(guò)年,仍和往常一樣吃吃喝喝,各做各的事...
    九州宅男兒閱讀 209評(píng)論 0 0
  • 不 說(shuō) 故 事 , 只 講 道 理 提問(wèn) 挽姐,我最近因?yàn)橐恍┦虑榘炎约号煤懿婚_(kāi)心,但是我朋友卻說(shuō)這都是小事不值...
    愛(ài)晚睡閱讀 1,831評(píng)論 0 5
  • 最近采用Instruments 來(lái)分析整個(gè)應(yīng)用程序的性能.發(fā)現(xiàn)很多有意思的點(diǎn),以及性能優(yōu)化和一些分析性能消耗的技巧...
    ny5168閱讀 857評(píng)論 0 0

友情鏈接更多精彩內(nèi)容