這篇文章雖然講解spring的事務管理的知識和使用,但涉及了spring資料庫程式設計,spring aop,transaction三個模組。有助於理解各個知識和其綜合應用。
下面介紹一下資料庫事務管理機制:
例如銀行轉賬。當從a賬戶向b賬戶轉1000元後銀行系統會從a賬戶上扣除1000元,而在b賬戶上增加1000元,這是正確處理的結果。
一旦銀行系統出錯了怎麼辦,這裡假設發生兩種情況:
(1)a賬戶少了1000元,但b賬戶卻沒有多出1000元
(2)b賬戶多了1000元,但a賬戶卻沒有被扣錢
客戶和銀行都不願意看到上面兩種情況。那麼有沒有措施保障轉賬的順利進行?這種措施就是資料庫事務管理機制。
本文分三個層面講解
jdbctemplate1,jdbctemplate 資料庫程式設計式網際網路程式設計的基礎。jdbctemplate是spring框架為開發者提供的jdbc模板模式。但工作中更多的時候是使用hibernate框架和mybatis框架進行資料庫程式設計。想一下,這是為什麼jdbc開發時不常用? jdbctemplate沒有實現事務管理,只是單純的資料庫程式設計,通過下面的demo即可理解。程式設計式事務管理
宣告式事務管理
(1)資料訪問層
@repository("userdao")
public class userdaoimpl implements userdao
/*** 查詢方法
*/@override
public listquery(string sql, object param)
}
(2),xml配置jdbc
(3),jar包匯入(整個demo的jar,下面就不再贅述了)
(4)com.test裡測試類(從上面的github路徑檢視源**,下面就不再贅述。)
2,程式設計式事務管理
(1),基於底層api的程式設計事務管理1.1xml配置
1,2資料訪問類
@repository
public class codetransaction ;
//先刪除資料
jdbctemplate.update(sql);
//新增一條資料
jdbctemplate.update(addsql,param);
//新增相同的一條資料,使主鍵重複
jdbctemplate.update(addsql,param);
//提交事務
txmanager.commit(ts);
} catch (exception e)
return message;
}}
(2)基於transactiontemplate的程式設計式事務管理
其實事務管理基於jdbctemplate(此demo)
3,宣告式事務管理
spring的宣告式事務管理是通過aop技術實現的事務管理,其本質是對方法前後進行攔截,然後在目標方法開始之前建立或者加入乙個事務,在執行完目標方法之後根據執**況提交或者回滾事務。
與程式設計式事務管理對比:程式設計式中摻雜事務處理的**,侵入性和耦合教高。宣告式只需相關事務規則宣告便可將事務規則應用到業務邏輯中。
但唯一不足就是,其最細粒度只能作用到方法級別,無法做到像程式設計式事務管理那樣可以作用到diam塊級別。但宣告式事務也可以通過變通的方法解決。思考一下如何解決?
詳細demo請看github鏈結。
Spring事務管理
spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...
spring事務管理
一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...
spring 事務管理
和資料庫打交道的碼農都知道事務,事務有4大特徵,分別是原子性,一致性,隔離性,永續性。而spring 對事物提供了良好的支援,和api,通過簡單的配置,則可以減低程式設計師重複的操作。1.原子性 原子性指的是乙個事務內的所有操作要麼全部應用到資料庫,要麼取消對資料庫的操作。2.一致性 一致性和原子性...