1.编程式事物控制相关对象
1.1PlatformTransactionManager
PlatformTransactionManager接口是spring的事物管理器,他里面提供了我们常用的操作事物的方法。
方法 | 说明 |
TransactionStatus getTransaction(TransactionDefination defination) | 获取事物的状态信息 |
void commit(TransactionStatus) | 提交事物 |
void rollback(TransactionStatus) | 回滚事物 |
注意:
PlatformTransactionManager是接口类型,不同类型,不同的Dao层技术则有不同的实现类,例如:Dao层技术是Jdbc或mybatis时:org.springframework.jdbc.datasource.DatasourceTransactionManager
Dao层金丝狐是hibernate时:org.springframework.orm.hibernate5.hiberTransactionManager
1.2 TransactionDefinition
TransactionDefinition是事物的定义信息对象,里面有如下方法:
方法 | 说明 |
int getIsolationLevel() | 获取事物的隔离级别 |
int getPopogationBehavior() | 获得事物的传播行为 |
int getTimeout() | 获得超时事件 |
boolean isReadOnly() | 是否只读 |
1.事物隔离级别
设置隔离级别,可以解决事物并产生的问题,如脏读、不可重复读和虚读。
- ISOLATION_DEFAULT
- JSOLATION_READ_UNCOMMITTED
- ISOLATION_READ_COMMITTED
- JSOLATION_REPEATABLE_READ
- ISOLATION_SERIALTZABLE
2.事物传播行为
- REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加人到这个事务中。一般的选择(默认值)
- SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)
- MANDATORY:使用当前的事务,如果当前没有事物,就抛异常
- REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起
- NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事物挂起
- NEWVER:以事务方式执行操作,如果当前存在事务,抛出异常
- NESTED:如果当前存在事务,则在嵌套事物内执行。如果当前没有事务,则执行REQUIRED类型的操作
- 超时时间:默认值是-1,没有超时限制。如果有,一秒为单位进行设置
- 是否只读:建议查询是设置为只读
1.3 TransactionStatus
TeansactinStatus借口提供的是事务具体的运行状态,方法介绍如下。
方法 | 说明 |
boolean hasSacepoint() | 是否存储回滚点 |
boolean isCompleted() | 事务是否完成 |
boolean isNewTransaction() | 是否是新事务 |
boolean isRollbackOnly() | 事务是否回滚 |