以前在做spring security時,就注意到乙個細節,那就是當我只使用spring核心功能與hibernate時,居然也要依賴於spring-jdbc包,至少會報以下錯誤:
org/springframework/jdbc/support/sqlexceptiontranslator
當時並不在意這個,少就加上嘛,現在想來,的確有些奇怪,session、transaction之類的應該是hibernate自帶的,怎麼還要依賴於spring jdbc包,今天花了點時間看了下spring jdbc,但是奇怪的是,並沒有spring jdbc中發現有處理事物的類與方法,那spring jdbc是怎麼處理事務的呢?首先要做的就是在網上找資料,有前輩已經分析了,然後自己看了一下原始碼,的確是那樣的,那就是hibernate與spring jdbc進行事務控制的是同乙個類。在hibernatetransactionmanager中的確有這麼個注釋:
在此類的dobegin方法中,有一段**說得比較具體:
...// register the hibernate session's jdbc connection for the datasource, if set.
if (getdatasource() != null)
if (logger.isdebugenabled())
transactionsynchronizationmanager.bindresource(getdatasource(), conholder);
txobject.setconnectionholder(conholder);
}...
從上面的第乙個if語句中可以看出,只要jdbctemplate與hibernatetemplate使用的是同乙個datasource,那麼就可以達到控制事物的目的,這也說明了為什麼hibernatedaosupport為什麼要依賴spring jdbc,因為它的底層事物控制也要依賴於spring jdbc的事物控制,而不是hibernate的底層事物控制。
spring JDBC模板類 事務管理平台
jar包 建立乙個測試類 test jdbc模板的基本使用 public void demo1 1.配置內建連線池 2.將模板配置到spring中 也可以讓dao層繼承hibernatedaosupport類注入sessionfactory建立,或者是連線池 3.編寫測試類 引入spring aop...
Day3 Spring JDBC 事務管理
jdbc的程式設計 獲取鏈結 class.forname com.mysql.jdbc.driver connection conn drivermanager.getconnection url,username,password statement stmt conn.createstateme...
SPRING JDBC事務管理的三種配置方法
一.一般的jdbc事務,通常可以這樣處理 txproxytemplate abstract true class org.springframework.transaction.interceptor.transactionproxyfactorybean propagation required,...