【Spring】事务控制

有两种事务控制的方法:编程式(硬编码,代码,API)vs 声明式(xml或注解)

声明式的好处:事务管理不侵入开发的组件,更改只需要在定义文件中出现配置即可。业务逻辑对象不会意识到处在事务管理之中,事实上也该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分。而且不需要事务管理时可关闭,符合开闭原则。(解耦)

Spring声明式事务控制底层就是aop

  • 编程式事务控制3大对象
  • (关系)PlatformTransactionManager(操作事务行为)+TransactionDefinition(设置事务属性)=TransactionStatus(反馈事务运行过程中的信息,被动产生,不需配置
  • (一)接口-PlatformTransactionManager(平台事务管理器)
  • 不同的Dao层(持久层)技术则有不同的PlatformTransactionManager实现类,例如,Dao层技术是jdbc或mybatis时,PlatformTransactionManager的实现类是org.springframework.jdnc.DataSourceTransactionManager,Dao层技术是Hibernate时是org.springframework.orm.hibernate5.HibernateTransactionManager

TransactionStatus getTransaction(TransactionDefinition definition):获取事务的状态信息

void commit(TransactionStatus status):提交事务

void rollback(TransactionStatus status):回滚事务

  • (二)TransactionDefinition(定义信息对象)

int getIsolationLevel():获得事务的隔离级别

  • 事务的隔离级别:解决事务并发产生的问题,如脏读,不可重复读和虚读

ISOLATION_DEFAULT

ISOLATION_READ_UNCOMMITTED

ISOLATION_READ_COMMITTED

ISOLATION_REPEATABLE_READ

ISOLATION_SERIALIZABLE

  • 这里复习一下数据库的知识:

int getPropogationBehaviour():获得事务的传播行为

int getTimeout():获得超时时间

boolean isReadOnly():是否只读

  • 事务的传播行为:

REQUIRED(default):如果当前没有事务就新建一个;如果存在一个事务,就加入到这个事务中

SUPPORTS:支持当前事务,如果当前没有事务属性就以非事务方式执行(没有事务)

...还有一些属性

超时时间:设为-1时,没有超时限制;有就以秒为单位进行设置

是否只读:建议查询时设置为只读

  • (三)接口-TransactionStatus(事务具体的运行状态)

boolean hasSavePoint():是否存储回滚点

boolean isCompleted():事务是否完成

boolean isNewTransaction():是否是新事务

boolean isRollbackOnly():事务是否回滚

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值