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