ibatis中selectKey的用法與原始碼

2021-08-27 07:22:48 字數 1533 閱讀 6679

最近用到插入oracle資料庫時,主鍵id是sequnce自動生成,具體寫法如下

對於oracle:

select seq_user_id.nextval as id from dual

insert into user

(id,name,password)

values

(#id#,#name#,#password#)

對於mysql:

insert into user

(name,password)

values

(#name#,#password#)

select last_insert_id() as id

上面是兩種資料庫的實現。

下面我們看看原始碼是如何做的

//-- basic methods

/*** call an insert statement by id

** @param sessionscope - the session

* @param id - the statement id

* @param param - the parameter object

* @return - the generated key (or null)

* @throws sqlexception - if the insert fails

*/public object insert(sessionscope sessionscope, string id, object param) throws sqlexception

// here we get the old value for the key property. we'll want it later if for some reason the

// insert fails.

object oldkeyvalue = null;

string keyproperty = null;

boolean resetkeyvalueonfailure = false;

//對於oracle適用於執行insert之前執行selectkey獲取id值

if (selectkeystatement != null && !selectkeystatement.isrunaftersql())

statementscope statementscope = beginstatementscope(sessionscope, ms);

try catch (sqlexception e) finally

//對於mysql適用於執行完insert後,獲取id值

if (selectkeystatement != null && selectkeystatement.isrunaftersql())

//提交事務

autocommittransaction(sessionscope, autostart);

} finally

return generatedkey;

}

ibatis中SqlMapClient事務處理

ibatis中sqlmapclient事務 sqlmapclient.starttransaction 開始事務sqlmapclient.committransaction 提交事務sqlmapclient.endtransaction 結束事務,操作失敗的時候,整個事務就會在endtransact...

iBATIS中statement ID命名衝突

在用ibatis開發軟體時,需要寫很多sqlmap xml檔案,尤其是多人開發時候,這樣就會造成statement中的id會發生命名衝突,比如 在a.xml b.xml中,有以下片斷 a.xml b.xml 兩個sqlmap file都有id為 abcd 的配置,如果這種情況,執行setsqlmap...

ibatis中應用技巧

ibatis中經常遇到乙個公用的sql被多處呼叫的情況。比如許可權驗證這塊,我需要知道每次使用者取出的資源驗證對其是否有許可權,則需要對取出的資源列表做乙個過濾。資源表結構大致如下 sys res row id 資源id sys sys res row id 上級資源id system row id...