程式設計式事務(少用):
a) 需要事務處理的dao類需繼承namedparameterjdbcdaosupport這個類;
c) 往dao中注入資料來源;
d) 配置事務管理器,並往事務管理器中注入資料來源;
e)往dao中注入事務管理器。
a) 需要事務處理的dao類需繼承namedparameterjdbcdaosupport這個類;
c) 往dao中注入資料來源;
d) 配置事務管理器,並往事務管理器中注入資料來源;
e) 配置事務模板,並往事務模板中注入事務管理器;
f)往dao中注入事務模板。
總結:dao(繼承namedparameterjdbcdaosupport,並注入資料來源
)-->事務模板-->事務管理器(資料來源)-->資料來源
申明式事務:
1)使用**工廠:
步驟
1:宣告委託物件,如:
步驟
2:
定義事務管理器,如:
步驟
3:建立事務**父工廠
注意:
1. abstract=
「true
「說明該工廠為抽象工廠
,無法進行物件處理
,只能被繼承
2. transactionattributes
表示設定事務的傳播屬性
步驟
4:建立事務子工廠
步驟
5:
呼叫:往需要
userdao
物件的呼叫者注入
userdao
注意:注入的是**了
userdao
物件的事務子工廠,並且使用介面宣告。
如:iuserdao userdaoproxy;
//省略get
,set
方法
2)使用命名空間(一般使用這個):
步驟1:引入命名空間
步驟2:定義事務通知者
advice
步驟3:再通過aop織入
這就是定義了乙個
pointcut
,該pointcut表示「
在com.softfz.jdbctemplate
包下所有的方法」。
expression="execution(* com.cj.transaction.service.*.*(..))"
中幾個萬用字元的含義:
第乙個* ——
通配任意返回值型別
第二個* ——通配包
com.cj.transaction.service
下的任意
class
第三個* ——通配包
com.cj.transaction.service
下的任意
class
的任意方法
第四個.. ——
通配方法可以有
0個或多個引數
注意:第乙個
*後面有乙個空格
申明式事務中異常處理:
spring
中,將為委託物件的每個方法建立事務,
spring
的事務支援預設對執行期異常
(runtimeexception)
進行回滾
,而runtimeexception
無需開發者顯式宣告。
如果手動捕獲異常,則
spring
容器認為開發者試圖進行手動事務回滾,將無法用
spring
容器來進行事務回滾。
但是如果是發生非
runtimeexception
及其子類的異常,則
spring
容器無法進行事務處
理,如果需要管理,需要進行相關配置,**如下:
propagation_required,-filenotfoundexception
readonly
spring程式設計式事務
程式設計式事務 需要編寫 控制事務在 開始,提交,回滾。public class stucardserviceimpl implements stucardservice scdao.updatestucardbycardno sourcecard system.out.println 支付完成!商...
spring中JDBC程式設計式事務
在spring採用純jdbc進行資料庫操作 org.gjt.mm.mysql.driver jdbc mysql localhost 3306 test root root 測試 package com.spring.jdbc import org.springframework.beans.fac...
spring 程式設計式事務控制
賬戶的業務成層實現類 事務控制應該都是在業務層 public class accountserviceimpl implements iaccountservice private transactiontemplate transactiontemplate public void settran...