spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式,宣告式就是在spring的配置檔案中進行相關配置;程式設計式就是用註解的方式寫到**裡。
宣告式:
spring配置檔案中關於事務配置總是由三個組成部分,分別是datasource、transactionmanager和**機制這三部分,無論哪種配置方式,一般變化的只是**機制這部分。 datasource、transactionmanager這兩部分只是會根據資料訪問方式有所變化,比如使用hibernate進行資料訪問時,datasource實際為sessionfactory,transactionmanager的實現為hibernatetransactionmanager。 下面一起看看三種宣告式事務的具體配置:
公共配置:
classpath:config/hibernate.cfg.xml
com.entity
第一種,使用tx標籤方式
expression="execution(* com.dao.*.*(..))"
其中第乙個*代表返回值,第二*代表dao下子包,第三個*代表方法名,「(..)」代表方法引數。
第二種,使用**方式
propagation_required, -exception
propagation_required, -exception
propagation_required, -exception
propagation_required, readonly
將transactionproxy的abstract屬性設定為"true",然後將具體的dao的parent屬性設定為"transactionproxy",可以精簡**。
第三種,使用***
propagation_required, -exception
propagation_required, -exception
propagation_required, -exception
propagation_required, readonly
transactioninterceptor
*dao
spring事務型別詳解:
propagation_required--支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇。
propagation_supports--支援當前事務,如果當前沒有事務,就以非事務方式執行。
propagation_mandatory--支援當前事務,如果當前沒有事務,就丟擲異常。
propagation_requires_new--新建事務,如果當前存在事務,把當前事務掛起。
propagation_not_supported--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
propagation_never--以非事務方式執行,如果當前存在事務,則丟擲異常。
propagation_nested--如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則進行與propagation_required類似的操作。
程式設計式事務
程式設計式即採用註解的方式,需要注意的是,使用註解的方式需要在spring的配置檔案中加入一句話:,其作用是開啟註解的方式。具體配置如下:
classpath:config/hibernate.cfg.xml
com.entity
註解檔案:
package com.dao;
import org.springframework.orm.hibernate3.hibernatetemplate;
import org.springframework.transaction.annotation.propagation;
import org.springframework.transaction.annotation.transactional;
import com.entity.user;
@transactional
public class userdaoimpl_bak extends hibernatetemplate
@transactional(propagation=propagation.required,rollbackforclassname="exception")
public void modifyuser(user user)
@transactional(propagation=propagation.required,rollbackforclassname="exception")
public void deluser(string username)
@transactional(readonly=true)
public void selectuser()
}
類頭的@transactional為預設事務配置,如方法沒有自己的事務型別,則按預設事務,如有自己的配置,則按自己的配置。
以上四種配置方式最常用的還是第
一、二種,第三種是比較老舊的方式,而註解的方式不太適合比較大的專案,用於簡單的小專案還是很好的,其特點就是簡單明瞭。每種方法都有每種方法的特點跟適用的環境,沒有絕對的好與壞,只不過前兩種在實際的工作當中用的更多一些。
原文**:
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.一致性 一致性和原子性...