iBatis下插入資料返回資料ID的問題

2021-06-27 17:58:51 字數 2127 閱讀 4042

今天讓做ssi整合的東西,遇到了使用

ibatis插入資料返回主鍵的問題。一開始按照自己的想法,在插入資料之後通過當前條資料的其他欄位將這條資料的主鍵查詢出來,結果當然是不滿意。然後在業務層,通過時間生成id,不過也被人家給淘汰掉了。後來才突然想到

ibatis下邊有selectkey元素,不過只是用過在oracle下邊的,不知道mysql下邊有沒有。後來查詢了一下資料,才發現常用資料庫都是用這個屬性的。不過,這涉及到先生成和後生成的問題,不過貌似之後mysql是後生成的,因為mysql並沒有sequence序列麼。

ibatis的sqlmap配置檔案的

selectkey

元素有個

type

屬性,可以指定

pre或者

post

表示前生成(

pre)還是後生成(

post

)。 oracle設定 

<insertid="insertproduct-oracle"

parameterclass="com.domain.product"

>

<selectkeyresultclass="int"

keyproperty="id"

type="pre"

>

selectkey>

insert>

ms sql server配置 

<insertid="insertproduct-ms-sql"

parameterclass="com.domain.product"

>

<selectkeyresultclass="int"

keyproperty="id"

type="post"

>

selectkey>

insert>

上述ms sql server配置隨是官網提供的配置,但實際上卻恰恰隱患重重!按下述配置,確保獲得有效主鍵。 

<insertid="insertproduct-ms-sql"

parameterclass="com.domain.product"

>

<selectkeyresultclass="int"

keyproperty="id"

>

select scope_identity() as id ]]>

selectkey>

insert>

mysql配置 

<insertid="insertproduct-mysql"

parameterclass="com.domain.product"

>

<selectkeyresultclass="int"

keyproperty="id"

>

selectkey>

insert>

通過以上方式,可以最大程度上確保插入資料的時候獲得當前自增主鍵。

ibatis插入資料後返回id

oracle資料庫 首先看配置 insert into operation id,name,desc values operation seq.nextval,name desc select operation seq.currval as id from dual 首先來解釋下id,這個是對應的...

Ibatis插入資料返回ID的方法

ibatis插入資料返回id的方法 主要就是利用seelctkey來獲取這個id值,但是oracle和mysql的區別還是很大的 selectkey resultclass long keyproperty id select operation seq.nextval as idfrom desc...

ibatis批量插入資料庫

在大批量插入資料庫的時候,如果用for迴圈一條條插入效率肯定會異常底下,本文介紹ibatis批量插入是如何做的,我這裡使用多執行緒進行分批插入,一批插入一萬條,實際插入交給子執行緒處理,這樣可以節省前端等待時間。在dao層定義個執行緒池,執行緒池定義方式以及引數如下 private static t...