Spring的事務管理

2021-09-14 00:51:44 字數 1960 閱讀 3997

這篇文章雖然講解spring的事務管理的知識和使用,但涉及了spring資料庫程式設計,spring aop,transaction三個模組。有助於理解各個知識和其綜合應用。

下面介紹一下資料庫事務管理機制:

例如銀行轉賬。當從a賬戶向b賬戶轉1000元後銀行系統會從a賬戶上扣除1000元,而在b賬戶上增加1000元,這是正確處理的結果。

一旦銀行系統出錯了怎麼辦,這裡假設發生兩種情況:

(1)a賬戶少了1000元,但b賬戶卻沒有多出1000元

(2)b賬戶多了1000元,但a賬戶卻沒有被扣錢

客戶和銀行都不願意看到上面兩種情況。那麼有沒有措施保障轉賬的順利進行?這種措施就是資料庫事務管理機制。

本文分三個層面講解

jdbctemplate

程式設計式事務管理

宣告式事務管理

1,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.一致性 一致性和原子性...