什么是事务?
数据库事务是指作为单个逻辑单元存在的一系列操作,要么完全执行,要么完全不执行。
事务的几个属性:原子性,一致性,隔离性,持久性
原子性:事务是最小的执行单元,不允许分割,事务的原子操作确保动作要完全完成,要么就是完全不起作用。
一致性:执行事务的前后,数据要保持一致;
隔离性:并发访问数据库,一个用户的事务不被其他的事务所干预,数据库是独立的。
持久性:一个事务被提交后,他对数据库的改变是持久的;
事务管理?
所谓的事务管理是指 "按照给定的事务规则来执行提交或者回滚操作";
Spring中的事务管理
在Spring的所有包中,有一个名为spring-tx-xxx的Jar包,该包就是Spring所提供的事务管理的依赖包,在该包的org.springframework.transaction包中,含有3个接口,该三个接口就是PlatformTransactionManager,TransactionDefinition和TransactionStatus,这三个核心API的关系就是:PlatformTransactionManager是根据TransactionDefinition来进行事务管理,在管理的过程中事务存在多个状态信息,每个状态信息是通过TransactionStatus来表示的。
在项目中,Spring是将XML中的配置的事务详细信息封装到TransactionDefinition对象中,然后通过事务管理器PlatformTransactionManager的getTransaction(TransactionDefinition ddfinition)来获得事务的状态TransactionStatus
1.PlatformTransactionManager
PlatformTransactionManager接口是Spring提供的平台事务管理器,主要是用于管理事务。接口中提供了三个事务操作的方法,如下:
TransactionStatus getTransaction(TranscationDefinition definition):用于获取事务的状态信息;
void commit(TransactionStatus status):用于提交事务。
void rollback(TransactionStatus status):用于回滚事务。
在第一个方法中,返回的TransactionStatus对象,是表示一个事务,该事务会被关联在当前执行的线程上。
PlatformTransactionManager接口只是代表着事务管理的接口,它并不知道底层实现,它只需要以上三个方法来管理事务,但是如何具体的管理事务是由它的实现类来实现,常见的几个实现类如下:
org.springframework.orm.hubernate4.HibernateTransactionManager:用于配置Hibernate的事务管理器。
org.springframework.jdbc.datasource.DataSourceTransactionManager:用于配置JDBC数据源的事务管理器。
org.springframework.transaction.jta.JtaTransactionManager:用于配置全局事务管理器。
当底层采用不同的事务持久层技术时,就可以使用不同的PlatformTransactionManager的实现类即可。
2.TransactionDefinition
TransactioDefinition接口是事务定义的对象,该对象中定义了一系列基本的事务属性(可以理解为事务的一些基本配置,事务的属性:隔离级别,传播行为,回滚规则,是否只读,事务超时),并提供了获取事务相关的信息的方法,具体如下:
☞ string getName():用于获取事务对象的名称;
☞ int getlsolationLevel():获取事务的隔离级别,事务管理器是根据它来控制另外一个事务可以看到本事务内的哪些数据。
☞ int getPropagationBehavior():获取事务的传播行为。
☞ int getTimeout():获取事务的超时时间,既事务必须在多少秒内完成;
☞ Boolean isReadOnly():获取事务是否是只读的;