原文:http://www.iteye.com/topic/1123347

Spring配置文件中关于事务配置总是由三个组成部分,DataSource、TransactionManager和代理机制这三部分,无论是那种配置方法,一般变化的只是代理机制这块!

首先我创建了两个类,一个接口一个实现:

  1. package com.dao;
  2. public interface UserDao {
  3. public void getUser();
  4. }

实现:

  1. package com.dao.impl;
  2. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  3. import com.dao.UserDao;
  4. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
  5. public void getUser(){
  6. }
  7. }

第一种:每个Bean都有一个代理:

  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:aop="http://www.springframework.org/schema/aop"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
  8. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
  9. <!-- 数据源 -->
  10. <bean id="dataSource"
  11. class="org.apache.commons.dbcp.BasicDataSource"
  12. destroy-method="close">
  13. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  14. <property name="url"
  15. value="jdbc:mysql://192.168.0.244:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" />
  16. <property name="username" value="root" />
  17. <property name="password" value="root" />
  18. <!-- 连接池启动时的初始值 -->
  19. <property name="initialSize" value="10" />
  20. <!-- 连接池的最大值 -->
  21. <property name="maxActive" value="10" />
  22. <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
  23. <property name="maxIdle" value="20" />
  24. <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
  25. <property name="minIdle" value="10" />
  26. <property name="defaultAutoCommit" value="true" />
  27. </bean>
  28. <!-- 会话工厂 -->
  29. <bean id="sessionFactory"
  30. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  31. <property name="dataSource" ref="dataSource" />
  32. <property name="mappingLocations">
  33. <list>
  34. <value>classpath:/com/nms/entity/**/*.hbm.xml</value>
  35. </list>
  36. </property>
  37. <property name="hibernateProperties">
  38. <props>
  39. <prop key="hibernate.dialect">
  40. org.hibernate.dialect.MySQL5Dialect
  41. </prop>
  42. <prop key="hibernate.show_sql">true</prop>
  43. <prop key="hibernate.format_sql">true</prop>
  44. </props>
  45. </property>
  46. </bean>
  47. <!-- 定义事务管理器 -->
  48. <bean id="transactionManager"
  49. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  50. <property name="sessionFactory" ref="sessionFactory" />
  51. </bean>
  52. <!-- 配置服务层 -->
  53. <bean id="userDaoAgency" class="com.dao.impl.UserDaoImpl">
  54. <property name="sessionFactory" ref="sessionFactory" />
  55. </bean>
  56. <bean id="userDao"
  57. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  58. <!-- 配置事务管理器 -->
  59. <property name="transactionManager" ref="transactionManager" />
  60. <property name="target" ref="userDaoAgency" />
  61. <property name="proxyInterfaces" value="com.dao.UserDao" />
  62. <!-- 配置事务属性 -->
  63. <property name="transactionAttributes">
  64. <props>
  65. <prop key="*">PROPAGATION_REQUIRED</prop>
  66. </props>
  67. </property>
  68. </bean>
  69. </beans>

第二种:所有Bean共享一个代理:

  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:aop="http://www.springframework.org/schema/aop"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
  8. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
  9. <!-- 数据源 -->
  10. <bean id="dataSource"
  11. class="org.apache.commons.dbcp.BasicDataSource"
  12. destroy-method="close">
  13. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  14. <property name="url"
  15. value="jdbc:mysql://192.168.0.244:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" />
  16. <property name="username" value="root" />
  17. <property name="password" value="root" />
  18. <!-- 连接池启动时的初始值 -->
  19. <property name="initialSize" value="10" />
  20. <!-- 连接池的最大值 -->
  21. <property name="maxActive" value="10" />
  22. <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
  23. <property name="maxIdle" value="20" />
  24. <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
  25. <property name="minIdle" value="10" />
  26. <property name="defaultAutoCommit" value="true" />
  27. </bean>
  28. <!-- 会话工厂 -->
  29. <bean id="sessionFactory"
  30. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  31. <property name="dataSource" ref="dataSource" />
  32. <property name="mappingLocations">
  33. <list>
  34. <value>classpath:/com/nms/entity/**/*.hbm.xml</value>
  35. </list>
  36. </property>
  37. <property name="hibernateProperties">
  38. <props>
  39. <prop key="hibernate.dialect">
  40. org.hibernate.dialect.MySQL5Dialect
  41. </prop>
  42. <prop key="hibernate.show_sql">true</prop>
  43. <prop key="hibernate.format_sql">true</prop>
  44. </props>
  45. </property>
  46. </bean>
  47. <!-- 定义事务管理器 -->
  48. <bean id="transactionManager"
  49. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  50. <property name="sessionFactory" ref="sessionFactory" />
  51. </bean>
  52. <!-- 定义事务 -->
  53. <bean id="base"
  54. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
  55. lazy-init="true" abstract="true">
  56. <!-- 配置事务管理器 -->
  57. <property name="transactionManager" ref="transactionManager" />
  58. <!-- 配置事务属性 -->
  59. <property name="transactionAttributes">
  60. <props>
  61. <prop key="*">PROPAGATION_REQUIRED</prop>
  62. </props>
  63. </property>
  64. </bean>
  65. <!-- 配置服务层 -->
  66. <bean id="userDao"
  67. class="com.dao.impl.UserDaoImpl">
  68. <property name="sessionFactory" ref="sessionFactory" />
  69. </bean>
  70. <!-- 代理对象 -->
  71. <bean id="userDaoAgency" parent="base">
  72. <property name="target" ref="userDao" />
  73. </bean>
  74. </beans>

第三种:拦截器:

  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:aop="http://www.springframework.org/schema/aop"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
  8. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
  9. <!-- 数据源 -->
  10. <bean id="dataSource"
  11. class="org.apache.commons.dbcp.BasicDataSource"
  12. destroy-method="close">
  13. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  14. <property name="url"
  15. value="jdbc:mysql://192.168.0.244:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" />
  16. <property name="username" value="root" />
  17. <property name="password" value="root" />
  18. <!-- 连接池启动时的初始值 -->
  19. <property name="initialSize" value="10" />
  20. <!-- 连接池的最大值 -->
  21. <property name="maxActive" value="10" />
  22. <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
  23. <property name="maxIdle" value="20" />
  24. <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
  25. <property name="minIdle" value="10" />
  26. <property name="defaultAutoCommit" value="true" />
  27. </bean>
  28. <!-- 会话工厂 -->
  29. <bean id="sessionFactory"
  30. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  31. <property name="dataSource" ref="dataSource" />
  32. <property name="mappingLocations">
  33. <list>
  34. <value>classpath:/com/nms/entity/**/*.hbm.xml</value>
  35. </list>
  36. </property>
  37. <property name="hibernateProperties">
  38. <props>
  39. <prop key="hibernate.dialect">
  40. org.hibernate.dialect.MySQL5Dialect
  41. </prop>
  42. <prop key="hibernate.show_sql">true</prop>
  43. <prop key="hibernate.format_sql">true</prop>
  44. </props>
  45. </property>
  46. </bean>
  47. <!-- 定义事务管理器(声明式的事务) -->
  48. <bean id="transactionManager"
  49. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  50. <property name="sessionFactory" ref="sessionFactory" />
  51. </bean>
  52. <!-- 定义事务 -->
  53. <bean id="transactionInterceptor"
  54. class="org.springframework.transaction.interceptor.TransactionInterceptor">
  55. <property name="transactionManager" ref="transactionManager" />
  56. <!-- 配置事务属性 -->
  57. <property name="transactionAttributes">
  58. <props>
  59. <prop key="*">PROPAGATION_REQUIRED</prop>
  60. </props>
  61. </property>
  62. </bean>
  63. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  64. <property name="beanNames">
  65. <list>
  66. <value>*DaoImpl</value>
  67. </list>
  68. </property>
  69. <property name="interceptorNames">
  70. <list>
  71. <value>transactionInterceptor</value>
  72. </list>
  73. </property>
  74. </bean>
  75. <!-- 配置服务层 -->
  76. <bean id="userDaoAgency" class="com.dao.impl.UserDaoImpl">
  77. <property name="sessionFactory" ref="sessionFactory" />
  78. </bean>
  79. </beans>

第四种:使用tx标签配置的拦截器:

  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:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  11. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  12. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  13. <!-- 数据源 -->
  14. <bean id="dataSource"
  15. class="org.apache.commons.dbcp.BasicDataSource"
  16. destroy-method="close">
  17. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  18. <property name="url"
  19. value="jdbc:mysql://192.168.0.244:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" />
  20. <property name="username" value="root" />
  21. <property name="password" value="root" />
  22. <!-- 连接池启动时的初始值 -->
  23. <property name="initialSize" value="10" />
  24. <!-- 连接池的最大值 -->
  25. <property name="maxActive" value="10" />
  26. <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
  27. <property name="maxIdle" value="20" />
  28. <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
  29. <property name="minIdle" value="10" />
  30. <property name="defaultAutoCommit" value="true" />
  31. </bean>
  32. <!-- 会话工厂 -->
  33. <bean id="sessionFactory"
  34. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  35. <property name="dataSource" ref="dataSource" />
  36. <property name="mappingLocations">
  37. <list>
  38. <value>classpath:/com/nms/entity/**/*.hbm.xml</value>
  39. </list>
  40. </property>
  41. <property name="hibernateProperties">
  42. <props>
  43. <prop key="hibernate.dialect">
  44. org.hibernate.dialect.MySQL5Dialect
  45. </prop>
  46. <prop key="hibernate.show_sql">true</prop>
  47. <prop key="hibernate.format_sql">true</prop>
  48. </props>
  49. </property>
  50. </bean>
  51. <context:annotation-config />
  52. <context:component-scan base-package="com.dao" />
  53. <!-- 定义事务管理器 -->
  54. <bean id="transactionManager"
  55. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  56. <property name="sessionFactory" ref="sessionFactory" />
  57. </bean>
  58. <!-- 定义事务 -->
  59. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  60. <tx:attributes>
  61. <tx:method name="*" propagation="REQUIRED" />
  62. </tx:attributes>
  63. </tx:advice>
  64. <!-- 定义切面 -->
  65. <aop:config>
  66. <aop:pointcut id="interceptorPointCuts" expression="execution(* com.dao.*.*(..))" />
  67. <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
  68. </aop:config>
  69. </beans>

第五种:注解:

  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:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  11. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  12. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  13. <!-- 数据源 -->
  14. <bean id="dataSource"
  15. class="org.apache.commons.dbcp.BasicDataSource"
  16. destroy-method="close">
  17. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  18. <property name="url"
  19. value="jdbc:mysql://192.168.0.244:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" />
  20. <property name="username" value="root" />
  21. <property name="password" value="root" />
  22. <!-- 连接池启动时的初始值 -->
  23. <property name="initialSize" value="10" />
  24. <!-- 连接池的最大值 -->
  25. <property name="maxActive" value="10" />
  26. <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
  27. <property name="maxIdle" value="20" />
  28. <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
  29. <property name="minIdle" value="10" />
  30. <property name="defaultAutoCommit" value="true" />
  31. </bean>
  32. <!-- 会话工厂 -->
  33. <bean id="sessionFactory"
  34. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  35. <property name="dataSource" ref="dataSource" />
  36. <property name="mappingLocations">
  37. <list>
  38. <value>classpath:/com/nms/entity/**/*.hbm.xml</value>
  39. </list>
  40. </property>
  41. <property name="hibernateProperties">
  42. <props>
  43. <prop key="hibernate.dialect">
  44. org.hibernate.dialect.MySQL5Dialect
  45. </prop>
  46. <prop key="hibernate.show_sql">true</prop>
  47. <prop key="hibernate.format_sql">true</prop>
  48. </props>
  49. </property>
  50. </bean>
  51. <context:annotation-config />
  52. <!-- 使用注解的包路径 -->
  53. <context:component-scan base-package="com.dao" />
  54. <!-- 支持  @Transactional 标记 -->
  55. <tx:annotation-driven transaction-manager="transactionManager"/>
  56. <!-- 定义事务管理器 -->
  57. <bean id="transactionManager"
  58. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  59. <property name="sessionFactory" ref="sessionFactory" />
  60. </bean>
  61. </beans>

如果使用了注解,那么实现类应该这样写:

  1. package com.dao.impl;
  2. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  3. import org.springframework.stereotype.Component;
  4. import org.springframework.transaction.annotation.Transactional;
  5. import com.dao.UserDao;
  6. @Transactional
  7. @Component("userDaoAgency")
  8. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
  9. /**
  10. * 为方法增加事务处理特性
  11. */
  12. @Transactional(readOnly=true)
  13. public void getUser(){
  14. }
  15. }

这样每个方法都能自己定义自己的事务处理!

以上内容,是从网络找到的资料总结而来,仅供参考!

Spring笔记——配置Hibernate框架事务的更多相关文章

  1. spring boot配置mybatis和事务管理

    spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...

  2. Spring中配置Hibernate事务管理

    <!-- transationManager --> <bean id="transactionManager" class="org.springfr ...

  3. Spring笔记⑤--整合hibernate代码测试

    String整合hibernate代码测试 在上节生成的表中插入数据:   注意:使用myeclipse2014生成的整合项目可能存在问题需要我们自己导入.   第一步 我们写dao接口 packag ...

  4. Spring笔记(5) - 声明式事务@EnableTransactionManagement注解源码分析

    一.背景 前面详解了实现Spring事务的两种方式的不同实现:编程式事务和声明式事务,对于配置都使用到了xml配置,今天介绍Spring事务的注解开发,例如下面例子: 配置类:注册数据源.JDBC模板 ...

  5. 笔记:Hibernate 框架配置说明

    下载 Hibernate ,打开地址 www.hibernate.org ,点击 Hibernate ORM -> Downloads 下载 4.3.11 版本,要使用Hibernate 需要把 ...

  6. MyEclipse配置Hibernate框架(基础篇)

    一.创建java project项目 二.项目右键Configure Facets -- Install Hibernate Facet 三.项目添加对应数据库的jar包 四.编写实体类 packag ...

  7. 深入浅出Struts2+Spring+Hibernate框架

    一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...

  8. 整合spring和hibernate框架

    一)整合spring和hibernate框架整合要点:(1)数据源配置在Spring的配置文件中,供Spring和Hibernate框架共同使用:(2)不再需要hibernate.hbm.xml配置文 ...

  9. spring整合mybatis(hibernate)配置

    一.Spring整合配置Mybatis spring整合mybatis可以不需要mybatis-config.xml配置文件,直接通过spring配置文件一步到位.一般需要具备如下几个基本配置. 1. ...

随机推荐

  1. OpenGL学习笔记之配置OpenGL

    OpenGL是计算机图形学领域的一门入门语言,OpenGL开发库的一些文件在官网上可以下载到.里面包含三个文件,如下: 1.把在OpenGL开发库中LIB(库文件)glut.lib和glut32.li ...

  2. 关于在 loadView 中改变状态栏的可视性

    这种问题不知道大家是否遇见过,在此用两句话(时间紧迫,还得加班)分享下今天犯的错误 我把状态栏的的可视性的改变写在了loadView 里面,然后就出现了调用了两次 loadView 和 viewDid ...

  3. Function模式 -- 深入理解javascript

    /* 一.回调函数 函数A作为另外一个函数B的参数 */ var menuId = $("ul.nav").first().attr("id"); var re ...

  4. Mysql 慢查询设置

    Mysql慢查询设置 分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”. === ...

  5. 《JavaScript高级程序设计》第4章 变量、作用域和内存问题

    4.1 基本类型和引用类型 5种基本类型:Undefined.Null.Boolean.Number和String,这5种基本类型是按值访问的,因为可以操作保存在变量中的实际的值. 引用类型:可能由多 ...

  6. ZeroMQ 在 centos 6.5_x86_64 下的安装

    ZeroMQ 在 centos 6.5_x86_64 下的安装 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.ZeroMQ介绍 ZeroMQ是一个开 ...

  7. 我是一只it小小鸟阅读笔记

    “我们具有各自的独特性--我们兴趣各异,有不同的家庭背景,不同的知识储备,不同的思维方式……但在现实中,我们也会碰到类似的人生选择的关口,我们会犯类似的错误,有类似的迷惘,也会为类似的精彩鼓掌,而且很 ...

  8. shadowmap 及优化

    对于子阴影的走样, 条纹 开zbias resterizeState zbias = 1000...大概这样 另一个方法是画背面 backface是指一个人肚子那面,后背那面 而不是肚子的里面那层 所 ...

  9. Phyre LCUE with YEBIS cause issues about GS

    when LCUE enabled in phyreEngine when Yebis integrated and render there are two mainloopdraws in one ...

  10. 企业级账号更新app

    企业级账号 版本更新总结       参考:http://jingyan.baidu.com/article/a3aad71aa5fbfbb1fb0096b1.html 1.打包ipa,plist工具 ...