Spring学习小结2

spring事务管理

一、简介:

事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用

事务的四个关键属性(ACID)

原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用.

一致性(consistency): 一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中.

隔离性(isolation): 可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来, 防止数据损坏.

持久性(durability): 一旦事务完成, 无论发生什么系统错误, 它的结果都不应该受到影响. 通常情况下, 事务的结果被写到持久化存储器中.

 

二、案例演示:

用以下的UML图示演示案例

Spring学习小结2_第1张图片

(1)建BookShopDao接口

Spring学习小结2_第2张图片


 

(2)用BookShopDaoIml类实现BookShopDao接口

Spring学习小结2_第3张图片

 

(3)修改对应的配置文件

修改前:


 

修改后:

 

(4)创建测试类测试

4.1 测试查看

 

Spring学习小结2_第4张图片

 

运行结果:

Spring学习小结2_第5张图片

 

 

4.2 测试余额更新

Spring学习小结2_第6张图片

 

 

运行前,用户表中的余额

 

 

运行结果:

 

(5)对于书的库存和账户余额,每个表中都是加了约束的

Spring学习小结2_第7张图片

 

 

余额为60

执行测试余额更新函数后

 

Spring学习小结2_第8张图片

                                                                

所以需要手工的把异常抛出

 

5.1 在包中创建两个对应的异常

BookStockException 主要是与书库存异常相关

UserAccountException 主要是与用户的余额异常相关

 

 

5.2 测试UserAccountException

Spring学习小结2_第9张图片

 

 

Spring学习小结2_第10张图片

 

 

mysql 不支持检查约束,所以自己创建

Spring学习小结2_第11张图片

 

 

测试之前的库存为10 余额为160

 

Spring学习小结2_第12张图片

 

但是这里出现的异常就是 执行了 testBookShopService() 函数后,因为余额不足会抛异常,同时库存不会减少,但是实际运行效果是抛出了异常但是库存任然减少

Spring学习小结2_第13张图片

 

前面的都即基于注解的方式

 

Spring学习小结2_第14张图片Spring学习小结2_第15张图片

添加事务注解后 执行了 testBookShopService() 函数后,因为余额不足会抛异常,同时库存不会减少

但是如果不添加事务注解的话 执行了 testBookShopService() 函数后 抛出了异常 但是 库存任然减少

 

实现以上功能的步骤

1、在配置文件中配置事务管理器

2、在配置文件中启用事务注解

3、在对应的方法上添加 @Transaction 比如该案例是关于余额不足的问题,则在对应的BookShopServiceIml() 函数中 添加 @Transaction

 

希望大家能给点写博客的指导和建议,不足之处还望大家指出、批评

 

你可能感兴趣的:(Spring学习小结2)