本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看
本文对应慕课网上课程Spring事务管理,详情可查看:点我git
PlatformTransactionManager:
事务管理器类,不一样持久化框架(例如JDBC,Hibernate,Mybatis|Mybatis好像使用和JDBC同同样的事务管理器实现类)对应不一样实现类,注意具体使用时查询github
TransactionDefinition:
数据库在查询数据时,因为种种缘由会发生如下三种问题.
脏读 :读到还未修改的;
不可重复读:在屡次读同一记录过程当中,另外事务提交修改,致使读取先后内容不一样;
幻读 :和不可重复读相似,不过另一个事务插入而非修改sql
隔离级别 : 就是为了解决以上问题设定的事务相关的属性
READ_UNCOMMITED
READ_COMMITTED
REPEATABLE READ
SERIALIZABLE
以上四个级别一层层更严格,执行效率也愈来愈低.
最后的那个级别会致使全部事务呈线性执行数据库
传播行为:用来支持Spring的事务管理的属性,肯定哪些操做会在被包含在同一个事务里
PROPAGATION_REQUIRED 支持当前事务,若是不存在,就建立一个
PROPAGATION_SUPPORTS 具体查看相关文档
PROPAGATION_MANDATORY 。。。。
....编程
sql执行可使用模板,也能够拿到sqlConnection以后本身执行,可是执行模板确实是最方便的方法框架
TransactionStatus:能够获得当前事务的相关属性代理
1:配置事务管理器platformTransactionManager
对于jdbc 须要datasourceTransactionManager 其中必须定义数据源属性dataSource,jdbc中是c3p0的链接池code
2:事务管理的模板(注意和sql模板不一样) transactionTemplate 事务管理模板,其属性就是上面对应的事务管理器.orm
3:在须要事务管理的代码处使用内部匿名类来执行运行sql的代码,这样将全部的操做后台的sql都会放在同一个事务中.xml
1:首先仍是要配置事务管理器
2:配置事务管理具体方法
经典ProxyFactoryBean(使用动态代理的技术,用法已经渐渐废弃)
须要配置TransactionProxyFactoryBean 属性包括target(标注哪一个Bean须要事务管理) 和 事务管理器(上面配置的),在bean的配置中经过property来配置事务的传播行为和隔离级别. (只能对一个目标进行配置,就是那个target,很差用)
使用aop来进行事务管理
使用基于AspectJ的Spring AOP来管理
xml配置:
配置通知 <tx:advice>
配置切面 <aop:aspect>
,在切面中配置通知和切点.
注解配置:
@Transactional便可配置;对须要的类配置,同时也可配置相关的隔离级别和传播行为属性.
相关的dao层配置请查看本系列文档关于Mybatis的总结