1 什么是事务
(1)事务是数据库操作最基本单元,逻辑上的一组操作,要么都成功,如果有一个失败,所有都失败
2 举例
(1)银行转账
* 小王 200w,小宋有200w
* 小王 转账 100w 给小宋
** 小王少100w,小宋多100w
3 事务四个特性(ACID)
(1)原子性:要么都成功,如果有一个失败,所有都失败
(2)一致性:操作之前和操作之后,总量不变的
(3)隔离性:多事务之间不会产生影响
(4)持久性:事务最终提交,提交之后数据库里面数据真正变化
4 Spring事务管理介绍
1 事务典型例子:银行转账例子
2 事务添加到javaee三层中service层(业务逻辑层)
3 在spring对事务进行管理
有两种方式:编程式事务管理 和 声明式事务管理(使用)
4 一般都使用声明式事务管理
(1)声明式事务管理,可以使用注解 ,也可以使用xml配置文件实现
5 spring事务管理使用到底层原理 AOP
6 Spring事务管理API
(1)提供一个接口,代表事务管理器,这个接口里面针对不同的框架提供不同的实现类
5 Spring声明式事务管理(注解)
1 创建事务管理器对象
<!-- 1 事务管理器对象创建 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
2 在配置文件中,开启事务注解
3 在添加事务的方法或者所在类上面添加注解
(1)注解@Transactional,这个注解一般都是添加service类上面,可以添加到方法上面。
(2)如果把这个注解添加到类上面,为这个类里面所有的方法添加事务
(3)如果把这个注解添加方法上面,只是为这个方法添加上事务
6 事务中的参数配置
1 propagation:事务传播行为
Required:A中有事务,B中有事务,A调用B,使用A的事务,B的事务不开启。
Required_new: A中有事务,B中有事务,A调用B,A,B的事务都开启,互不影响,new
意思即为 每次都开启新事务。
2 isolation:事务隔离级别
事务隔离性使用 隔离级别体现出来的 多个事务并发操作
隔离级别有四个,记住下面这个
mysql默认的隔离级别(可重复读 REPEATABLE READ )
如果不考虑隔离性,产生三个读问题
1 脏读(现象)
(1)一个没有提交事务读到另一个没有提交事务修改的数据,严重问题
2 不可重复读(现象)
(1)一个提交事务读到了另一个提交事务修改的数据
3 虚读(幻读)(现象)
(1)一个事务读到另一个提交事务里面添加的数据
3 readOnly:是否只读
(1)读:查询操作。写:添加、修改和删除
(2)readOnly默认值false,表示可以查询可以添加、修改和删除
(3)如果把readOnly设置成true之后,只能查询
4 timeout:超时时间
(1)规定在一定时间之内必须要提交,如果不提交就会回滚
(2)设置时间以秒计算的,默认值-1
5 rollBack:回滚
(1)设置只有出现哪个异常才会进行回滚
6 noRollBack:不回滚
(1)设置出现的哪些异常不回滚