//Spring中 事务操作
// 事务四个特性
// 原子性
// 隔离性
// 一致性
// 持久性
当 方法里的 所有程序都执行成功后才算执行成功
// 1。 开启事务
// 2. 业务操作
// 3. 没有异常 进行事务提交
// 4. 如果出现异常 事务回滚
// 5. 关闭事务
// 在Spring进行事务管理操作
-
有两种方式 : 编程式事务管理 和 声明式事务管理(使用)
// 声明式事务管理 // 1. 基于注解方式 最常用的 // 2. 基于xml 配置文件方式 // 在Spring进行声明式事务管理 底层使用AOP原理实现的 // spring事务管理 API // 提供一个接口 代表 事务管理管理器 这个接口针对不同的操作数据库的框架提供不同的实现类 // 比如现在用的 JdbcTemplate // 操作数据库 还有很多种框架 // 事务操作 // 注解声明式事务管理 //1. 在配置文件中 配置事务管理器 //2. 开启事务注解 //@Transactional //事务注解 可以添加到类上面 也可以添加 到方法上面 // 这个注解有相关参数 //1. propagation 事务传播行为 // 多事务调用方法的过程 叫做 事务传播行为 // 通俗讲解 就是 一个加事务注解 调用没有事务注解的方法的过程 // 事务有7中传播类型 以下 前两种 最常见 //REQUIRED add 方法有事务 调用 没有事务的update方法 update 使用的 add 事务 //REQUIRES_NEW add 方法调用update方法 如果add无论是否有事务 都会创建新的事务 //2. isolation 事务隔离级别 // 事务有特性位隔离性 多事务操作之间不会产生影响 不考虑隔离会产生很多问题 // 有三个读得问题 脏读 、 不可重复读、 虚(幻)读 一般在并发情况下会出现 // 通过设置事务得隔离级别 可以解决这三个问题 // 脏读 一个未提交事务读取到另一提交事务修改得数据 // 不可重复读 一个未提交得事务 读取到了一个提交过事务得数据 这是一种现象 // 虚(幻)读 一个未提交事务读取到另一提交事务添加数据 // 脏读 不可重复读 虚(幻)读 // read uncommitted(读未提交) 有 有 有 // read committed(读已提交) 无 有 有 // repeatable read(可重复读) 无 无 有 mysql 默认隔离级别 // serializable(串行化) 无 无 无 //3. timeout 超时时间 单位 秒 spring 默认 -1 永不超时 // 事务要在一定得时间内进行提交 如果在一定时间内不提交 就会回滚 //4. readOnly 是否只读 默认 false 如果为 true 只能读操作 //5. rollbackFor 回滚 // 设置出现哪些异常进行回滚 //6. noRollbackFor 不回滚 // 这只出现哪些异常进行不回滚
基于 xml 配置文件 方式 实现 事务声明 一般使用 注解方式 了解就好 现在不常用