一、事务概念(transaction)
指要做的或所做的事情。指访问并可能更新数据库中各种数据项的一个程序执行单元。
在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或者整个程序。
事务通常由高级数据库操纵语言/编程语言书写的用户程序的执行所引起,由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
二、特性
事务是恢复和并发控制的基本单位
4个属性ACID
- 原子性:atomicity。一个事务是一个不可分割的工作单位,要么都做、要么不做
- 一致性:consistency。事务必须是使数据库从一个一致性状态转变到另一个一致性状态。
- 隔离性:isolation。事务的执行不能被干扰。一个事务内部操作及数据对其他的“隔离",并发执行的各个事务之间不能互相干扰。
- 持久性:durability。一个事务一旦提交,他对数据库中数据的改变就应该是永久性的
三、事务类型
手动事务:此模型提供了对事务的标准控制,但它缺少一些内置于自动事务模型的简化操作。
自动事务:声明性事务指定对象如何参与事务,如何以编程方式被配置。与对象关联的事务自动流向合适的资源管理器,有的关联驱动程序在对象的上下文中查找事务,并通过分布式事务处理协调器 (DTC) 在此事务中登记。
四、Spring的事务管理
事务原本是数据库中的概念,在 Dao 层。
但一般情况下,需要将事务提升到业务层,即 Service 层。
这样做是为了能够使用事务的特性来管理具体的业务。
在 Spring 中通常可以通过以下两种方式来实现对事务的管理:
(1)使用 Spring 的事务注解管理事务
(2)使用 AspectJ 的 AOP 配置管理事务
五、相关API
事务管理器接口
PlatformTransactionManager 接口对象
主要作用:完成事务的提交、回滚及获取事务的状态信息。
- 常用的两个实现类
DataSourceTransactionManager:使用 JDBC 或 MyBatis 进行数据库操作时使用。
HibernateTransactionManager:使用 Hibernate 进行持久化数据时使用
- Spring的回滚方式
发生运行时异常和error时回滚,发生编译异常时提交
事务定义接口
TransactionDefinition ,定义了事务描述相关的三类常量:事务隔离级别、事务传播行为、事务默认超时时限,及对它们的操作
六、Spring 的事务注解
通过@Transactional 注解方式,可将事务织入到相应 public 方法中,实现事务管理。