- spring融合Mybatis是自动提交事务的
事务
- 如果一个service会涉及到多个数据表的操作,则需要添加事务
- Spring管理事务的机制:Aop的环绕机制。 Spring默认开启一个@Around,在Service方法前开启事务,Service方法后提交事务,发生异常时回滚事务。 这是spring定义好的。
- 一些表id是自动生成的,不需要自己添加(自动增长)。 事务实际上:先添加记录,若失败回滚,再删除记录。 因此若一次购买失败后,下次的购买记录id会多+1
eg网购
- 获取资源后,资源数量应该减少
- 更新库存,新库存=old-购买的数量
-
如果库存不够,自定义一个运行时异常NotEnoughExcep
添加事务的步骤
- 中小型项目:用注解
- 使用的jdk的动态代理机制。 添加@Transactional注解的方法所在的serviceImp类,会成为一个代理。
- 1.配置文件中声明:
- 事务管理器(需要告诉事务管理器使用哪个数据库,即制定dataSource,与上面数据库的声明一致)
- 2.配置文件中:开启事务注解驱动,告诉spring使用注解管理事务
在声明事务注解驱动时,一定要选择"tx"的!!
3.在ServiceImp实现类的方法上面,添加@Transactional注解,并赋予一些属性值,告诉spring这个方法开启了事务。
必须加在public方法上面, 若放在Class上则默认该class中的所有public方法都开启事务
如果属性都是默认值的话,直接用@Transactional即可。
大型项目:使用aspectj, xml配置文件
- 如果多个方法都需要事务:通配符
- tx是指事务,tx属性,中的method都只写method名称,不写包和类
配置aop
- 如果要制定哪些包、类中的方法配备事务,需要配置aop
- 还需要:配置增强器,来关联advice和pointcut