一、事物1、什么是事物
事物指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败
2、事物的特性
原子性:事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生
一致性:事物前后数据的完整性必须保持一致
隔离性:指多个用户并发访问数据库时,一个用户的事物不能被其他用户的事物所干扰,多个并发事物之间数据要相互隔离。
持久性:一个事物一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响。
二、事物的API介绍
Spring事物管理高层抽象主要包括3个接口:PlatformTransactionManager(事务管理器)、TransactionDefinition(事物定义信息)、TransactionStatus(事物具体运行状态)。
1、PlatformTransactionManager
Spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现
2、TransactionDefinition(1)定义隔离级别
如果不考虑隔离性,会引发如下安全问题:脏读、不可重复读、幻读
脏读:一个事物读取了另一个事物改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
不可重复读:在同一个事物中,多次读取同一数据返回的结果有所不同
幻读:一个事物读取了几行记录后,另一个事物插入一些记录,幻读就发生了,在后来的查询中,第一个事物就会发现有些原来没有的记录。
事物的隔离级别就是用来解决以上问题:
Mysql数据库用的是REPEATABLE_READ隔离级别
Oracle数据库用的是READ_COMMITTED隔离级别
(2)定义事物传播行为
三、实战
Spring支持俩种方式事务管理
--编程式的事务管理
◎在实际应用中很少使用
◎通过TransactionTemplate手动管理事物
--使用XML配置声明式事物
◎开发中推荐使用(代码侵入性最小)
◎Spring的声明式事物是通过AOP实现的
1、编程式事务管理
手动编写代码进行事物管理(很少使用)
(1)在AccountService中使用TransactionTemplate
(2)TransactionTemplate依赖DataSourceTransactionManager
(3)DataSourceTransactionManager依赖DataSource构造
2、声明式事务管理
(1)基于TransactionProxyFactoryBean的方式
缺点:每需要对一个类进行事物管理,就需要配置一次,维护不方便
(2)基于AspectJ的XML方式(经常使用)
3、基于注解的方式(经常使用)
在需要事物管理的类上面加上注解