黑马程序员:三大框架11天笔记全之Spring-day11笔记

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

黑马程序员:三大框架Spring-day11笔记Spring事务管理机制

Spring事务管理的四个优点:

1.提供一致的对于不同的事务管理的API

2.支持声明式事务管理(重点)

3.编程事务管理(在开发中应用比较少)

4.优秀的整合与Spring的数据访问

我们重点讲解spring的事务管理的相关的API,还有声明式事务管理Spring事务管理主要提供了三个接口来完成

.springframework.transaction.PlatformTransactionManager

这是一个事务管理器,可以来选择相关的平台(jdbc hibernate jpa…)

2.TransactionDefinition

它定义事务的一些相关信息例如隔离传播超时只读

3.TransactionStatus

它主要描述事务具体的运行状态

1.1.1PlatformTransactionManager

平台事务管理器

在不同的持久化层解决技术它的事务代码不一样。

JDBC开发

Connection con=……;

con.setAutoCommit(false);//开启事务

con.rollback();

mit();

Hibernate开发

Session session=….;

Transaction t=session.beginTransaction();

mit();

t.rollback();

PlatformTransactionManager接口API

DataSourceTransactionManager 主要针对于JdbcTemplate开发MyBatis开发HibernateTransactionManasger主要针对于Hibernate开发JpaTransactionManager 主要针对于JPA开发。

1.1.2TransactionDefinition

它描述的是事务的定义信息。

在TransactionDefinition中定义了大量的常量

1.1.

2.1隔离

以下是关于隔离性相关信息

事务的四个特性ACID 原子性一致性隔离性持久性。

不考虑事务隔离性有什么问题?

脏读,不可重复读虚读。

ISOLATION_DEFUALT 它使用后端数据库的默认隔离级别(spring中选项) ISOLATION_READ_UNCOMMITTED 不能解决问题,会发生脏读不可重复读虚读ISOLATION_READ_COMMITTED 可以解决脏读会产生不可重复读与虚读。ISOLATION_REPEATABLE_READ 可以解决脏读,不可重复读解决不了虚读ISOLATION_SERIALIZABLE 串行化,可以解决所有问题

对于不现的数据库,它的底层默认事务隔离级别不一样。

Oracle数据库它默认的是read_committed

Mysql数据库它默认的是repeatable_read.

1.1.

2.2超时

默认值是-1 它使用的是数据库默认的超时时间。

1.1.

2.3只读

它的值有两个true/false,如果选择true一般是在select操作时

1.1.

2.4传播

它解决的是两个被事务管理的方法互相调用问题。它与数据库没关系,是程序内部维护的问题。

以下定义了事务的传播行为

以上操作中最常用的三种:

PROPAGATION_REQUIRED默认值两个操作处于同一个事务,如果之前没有事务,新建一个事务

两个操作处于不同的事务

它是一种嵌套事务,它是使用SavePoint来实现的。事务回滚时可以回滚到指定的savepoint,注意:它只对DataSourceTransactionManager有作用

以下了解

支持当前事务,如果不存在,就不使用事务

支持当前事务,如果不存在,抛出异常

以非事务运行,如果有事务存在,挂起当前事务

以非事务运行,如果有事务存在,抛出异常

1.1.3TransactionStatus

它定义了事务状态信息,在事务运行过程中,得到某个时间点的状态

1.2声明式事务管理

1.2.1事务管理方式

1.编码方案不建议使用,它具有侵入性。在原有的业务代码基础上去添加事务管理代码

2.声明式事务控制,基于AOP对目标进行代理,添加around环绕通知。

这种方案,它不具有侵入性,不需要修改原来的业务代码

1.2.2基于xml配置声明式事务管理方案

第一步:在applicationContext.xml文件中添加aop与tx的名称空间

第二步:在applicationContext.xml文件中配置

Spring提供的advice是传统的spring advice

1.声明事务管理器

2.配置通知

Spring为我们提供了一个TransactionInterceptor来完成增强

对于这个增强,我们可以使用spring为我们提供的一个标签来完成操作

3.配置切面

因为使用的是传统的spring的advice,需要使用

1.2.3基于annotation声明式事务管理方案

可以使用@Transaction来在类或方法上添加声明式事务管理

注意:需要在applicationContext.xml文件中使用

相当于开启注解事务控制

相关文档
最新文档