Spring事务管理
1.spring事务管理的两种方式
第一种 编程式事务管理(不用)
第二种 声明式事务管理
- 基于xml配置文件的实现(要会用)
- 基于注解方式实现(更喜欢用)
2.Spring事务管理的API - 接口:PlatformTransactionManager 事务管理器
org.springframework.jdbc.datasource.DataSourceTransactionManager ——>Mybatis
首先配置事务管理器
搭建转账环境
1.创建数据库表,添加数据

2.创建service类和dao类,完成注入关系
- service层业务逻辑层
- dao层对数据库操作,在dao层不添加业务
- 需求:小杨要转1000给小鑫
- 小王-1000,小鑫+1000
3.出现问题
- 如果小王少了1000之后,发生了异常,小马不会多1000,钱丢失了
添加事务解决,出现异常时进行回滚操作
声明式事务管理
xml事务管理配置
1.配置文件方式使用AOP思想配置
第一步:配置事务管理器
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource,对哪个数据库做处理 -->
<property name="dataSource" ref="dataSource"/>
</bean>
第二步:配置事务的增强
<!-- 配置事务增强 -->
<tx:advice transaction-manager="transactionManager" id="txadvice">
<!-- 做事务操作 -->
<tx:attributes>
<!-- 设置进行事务操作方法匹配规则 -->
<tx:method name="account*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
第三步:配置切面
<!-- 配置切面 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut id="pointcut1" expression="execution(* com.TiHom.service.OrderService.*(..))"/>
<!-- 切面 -->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>
注解事务管理配置
第一步:配置事务管理器
第二步:配置事务注解
<!-- 开启事务的注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
第三步:在要使用事务的方法使用类上面添加注解
@Transactional
public class OrderService {
private OrderDao orderDao;
public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
/**
* 写转账的业务
*/
public void accountMoney(){
//小杨-1000
orderDao.lessMoney();
//出现异常
int i = 10/0;
//小鑫+1000
orderDao.moreMoney();
}
}
OrderDao
public class OrderDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
/*
* 做对数据库操作的方法,不写业务操作
*/
//少钱的方法
public void lessMoney(){
String sql = "update account set salary=salary-? where username=?";
jdbcTemplate.update(sql,1000,"小杨");
}
//加钱的方法
public void moreMoney(){
String sql = "update account set salary=salary+? where username=?";
jdbcTemplate.update(sql,1000,"小鑫");
}
}
网友评论