Spring事务控制(xml方式)

导入坐标

实体类

实体类对应一个表

Dao层的接口的实现
一个转出钱的方法一个转入钱的方法。

业务层调用Dao层
一个转账方法,一个转出人一个转入人,转出多少钱。

web层执行相应测试

测试方法后转出人-500,转入人+500

那么在哪里进行事务控制呢?
一般是在业务层进行业务控制,也就是transfer方法。

transfer方法调用了out方法调用了一个update sql语句对应一个事务,然后调用了in方法 update sql语句又对应一个事务,当out方法的update语句执行完毕后事务也就提交了,in方法同理。所以这两个方法是不同的事务是相互独立的,不能进行事务控制。
我们可以制造一个错误,out方法执行成功但是in方法不成功,这就代表了转出人钱转出去了,但是转入人的钱没有增加。

造成这样结果的原因就是没有对transfer进行事务控制,
按照以前的做法就是,先开启事务,然后用try catch捕获异常,如果没有异常则提交事务,否则就回滚。

我们现在只有一个transfer方法,但是以后业务层有很多业务方法,每个都要进行开启事务、提交事务、回滚的操作吗?
答案是不是的。我们把这个方法看成切面把开启事务和提交事务都提取出来,使用aop的思想进行增强织入,这样就能完成解耦合的事务控制。但是这个aop不用我们自己去写,我们说的声明事务控制就是底层aop帮我们封装的事务控制。

浙公网安备 33010602011771号