spring事务管理
1、事务概念
2、Mysql事务处理
3、Jdbc事务处理
4、Spring事务 处理方式
5、项目中事务
6、总结
前置条件:
Jdbc
Spring ioc Spring aop
Mysql
数据库设计:
订单表
商品表
事务:
概念:事务一般指的是数据库事务,指的是一个程序执行单元测试的一系列的操作(指的就是数据库中的增删改查操作),要么完全执行,要么完全不执行;
事务的特性:
原子性:一个事务是不可分割的工作单位;
一致性;事务必须是使得数据库从一个一致性状态变到另一个一致性状态;
隔离性;一个事务执行不能被其他事务干扰; 上锁;
持久性;一个事务一旦提交,他对数据库的改变就是永久的;
Mysql事务; 基本规则:
innodb :支持事务;
默认显示的是自动提交 aotocommit
Begin 显示的开启一个事务;
Commit 提交事务,并使已对数据库所有修改变为永久;
Rollback 回滚事务,并撤销正在进行的的所有未提交的修改;
Mysql事务并发问题: 事务A 事务B
脏读 rollback session 会话独立
不可重复 a:100 b:0 commit a:0 锁定
幻读 (解决上有本质区别) a:0 b --1005 :100 commit a:100 整个商品表锁定
事务隔离级别: 脏读 不可重复读 幻读
读未提交(read-uncommitted) 是 是 是
读已提交(read-committed) 否 是 是
可重复读(repeatable-read) 否 否 是
串行化(serializable) 否 否 否
查看隔离级别:
Select @@tx_isolation 查看默认隔离级别的
Set session transaction isolation level xxx 设置隔离级别
jdbc事务处理;
Connection接口
jdbc事务处理基于Connection接口的,jdbc通过Connection对象进行事务管理
Jdbc默认是自动提交;
事务相关方法:
setAutoCommit设置自动提交 true false手动修改 – begin
Commit
Rollback
业务:添加生成订单功能的例子;
dao层持久化—增删改查;
业务:生成订单、库存减少等
总结:事务正常情况下封装在业务层的;
Jdbc事务隔离级别:
Transaction-read-uncommitted
Transaction-read-committed
Transaction-repeatable-read
Transaction-serializable
获取当前隔离级别 getTransactionIsolation
设置当前隔离级别 setTransactionIsolation
Spring事务的处理
API 接口
TransationDefinition接口:
ISOLATION-read-uncommitted
ISOLATION-read-committed
ISOLATION-repeatable-read MYSQL
ISOLATION-serializable
默认超时
Timeout_default(默认30秒)
Spring事务传播行为;
Propagation-requided 必须事务 是默认的也是最常用的事务
针对必须事务,2种情况:
第一种情况:
第二种:
Spring事务处理
两大类的处理方式:
编程式 代码行为 --基于底层API
(3)TransactionTemplate 简化事务编程的代码;
声明式(建议)
看下面;
Spring事务的处理: 4种方式;
1、基于拦截器的事务方式
transactionInterceptor
基于transactionProxyFactoryBean
基于tx命名空间的
基于@Transactional 注解方式
总结:
原子性
一致性
隔离性
持久性
事务传播行为
Api编程式
声明式 tx 注解