Spring事务角色
概述:
主要讲解了事务是如何实现的。
正文:
在上一个案例中。程序执行时,会调用到两个针对数据的增删改操作,加钱和减钱操作。
public interface AccountDao{
@Update(update tbl_account set money = money - #{money} where name = #{name})
void outMoney(@Param("name") String name,@Param("Money") Double money);
//开启事务T1
@Update(update tbl_account set money = money + #{money} where name = #{name})
void inMoney(@Param("name") String name,@Param("Money") Double money);
//开启事务T2
}
//调用接口修改数据的方法
@Transactional //开启事务T
public void transfer(String out, String in, Double money){
accountDao.outMoney(out,money);
accountDao.inMoney(in,money);
}
开启事务T后,事务T1,T2 都加入事务T中,任何一个出现异常,整个过程都会回滚 事务管理员(事务T):发起事务方,在Spring中通常指业务层开启事务的方法 事务协调员(事务T1,T2):加入事务方,在Spring中通常指数据层方法,也可以是业务层方法
作用:将多个事务管理成一个事务
注意事项:
事务管理器 DataSourceTransactionManager 中用到的 DataSource,应该和 MybatisConfig 中的 sqlSessionFactory 用同一个 DataSource ,事务才能统一管理,否则T1,T2不能被T管理