事務可從多種層面進行分類,資料庫角度、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、程式設計式事務:很少用到
号外:
Springboot + mybatis 事務用法
1、啟動類添加@EnableTransactionManagement //開啟事務
2、業務層添加@Transactional