目录
一、事务管理方案
1. 修改业务层代码
2. 测试
二、事务管理器
1. 简介
2. 在配置文件中引入约束
3. 进行事务配置
三、事务控制的API
1. PlatformTransactionManager接口
2. TransactionDefinition接口
3. TransactionStatus接口
往期专栏&文章相关导读
1. Maven系列专栏文章
2. Mybatis系列专栏文章
3. Spring系列专栏文章
一、事务管理方案
1. 修改业务层代码
package com.example.service;
import com.example.dao.AccountDao;
import com.example.pojo.Account;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service
public class AccountService {
@Autowired
private AccountDao accountDao;
@Autowired
private SqlSessionTemplate sessionTemplate;
/**
*
* @param id1 转出人id
* @param id2 转入人id
* @param price 金额
*/
// 作用方法上时,该方法都将具有该类型事务的事务属性
public void transfer(int id1,int id2, double price){
try {
// 转出人减少余额
Account account1 = accountDao.findById(id1);
account1.setBalance(account1.getBalance() - price);
accountDao.update(account1);
// 模拟程序出错
int i = 1 / 0;
// 转入人增加余额
Account account2 = accountDao.findById(id2);
account2.setBalance(account2.getBalance() + price);
accountDao.update(account2);
sessionTemplate.commit();
}
catch (Exception e){
e.printStackTrace();
sessionTemplate.rollback();
}
}
}
2. 测试


二、事务管理器
1. 简介
事务管理器名称 | 作用 |
org.springframework.jdbc.datasource.DataSourceTransactionManager | 针对JDBC技术提供的事务管理器。适用于JDBC和MyBatis。 |
org.springframework.orm.hibernate3.HibernateTransactionManager | 针对于Hibernate框架提供的事务管理器。适用于Hibernate框架。 |
org.springframework.orm.jpa.JpaTransactionManager | 针对于JPA技术提供的事务管理器。适用于JPA技术。 |
org.springframework.transaction.jta.JtaTransactionManager | 跨越了多个事务管理源。适用在两个或者是多个不同的数据源中实现事务控制。 |
2. 在配置文件中引入约束
3. 进行事务配置
在applicationContext.xml文件新增配置
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 进行事务相关配置 -->
<tx:advice id = "txAdvice">
<tx:attributes>
<!-- 代表所有方法 -->
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<!-- 配置切面 -->
<aop:config>
<!-- 配置切点 -->
<aop:pointcut id="pointcut" expression="execution(* com.example.service..*(..))"/>
<!-- 配置通知 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>
三、事务控制的API
2. TransactionDefinition接口
3. TransactionStatus接口
往期专栏&文章相关导读
1. Maven系列专栏文章
Maven系列专栏 | Maven工程开发 |
Maven聚合开发【实例详解---5555字】 |
2. Mybatis系列专栏文章
Mybatis系列专栏 | MyBatis入门配置 |
Mybatis入门案例【超详细】 |
MyBatis配置文件 —— 相关标签详解 |
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填 |
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分) |
Mybatis分页查询——四种传参方式 |
Mybatis一级缓存和二级缓存(带测试方法) |
Mybatis分解式查询 |
Mybatis关联查询【附实战案例】 |
MyBatis注解开发---实现增删查改和动态SQL |
MyBatis注解开发---实现自定义映射关系和关联查询 |
3. Spring系列专栏文章
Spring系列专栏 | Spring IOC 入门简介【自定义容器实例】 |
IOC使用Spring实现附实例详解 |
Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式 |
Spring DI简介及依赖注入方式和依赖注入类型 |
Spring IOC相关注解运用——上篇 |
Spring IOC相关注解运用——下篇 |
Spring AOP简介及相关案例 |
注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】 |
Spring事务简介及相关案例 |
Spring 事务管理方案和事务管理器及事务控制的API |
Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务 |