最近用到插入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...