多语言展示
当前在线:683今日阅读:197今日分享:19

spring学习(32)-为什么需要事务(1)

今天小编继续学习spring,今天开始学习spring中的事务,今天小编这里通过一个实验来说明一下在实际项目中为什么会需要事务管理。
工具/原料
1

电脑一台

2

eclipse

方法/步骤
1

首先小编这里创建三张表,一张account账户表,存放用户以及用户余额,一张book书表,存放书的编号、名称以及单价,一张book_stock书库存表,存放书的编号和对应的库存,如下图:

2

下图是小编的spring的java项目目录结构,如下图:

3

下图中代码是小编这个maven项目的pom.xml文件配置,可以看出这个项目的pom.xml文件在头部约定了spring系列包的版本和mysql的版本,然后除了spring的包之外还有mysql的驱动包,还需要数据库连接池c3p0,还需要测试包junit,如下图:

4

然后这里讲数据库的配置参数外置的属性文件中,这里将数据库的参数配置放置到db.properties文件中,如下图:

5

然后在spring的配置文件中首先先导入配置数据库的配置参数的资源文件,然后配置一下C3PO,再配置一下自动扫描,如下图:

6

下图是BookShopDao接口的代码,如下图:

7

下图是BookShopDao接口的实现类ookShopDaoImpl,实现ookShopDao接口中的方法,这里实现三个方法:1.根据书编号查询书的单价2.更新书的库存,这里默认是将书的库存减13.更新用户余额如下图:

8

下图是BookShopService接口以及BookShopService接口的实现类的代码,如下图:

9

下图是小编定义的两个异常类,一个是BookStockException类,一个是UserAccountException类,如下图:

10

下图是小编测试用的方法,这里调用Bookshopservice的purchase方法,在purchase方法中先查询书的单价,然后更改书的库存,然后更改用户余额,但是在数据库中可以知道,用户余额不足以购买书,然后查看程序运行结果,如下图:

11

可以看到会报余额不足的异常,如下图:

12

查看数据库可以看到购买书的这个行为,只是修改了书的库存,但是没有修改账号余额,这样就导致的数据库中数据的不一致性,这个时候就会事务了,用事务对操作统一管理,事务就是将一系列操作作为一个整体,一个单元,要么全部完成,要么全部失败,不会出现部分完成或者部分失败,如下图:

注意事项
1

个人观点,仅供参考。

2

感谢阅读。

推荐信息