天天看點

SSM架構中事務用法詳解

事務可從多種層面進行分類,資料庫角度、java角度、程式設計角度。

1.資料庫角度

本地事務 :普通事務,獨立的一個資料庫,保證在該資料庫上操作的ACID。

分布式事務 :

2.Java角度

JDBC事務:普通事務,即資料庫事務中的本地事務,通過connection對象控制管理。

JTA事務:JTA指Java事務API(Java Transaction API),是Java EE資料庫事務規範, JTA隻提供了事務管理接口,由應用程式伺服器廠商(如WebSphere Application Server)提供實作,JTA事務比JDBC更強大,支援分布式事務(當然也支援本地事務)。

3.程式設計角度(Spring層面)

聲明式事務:通過XML配置或者注解實作,更為簡單

程式設計式事務:通過程式設計代碼在業務邏輯時需要時自行實作,粒度更小。

**

重點說明聲明式事務和程式設計式事務

**

1、聲明式事務:聲明式事務比較常用,需要在spring-mvc.xml配置檔案中添加配置,開啟事務注解驅動,需要在service實作類的方法上打一個@transactional注解。聲明式事務可以擷取運作時異常進行復原操作,如果代碼中進行try…catch則需要手動復原。

<!-- 資料庫連接配接資訊 -->
<context:property-placeholder location="classpath:db.properties" />

<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="${jdbc.driver}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.name}" />
	<property name="password" value="${jdbc.pass}" />
</bean>

<bean  class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 預設不要配置ID,spring能夠找到 -->
	<property name="dataSource" ref="ds"/><!-- 連接配接資料庫 -->
	<property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 讀取資料庫配置檔案的資訊 -->
</bean>
<!-- 掃描接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.lq.user.dao" />
</bean>

<!-- 配置事務處理,聲明式事務 -->
<bean id="tm" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="ds"/>
</bean>
<!-- 開啟注解事務,注解事務切面 -->
<tx:annotation-driven transaction-manager="tm" />  
           

2、程式設計式事務:很少用到

SSM架構中事務用法詳解

号外:

Springboot + mybatis 事務用法

1、啟動類添加@EnableTransactionManagement //開啟事務

2、業務層添加@Transactional