spring 事物配置

2021-08-30 05:15:04 字數 3446 閱讀 6054

struts+hibernate+spring整合開發web應用是相當流行的,只需要簡單的配置就能輕鬆的對資料庫進行crud操作,下面就hibernate+spring的配置做一下剖析,一邊與大家一起分享經驗:

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類似的操作。

Spring事物管理

spring 事物的管理是申明式事物,通過在spring的xml檔案中配置3個元件,來管理整個專案的事物.最初事物的概念是在資料庫中提出的,為了保證資料的安全性.事物通俗的說就是原子的操作流程,符合acid,分別為原子性,一致性,隔離性,永久性.原子性是指事物中多張表的資料操作,要嘛全部成功,如其中...

spring事物管理

事務 1.什麼是事務?事務是我們要執行的一系列操作,要麼完全執行,要麼完全不執行。這樣可以確保所有的操作都成功,否者不會跟新資料庫。2.事務有兩種結果 所有的操作執行成功,提交事務。如果有乙個操作執行失敗,將發生回滾,撤銷之前到事務發生開始時執行的操作。3.spring的事務使用 有兩個類datas...

Spring事物介紹

jdbc conn.setautocommite false 設定手動控制事務 hibernate session.begintransaction 開啟乙個事務 spring宣告式事務管理器類 jdbc技術 datasourcetransactionmanager hibernate技術 hibe...