事务可从多种层面进行分类,数据库角度、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