1 事务概述
1.1 事务控制的2种方式
手动编程实现
声明式实现:spring提供了对事务的管理,实现的核心是AOP,通过配置文件的配置,在执行代码的过程中,动态植入事务控制,
对某个方法执行事务控制,不能对方法里的某几行代码进行事务控制,是粗粒度事务控制
.1.2声明式事务管理实现的2种方式
aXML配置实现
b注解实现
2 XML实现声明式事务
spring针对jdbc和hibernate有不同的事务管理器类
jdbc:DatasourceTrsnsactionManager
hibernate:HibernateTransactionManager
xml配置事务管理步骤:
不要忘记引入事务名称空间
a配置事务管理器类
//这里是进行JDBC操作,所以事务管理器类是DataSourceTransactionManager
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
//第一个dataSource是类中setDataSource的属性名,第2个dataSource是引用配置中的dataSource
<property name="dataSource" ref="dataSource"></property>
</bean>
b 配置事务增强(如何管理事务,是只读还是读写
<!-- 5.2 配置事务增强(如果管理事务?) -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="*" read-only="false"/>
</tx:attributes>
</tx:advice>
c AOP配置:拦截哪些方法(切入点表达式)+应用上面的事务增强
<!-- 5.3 Aop配置: 拦截哪些方法(切入点表表达式) + 应用事务增强配置 -->
<aop:config>
//*表示返回值类型任意
<aop:pointcut expression="execution(* cn.itcast.a_tx.DeptService.*())" id="pt"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
</aop:config>
3 注解实现事务控制
3.1 必须引入Aop相关的jar文件
3.2 bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类
<!-- 开启注解扫描 -->
<context:component-scan base-package="cn.itcast.b_anno"></context:component-scan>
<!-- 注解方式实现事务: 指定注解方式实现事务,申明引用的事务管理器类 -->
<tx:annotation-driven transaction-manager="txManager"/>
3.3 在需要添加事务控制的地方,写上: @Transactional
spring只会对RuntimeException进行事务回滚,不支持对Exception事务自动回滚