type
status
date
slug
summary
tags
category
icon
password
需求说明
用户购买商品,通过商品id获取价格(查询)
购买商品(修改余额)
修改库存量(修改存量)
三张表来设计,商品表,用户表,商品存量表。用户的余额和商品库存应该使用事务处理。
传统方式
这样不易于重用,下次再使用还要重新写sql语句。
声明式事务:把上面的子步骤变成方法,这三个方法一起来做某件事,也就是统一管理,这样就便于组合,重用,完成事务的操作。
优点:代码可以重用,扩展方便,理解起来比较困难,底层使用aop,动态代理+动态绑定+反射+注解
声明式事务完成上述需求
创建表配合需求
把三个步骤单独抽出来
接下来把这三个方法组合起来,完成用户购买商品的操作,并且完成事务管理
事务失败的情况
没有事务的话,会出现数据不一致的情况
这样是没问题的,但是如果有一个方法执行失败,比如修改库存的时候故意把sql语句中的update改为UPDATEX,那么用户的余额会减少,但是商品的库存因为执行失败而没有改变,就出现了数据不一致的情况。
我们的逻辑应该是要么全部成功,要么都失败,这就是事务的原子性。
使用声明式事务控制
在执行的方法上加上注解
再次执行,发现事务并没有起作用
需要配置事务管理器
需要配置基于注解的事务管理