1、 準備工作:
可以利用hibernate tools生成相關對映檔案已經po物件、dao物件,dao也可以自己手動編寫,無非就是實現crud,如果通過繼承hibernate提供的 hibernatedaosupport,則可以更輕鬆的實現
<?xml version="1.0" encoding="utf-8"?>
org.hibernate.dialect.mysqldialect
true
true
propagation_required
propagation_required
propagation_required
propagation_required
propagation_required
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
可以看到配置檔案的步驟:
1、 配置資料來源
2、 配置會話工廠(依賴注入上面的資料來源,還要注入hbm對映檔案[注意正確的位置]、hibernate屬性檔案)
3、 配置事務管理器(依賴注入上面的會話工廠)
4、 spring中宣告事務管理器(根據需要又可分為幾種,但都要依賴注入上面的事務管理器,此外還需要配置transationattributes)
後面的一些普通的bean配置就不用說了
上面的例子中使用的宣告事務管理器是:transactionproxyfactorybean,這樣的話我們就需要在後面配置目標bean,比如上面的例子中我們的原服務物件是id為 us的userservice(沒有實現介面),所以我們為他配置了id為userservice的**物件(目標bean),程式中使用時只能通過使用**物件才能實現資料庫操作功能(**物件的父類是上面宣告的事務管理器,一邊我們使用的時候開啟事務),如果直接使用服務物件就無法開啟事務
注:userservice 就是上面配置的**物件的id,而不是原服務物件的id
但是如果我們想通過原服務物件的id來使用物件,則我們需要使用**事務管理器beannameautoproxycreator(根據beanname自動**),上面的配置檔案需要做改動,做兩件事(當然先要刪除原來配置的transactionproxyfactorybean,不然就混亂了,可能會報錯的):
1、 增加乙個事務***
propagation_required
propagation_required
propagation_required
propagation_required
propagation_required
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
propagation_required,readonly
2、 定義自動**事務管理器
ustransactioninterceptor
然後我們在程式中呼叫時應如下:
注:注意與上面使用transactionproxyfactorybean時的呼叫區別,此處我們用getbean時直接取原服務層物件的id,不需要去配置目標bea,這也正是
beannameautoproxycreator(根據bean名稱自動**)的含義所在
附錄:1、關於hibernate的屬性詳解:
hibernate 會話廠 sessionfactory
session 就是用於每次與資料庫會話的,因此需要:
資料庫的配置引數,這些引數就是 上面的資料來源指定的! 因此我們只需引用即可: ref="datasource";
實體對映配置 hibernate.cfg.xml 配置
結果快取配置(這裡使用的是開源的 ehcache)
org/springframework/samples/jpetstore/domain/banner.hbm.xml
org/springframework/samples/jpetstore/domain/category.hbm.xml
org/springframework/samples/jpetstore/domain/inventory.hbm.xml
org/springframework/samples/jpetstore/domain/item.hbm.xml
org/springframework/samples/jpetstore/domain/lineitem.hbm.xml
org/springframework/samples/jpetstore/domain/order.hbm.xml
org/springframework/samples/jpetstore/domain/product.hbm.xml
org/springframework/samples/jpetstore/domain/supplier.hbm.xml
$true
true
true
2100
50update
update
true
org.hibernate.cache.ehcacheprovider
2、spring的transactionattributes
propagation_required:支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇。
propagation_supports:支援當前事務,如果當前沒有事務,就以非事務方式執行。
propagation_mandatory:支援當前事務,如果當前沒有事務,就丟擲異常。
propagation_requires_new:新建事務,如果當前存在事務,把當前事務掛起。
propagation_not_supported:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
propagation_never:以非事務方式執行,如果當前存在事務,則丟擲異常。
propagation_nested:如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則進行與propagation_required類似的操作。
SSH中事務配置詳解
前段時間對spring的事務配置做了比較深入的研究,在此之間對spring的事務配置雖說也配置過,但是一直沒有乙個清楚的認識。通過這次的學習發覺spring的事務配置只要把思路理清,還是比較好掌握的。總結如下 spring配置檔案中關於事務配置總是由三個組成部分,分別是datasource tran...
事務及SSH框架相關配置
propagation required事務 採用程式設計式事務 1 getcurrentsession 與opensession 的區別?採用getcurrentsession 建立的session會繫結到當前執行緒中,而採用opensession 建立的session則不會 採用getcurre...
ssh唯讀事務的管理
概念 從這一點設定的時間點開始 時間點a 到這個事務結束的過程中,其他事務所提交的資料,該事務將看不見!查詢中不會出現別人在時間點a之後提交的資料 應用場合 怎樣設定 對於唯讀查詢,可以指定事務型別為readonly,即唯讀事務。由於唯讀事務不存在資料的修改,因此資料庫將會為唯讀事務提供一些優化手段...