往期文章:
Spring 学习总结笔记【一、快速入门】
Spring 学习总结笔记【二、IoC-控制反转】
Spring 学习总结笔记【三、注解开发】
Spring 学习总结笔记【四、整合Junit】
Spring 学习总结笔记【五、配置数据源】
Spring 学习总结笔记【六、整合Mybatis】
Spring 学习总结笔记【七、AOP面向切面编程】
Spring 学习总结笔记【八、集成Web环境】
Spring 学习总结笔记【九、SpringMVC快速入门】
Spring 学习总结笔记【十、SpringMVC数据响应与请求】
Spring 学习总结笔记【十一、SpringMVC拦截器】
一、Spring事务简介
- 事务作用:在数据层保障一系列的数据库操作同成功同失败
- Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败
二、案例引入
模拟银行账户间转账业务
- 需求:实现任意两个账户间转账操作
- 需求微缩:A账户减钱,B账户加钱
数据库如下:
dao层接口如下:
service层的实现如下
我们来测试一波
数据库的内容也更改了,确实达到了我们的预期,目前看来是没有任何问题的
但是我们现在在 transfer 转账操作之间人为添加一句bug
再运行一次,这次就出问题了
程序只执行了转出操作,就遇到了异常,转入操作为未执行。这就导致了数据库中只记录到了转出的信息。
结果分析:
① 程序正常执行时,账户金额 A减B加,没有问题
② 程序出现异常后,转移失败,但是异常之前操作成功,异常之后操作失败,整体业务失败
三、Spring事务管理开启步骤
① 在业务层接口上添加 Spring 事务管理 @Transactional
注意
:Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合;注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务。
② 设置事务管理器
我此处共设置了 3 个配置类,我将事务管理器配置在了 JdbcConfig 中
注意
:事务管理器要根据实现技术进行选择;Mybatis框架使用的是 JDBC 事务
③ 开启注解式事务驱动 @EnableTransactionManagement
此时我们再对刚才有异常的程序再执行一次。
- 我们先将数据库归为原样
- 再进行测试
程序异常,但数据库的信息未改动
四、事务属性
下期文章: