以MyBatis为例。

一、基于注解的声明式事务配置

1. 添加tx名字空间

xmlns:tx="http://www.springframework.org/schema/tx"

2. 开启事务的注解支持

<!-- 开启事务控制的注解支持 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

3. MyBatis自动参与到spring事务管理中,无需额外配置,只要org.mybatis.spring.SqlSessionFactoryBean引用的数据源与DataSourceTransactionManager引用的数据源一致即可。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:mybatis-config.xml</value>
</property>
</bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

4. 使用@Transactional注解

@Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该注解来覆盖类级别的定义。

虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。

二、基于.xml文件的声明式事务配置

<tx:advice id="advice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"/>
<tx:method name="insert" propagation="REQUIRED" read-only="false"/>
</tx:attributes>
</tx:advice> <aop:config>
<aop:pointcut id="testService" expression="execution (* com.nnngu.service.MyBatisService.*(..))"/>
<aop:advisor advice-ref="advice" pointcut-ref="testService"/>
</aop:config>

最新文章

  1. TextMate 通用快捷键
  2. Dapper学习笔记(1)-开始
  3. visual studio 2012 的制作ActiveX、打包和发布
  4. PHP笔记(一)
  5. c# winform 关于DataGridView的一些操作(很全,绝对够用)
  6. Virtualbox虚拟机设置不完全笔记
  7. BroadcastReceiver
  8. JVM内存管理(二)
  9. ubuntu nginx 伪静态 设置
  10. OSSEC配置
  11. Windows Azure Marketplace 为新增的 50 个国家/地区提供,并推出了令人振奋的新增内容,包括我们自己的 Bing 光学字符识别服务
  12. 围观M$的new
  13. Jquery qTip2实现多种提示效果,支持ajax,以及多种样式
  14. 引入CSS的三种方式
  15. npm cnpm +nodejs
  16. cf869C组合计数问题
  17. PAT (Basic Level) Practise - 我要通过!
  18. Python&#160;解决Python安装包时提示Unable&#160;to&#160;find&#160;vcvarsall.bat的问题
  19. MATLAB常微分方程的数值解法
  20. lupgu P3950 部落冲突

热门文章

  1. 6. java 方法
  2. es6一句话拾遗
  3. 【OCR系列之一】字符识别技术总览
  4. 隐马尔可夫模型(HMM)及Viterbi算法
  5. 10-Django中间件
  6. selenium常用的三种等待方式
  7. mysql多表关联update
  8. MECE分析法
  9. centos7下mysql5.7的安装与配置
  10. Go文件内容追加问题