本文是對慕課網上"搞定SSM開發"路徑的系列課程的總結,詳細的項目文檔和課程總結放在github上了.點擊查看
本文對應慕課網上課程Spring事務管理,詳情可查看:點我git
PlatformTransactionManager:
事務管理器類,不一樣持久化框架(例如JDBC,Hibernate,Mybatis|Mybatis好像使用和JDBC同同樣的事務管理器實現類)對應不一樣實現類,注意具體使用時查詢github
TransactionDefinition:
數據庫在查詢數據時,因爲種種緣由會發生如下三種問題.
髒讀 :讀到還未修改的;
不可重複讀:在屢次讀同一記錄過程當中,另外事務提交修改,致使讀取先後內容不一樣;
幻讀 :和不可重複讀相似,不過另一個事務插入而非修改sql
隔離級別 : 就是爲了解決以上問題設定的事務相關的屬性
READ_UNCOMMITED
READ_COMMITTED
REPEATABLE READ
SERIALIZABLE
以上四個級別一層層更嚴格,執行效率也愈來愈低.
最後的那個級別會致使全部事務呈線性執行數據庫
傳播行爲:用來支持Spring的事務管理的屬性,肯定哪些操做會在被包含在同一個事務裏
PROPAGATION_REQUIRED 支持當前事務,若是不存在,就建立一個
PROPAGATION_SUPPORTS 具體查看相關文檔
PROPAGATION_MANDATORY 。。。。
....編程
sql執行可使用模板,也能夠拿到sqlConnection以後本身執行,可是執行模板確實是最方便的方法框架
TransactionStatus:能夠獲得當前事務的相關屬性代理
1:配置事務管理器platformTransactionManager
對於jdbc 須要datasourceTransactionManager 其中必須定義數據源屬性dataSource,jdbc中是c3p0的鏈接池code
2:事務管理的模板(注意和sql模板不一樣) transactionTemplate 事務管理模板,其屬性就是上面對應的事務管理器.orm
3:在須要事務管理的代碼處使用內部匿名類來執行運行sql的代碼,這樣將全部的操做後臺的sql都會放在同一個事務中.xml
1:首先仍是要配置事務管理器
2:配置事務管理具體方法
經典ProxyFactoryBean(使用動態代理的技術,用法已經漸漸廢棄)
須要配置TransactionProxyFactoryBean 屬性包括target(標註哪一個Bean須要事務管理) 和 事務管理器(上面配置的),在bean的配置中經過property來配置事務的傳播行爲和隔離級別. (只能對一個目標進行配置,就是那個target,很差用)
使用aop來進行事務管理
使用基於AspectJ的Spring AOP來管理
xml配置:
配置通知 <tx:advice>
配置切面 <aop:aspect>
,在切面中配置通知和切點.
註解配置:
@Transactional便可配置;對須要的類配置,同時也可配置相關的隔離級別和傳播行爲屬性.
相關的dao層配置請查看本系列文檔關於Mybatis的總結