ibatis中SqlMapClient事務處理

2021-07-03 10:18:40 字數 792 閱讀 1569

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

新版的ibatis中,不再有rollbacktransaction方法,只能選擇endtransaction代替。如果**沒有顯式的呼叫sqlmapclient.starttransaction()方法,則ibatis會將當前的資料庫操作視為自動提交模式(autocommit=true),不過,值得注意的是,這裡的所謂「自動判定」,實際上ibatis並沒有去檢查當前是否已經有事務開啟。

實際上,在執行update語句時,sqlmap會檢查當前的session是否已經關聯了某個資料庫連線,如果沒有,則取乙個資料庫連線,將其autocommit屬性設為true,然後執行update 操作,執行完之後又將這個連線釋放。這樣,上面兩次update 操作實際上先後獲取了兩個資料庫連線,而不是我們通常所認為的兩次update 操作都基於同乙個jdbc connection。這點在開發時需特別注意。

對於多條sql 組合而成的乙個jdbc 事務操作而言,必須使用starttransaction、committransaction和endtransaction操作以實現整體事務的原子性。

注意!事務不能巢狀。在呼叫commit或end方法之前,從同一執行緒多次呼叫starttransaction將引起丟擲例外。換句話說,對於每個sqlmap例項,每個執行緒最多只能開啟乙個事務。

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...

IBATIS中 與 使用

ibatis中關於iterate和 與 的應用 乙個包含list元素的hashmap引數賦給sqlmap public int getcountbyid string id,string title,list ids throws exception 上面的ids元素是乙個list,裡面包含了乙個i...