一、spring-mybatis.xml文件中加入事务管理配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/tx
  10. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  11. http://www.springframework.org/schema/aop
  12. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  13. ">
  14.  
  15. <!-- 数据源设置 -->
  16. <bean id="dataSource"
  17. class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  18. <property name="driverClassName" value="${driverClassName}" />
  19. <property name="url" value="${jdbc_url}" />
  20. <property name="username" value="${jdbc_username}" />
  21. <property name="password" value="${jdbc_password}" />
  22. </bean>
  23.  
  24. <!-- myBatis文件 -->
  25. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  26. <property name="dataSource" ref="dataSource" />
  27. <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
  28. <property name="mapperLocations" value="classpath:xy/mapping/*.xml" />
  29. </bean>
  30.  
  31. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  32. <property name="basePackage" value="xy.dao" />
  33. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
  34. </bean>
  35.  
  36. <!-- 配置事务管理器 -->
  37. <bean id="transactionManager"
  38. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  39. <property name="dataSource" ref="dataSource" />
  40. </bean>
  41.  
  42. <!-- 注解方式配置事务 -->
  43. <tx:annotation-driven transaction-manager="transactionManager" />
  44.  
  45. <!-- 拦截器方式配置事物 -->
  46. <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
  47. <tx:attributes>
  48. <tx:method name="add*" propagation="REQUIRED" />
  49. <tx:method name="append*" propagation="REQUIRED" />
  50. <tx:method name="insert*" propagation="REQUIRED" />
  51. <tx:method name="save*" propagation="REQUIRED" />
  52. <tx:method name="update*" propagation="REQUIRED" />
  53. <tx:method name="modify*" propagation="REQUIRED" />
  54. <tx:method name="edit*" propagation="REQUIRED" />
  55. <tx:method name="delete*" propagation="REQUIRED" />
  56. <tx:method name="remove*" propagation="REQUIRED" />
  57. <tx:method name="repair" propagation="REQUIRED" />
  58. <tx:method name="delAndRepair" propagation="REQUIRED" />
  59.  
  60. <tx:method name="get*" propagation="SUPPORTS" />
  61. <tx:method name="find*" propagation="SUPPORTS" />
  62. <tx:method name="load*" propagation="SUPPORTS" />
  63. <tx:method name="search*" propagation="SUPPORTS" />
  64. <tx:method name="datagrid*" propagation="SUPPORTS" />
  65.  
  66. <tx:method name="*" propagation="SUPPORTS" />
  67. </tx:attributes>
  68. </tx:advice>
  69. <aop:config>
  70. <aop:pointcut id="transactionPointcut" expression="execution(* xy.service..*Impl.*(..))" />
  71. <aop:advisor pointcut-ref="transactionPointcut"
  72. advice-ref="transactionAdvice" />
  73. </aop:config>
  74.  
  75. <!-- 配置druid监控spring jdbc -->
  76. <bean id="druid-stat-interceptor"
  77. class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
  78. </bean>
  79. <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
  80. scope="prototype">
  81. <property name="patterns">
  82. <list>
  83. <value>xy.service.*</value>
  84. </list>
  85. </property>
  86. </bean>
  87. <aop:config>
  88. <aop:advisor advice-ref="druid-stat-interceptor"
  89. pointcut-ref="druid-stat-pointcut" />
  90. </aop:config>
  91.  
  92. </beans>

要加入的配置代码

  1. <!-- 配置事务管理器 -->
  2. <bean id="transactionManager"
  3. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  4. <property name="dataSource" ref="dataSource" />
  5. </bean>
  6.  
  7. <!-- 注解方式配置事务 -->
  8. <tx:annotation-driven transaction-manager="transactionManager" />

二、在调用的方法上加上@Transactional注解(必须为public方法才行,不要捕捉异常,要让异常自动抛出,否则不能进行事务回滚。方法要写在服务层中在controller中无效)

  1. @Transactional
  2. @Override
  3. public void transactionalTest(List<Tuser> list) {
  4. for(int i=0;i<list.size();i++){
  5. /* if(i==0){
  6. tuserMapper.insertSelective(list.get(i));
  7. }else{
  8. throw new RuntimeException();
  9. }*/
  10.  
  11. if(i==0){
  12. tuserMapper.updateByPrimaryKeySelective(list.get(i));
  13. }else if(i==1){
  14. //int j=1/0;//产生异常
  15. }else{
  16. tuserMapper.insertSelective(list.get(i));
  17. }
  18. }
  19. }

三、测试方法(用JUnit进行测试)

  1. @Test
  2. public void test4(){
  3. List<Tuser> list = new ArrayList<Tuser>();
  4. Tuser tuser = new Tuser();
  5. tuser.setId("0ce64eea-98d6-462b-9982-4b0816126495");
  6. tuser.setName("name1edit");
  7. tuser.setPwd("0");
  8. tuser.setSjh("111");
  9. list.add(tuser);
  10. //int l = userService.insertSelective(tuser);
  11. //int i=1/0;
  12. Tuser tuser1 = new Tuser();
  13. tuser1.setId(UUID.randomUUID().toString());
  14. tuser1.setName("name2");
  15. tuser1.setPwd("1");
  16. tuser1.setSjh("222");
  17. list.add(tuser1);
  18. Tuser tuser2 = new Tuser();
  19. tuser2.setId(UUID.randomUUID().toString());
  20. tuser2.setName("name3");
  21. tuser2.setPwd("2");
  22. tuser2.setSjh("333");
  23. list.add(tuser2);
  24. //int l2 = userService.insertSelective(tuser1);
  25. userService.transactionalTest(list);
  26. }

简单记录下,仅供参考。

SSM框架下声明式事务管理(注解配置方式)的更多相关文章

  1. Spring声明式事务管理与配置介绍

    转至:http://java.9sssd.com/javafw/art/1215 [摘要]本文介绍Spring声明式事务管理与配置,包括Spring声明式事务配置的五种方式.事务的传播属性(Propa ...

  2. Spring声明式事务管理与配置详解

    转载:http://www.cnblogs.com/hellojava/archive/2012/11/21/2780694.html 1.Spring声明式事务配置的五种方式 前段时间对Spring ...

  3. spring4声明式事务—02 xml配置方式

    1.配置普通的 controller,service ,dao 的bean. <!-- 配置 dao ,service --> <bean id="bookShopDao& ...

  4. spring4声明式事务—02 xml配置方式

    1.配置普通的 controller,service ,dao 的bean. <!-- 配置 dao ,service --> <bean id="bookShopDao& ...

  5. 零基础学习java------39---------json格式交互,Restful(不懂),静态资源映射,SSM整合(ssm整合思想,application.xml文件详解(声明式事务管理),)

    一. json格式交互(知道) 1 . 回顾ajax基本语法 $.ajax({ url:"", // 请求的后台路径 data:{"":"" ...

  6. Spring—SSJ集成&声明式事务管理

    1.   课程介绍 1.  SSJ集成;(掌握) 2.  声明式事务管理;(掌握) 什么是三大框架 2.1.  ssh Struts/Struts2 Spring Hibernate 2.2.  ss ...

  7. 【Spring】Spring的事务管理 - 2、声明式事务管理(实现基于XML、Annotation的方式。)

    声明式事务管理 文章目录 声明式事务管理 基于XML方式的声明式事务 基于Annotation方式的声明式事务 简单记录 - 简单记录-Java EE企业级应用开发教程(Spring+Spring M ...

  8. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring声明式事务管理(基于Annotation注解方式实现)

    在 Spring 中,除了使用基于 XML 的方式可以实现声明式事务管理以外,还可以通过 Annotation 注解的方式实现声明式事务管理. 使用 Annotation 的方式非常简单,只需要在项目 ...

  9. spring声明式事务管理方式( 基于tx和aop名字空间的xml配置+@Transactional注解)

    1. 声明式事务管理分类 声明式事务管理也有两种常用的方式, 一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解. 显然基于注解的方式更简单易用,更清爽. ...

随机推荐

  1. OJ题:奇偶归一猜想——求归一过程中的最大值

    题目: 题目内容: 奇偶归一猜想--对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1. 如n = 11,得序列:11, 34, 17, 52, ...

  2. MinerHtmlThread.java 爬取页面线程

    MinerHtmlThread.java 爬取页面线程 package com.iteye.injavawetrust.miner; import org.apache.commons.logging ...

  3. H5学习之旅-H5的格式化(4)

    H5的格式设置: b代表是粗体 i斜体 big 字体变大 small变小 em强调 strong 加强和变粗差不多 sub 定义下标字 sup 定义上标字 ins 插入字 del 删除字 代码实例 & ...

  4. (十一)延时执行、圆角(可实现圆形label)、代理设计模式

    延时执行: 使用控件的performSelector...方法,例如用于移除,可以写在一行. [lab performSelector:@selector(removeFromSuperview) w ...

  5. Dynamics CRM2011 通过DeveloperToolkit在VS中部署遇到的问题

    接上一篇继续,说个在部署的过程中我遇到了个问题:"Error registering plugins and/or workflows. Plug-in assembly does not ...

  6. 配置hadoop-1.2.1 eclipse开发环境

    写这篇文章的目的是记录解决配置过程中的问题 首先我们先看下这篇博文 配置hadoop-1.2.1 eclipse开发环境 但是在[修改 Hadoop 源码]这里,作者发布的 hadoop-core-1 ...

  7. 【一天一道LeetCode】#38. Count and Say

    一天一道LeetCode系列 (一)题目 The count-and-say sequence is the sequence of integers beginning as follows: 1, ...

  8. Oracle Service Bus 11g 的三种方案

    使用<Oracle Service Bus 11g Development Cookbook>中的方案迅速推出一批全新的面向服务和消息的解决方案 2012 年 3 月   (单击图像了解更 ...

  9. 对FMDB的封装JRDB

    在自己开发中,每次用到数据库都会纠结是使用CoreData还是FMDB.CoreData虽然Api简单,但是调用栈非常复杂,要初始化一个Context需要至少20行代码.显然,对于这种这么恶心的情况, ...

  10. 基于ARM_contexA9 led驱动编程

    关于友善之臂出的这款contexA9开发板,目前在网络上的资源较少,特别是内核的,非常之少,鉴于这种情况,我将会写一个系列的驱动来做关于tiny4412这款板子开发的总结. 简单介绍一下: Tiny4 ...