spring的事务管理--三种方式分析

事务特性

1、原子性:一个事务中的一系列的操作要么都完成要么都无法完成
2、隔离性:当多个用户同时访问数据库时 数据库为每一个用户开启一个事务 并发事务之间相互不受影响
3、持久性:一个事务被提及后 其对数据库数据的操作 更改将永久的保存在数据库中 不管数据库如何都不会变,
4、一致性:数据库中的数据 在一个事务的执行前后应该保持一致

事物的隔离级别

1、脏读:一个线程中的事务读到了另一线程中事务未提交的数据(a读到了b回滚的数据)
2、不可重复读:一个线程中的事务读到了另一个线程已经提交的更新的数据
3、虚读:一个线程中的事务读到另一线程中事务已经提交的插入的数据
READ UNCOMMITTED 不可重复读、虚读、脏读都有可能发生
READ COMMITTED 避免脏读 虚读和不可重复读可能发生
REPEATABLE READ 避免脏读和不可重复读
SERIALIZABLE serializable 避免脏读、不可重复读和虚读

spring的事务管理三大接口

PlatformTransactionManager 平台事务管理器,spring要管理事务,必须使用事务管理器,
进行事务配置时,必须配置事务管理器。
TransactionDefinition:事务详情(事务定义、事务属性),spring用于确定事务具体详情,
例如:隔离级别、是否只读、超时时间,事务传播行为等
进行事务配置时,必须配置详情。spring将配置项封装到该对象实例。
TransactionStatus:事务状态,spring用于记录当前事务运行状态。例如:是否有保存点,事务是否完成。

一、半自动的方式 配置代理

spring的事务管理--三种方式分析
在主配置文件中配置代理
spring的事务管理--三种方式分析
配置数据源 此处用的c3p0数据库连接池 id=“txManager” bean 为事务管理器 也是spring事务管理的核心
另外两个bean是service层和dao层实现类的bean

二、全自动XML方式 (常用的方式)

spring的事务管理--三种方式分析
dao层继承了JdbcDaoSupport 获得父类中的模板对象进行操作

三、注解全自动

spring的事务管理--三种方式分析
此时在主配置文件中配置事务管理器 这里需要主要:要开启注解驱动 才能扫描到相应的注解
spring的事务管理--三种方式分析
在需要加上事务管理的类上加上@Transactional 注解 将会给类中的所有public方法加上事务管理。