`

Spring中如何配置Hibernate事务

 
阅读更多
链接别人的,觉得写得不错http://www.linuxidc.com/Linux/2013-12/93681.htm

为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事务有4个特性:原子性、一致性、隔离性、持久性。

事务的种类有两种:编程式事务和声明式事务。编程式事务就是将事务处理放在程序中,而声明式事务则是通过配置文件或者注解进行操作。

在Spring中有声明式事务的概念,通过和Hibernate类似框架的集成,可以很好的完成声明式事务。

其实,不论在Spring中有几种配置Hibernate事务的方法,都逃不出一下几条:

1.配置SessionFactory

2.配置事务容器

3.配置事务规则

4.配置事务入口

后面一共为大家提供4种配置Hibernate事务的方法。

首先说下配置SessionFactory,配置SessionFactory有两种方式,一种是通过配置hibernate.cfg.xml文件的位置来配置SessionFactory,另一种就是在Spring配置文件中,手动配置数据源。

下面是两种配置SessionFactory的方式(第二种配置需要额外引入两个包:commons-dbcp、commons-pool)

<!-- 1、第一种配置SessionFactory的方式 -->
<bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>

<!-- 2、第二种配置SessionFactory的方式 -->
<!-- 2.1配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  <property name="url" value="jdbc:mysql://localhost:3306/hibernate_cache"></property>
  <property name="username" value="root"></property>
  <property name="password" value="admin"></property>
</bean>
<!-- 2.2、配置SessionFactory -->
<bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource"></property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
  <property name="mappingLocations">
   <list>
    <value>classpath:实体对应xml的路径</value>
   </list>
  </property>
</bean>

至此Hibernate就成功的将SessionFactory交给了Spring来管理。现在再来看Spring是怎样管理Hibernate事务的吧。

第一种方式,利用tx标签配置事务。

<!-- 配置事务容器 -->
<bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务规则 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
   <tx:method name="add*" propagation="REQUIRED" />
   <tx:method name="modify*" propagation="REQUIRED" />
   <tx:method name="del*" propagation="REQUIRED" />
   <tx:method name="*" propagation="REQUIRED" read-only="true" />
  </tx:attributes>
</tx:advice>
<!-- 定义事务入口 -->
<aop:config>
  <aop:pointcut id="allDaoMethod" expression="execution(* com.jianxin.dao.*.*(..))" />
  <aop:advisor advice-ref="txAdvice" pointcut-ref="allDaoMethod" />
</aop:config>

第二种,用代理进行配置

<!-- 配置事务容器 -->
<bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务规则 -->
<bean id="transactionProxy"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
  abstract="true">
  <property name="transactionManager" ref="transactionManager" />
  <property name="transactionAttributes">
   <props>
    <!-- ,回滚为-,不回滚为+ -->
    <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
    <prop key="modify*">PROPAGATION_REQUIRED,+MyException</prop>
    <prop key="del*">PROPAGATION_REQUIRED</prop>
    <prop key="*">READONLY</prop>
   </props>
  </property>
</bean>
<!-- 定义事务入口 -->
<bean id="userDaoProxy" parent="transactionProxy">
  <property name="target" ref="userDao"></property>
</bean>

第三种,利用拦截器

<!-- 配置事务容器 -->
<bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务规则 -->
<bean id="transactionInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager" ref="transactionManager" />
  <property name="transactionAttributes">
   <props>
    <!-- 回滚为-,不回滚为+ -->
    <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
    <prop key="modify*">PROPAGATION_REQUIRED,+MyException</prop>
    <prop key="del*">PROPAGATION_REQUIRED</prop>
    <prop key="*">READONLY</prop>
   </props>
  </property>
</bean>
<!-- 定义事务入口 -->
<bean id="proxyFactory"
  class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  <property name="interceptorNames">
   <list>
    <value>transactionInterceptor</value>
   </list>
  </property>
  <property name="beanNames">
   <list>
    <value>*Dao</value>
   </list>
  </property>
</bean>

第四种,利用注解。

首先,在配置文件中写入下面语句,打开注解功能

<!-- 开户事务注解功能 -->
<tx:annotation-driven transaction-manager="transactionManager" />

然后用@Transactional对类或者方法进行标记,如果标记到类上,那么次类中所有方法都进行事务回滚处理,在类中定义Transactional的时候,它有propagation、rollbackFor、noRollbackFor等属性,此属性是用来定义事务规则,而定义到哪这个就是事务入口。

纵观以上四种在Spring中配置Hibernate事务的方法,其核心都是一样的,不同的只是实现的方式而已。所以看到这,这篇博文中你只需要记住4句话,就可以轻松理解在Spring中配置Hibernate事务的核心:

1.配置SessionFactory

2.配置事务容器

3.配置事务规则

4.配置事务入口
分享到:
评论

相关推荐

    在Spring中配置Hibernate事务

    下面将详细介绍如何在Spring中配置Hibernate事务。 首先,我们需要理解Spring事务管理的两种基本模式:编程式事务管理和声明式事务管理。编程式事务管理需要在代码中显式调用开始、提交、回滚等事务操作,而声明式...

    spring配置hibernate事务

    在Spring框架中配置Hibernate事务管理是一项关键任务,它允许开发者以声明式的方式处理数据库操作的事务性,确保数据的一致性和完整性。以下是如何在Spring中配置Hibernate事务的详细步骤和概念解释。 首先,理解...

    spring mvc+hibernate实现事务管理(配置文件版)

    总结,本项目展示了如何在Spring MVC和Hibernate环境中实现事务管理,通过MyEclipse自动生成的包和配置文件,简化了开发流程。在实际应用中,这样的整合能够提供高效且易于维护的Web应用,同时,声明式事务管理极大...

    spring4配置hibernate3

    本文将详细探讨如何在Spring 4中配置Hibernate 3,以便实现数据持久化功能。这个压缩包文件“spring4-hibernate3-demo”很可能是包含了一个示例项目的源代码,用于演示这种集成。 首先,我们需要理解Spring 4和...

    Spring Hibernate事务实例

    总结一下,`Spring Hibernate事务实例`涵盖了以下核心知识点: 1. Spring框架的声明式事务管理:通过`TransactionInterceptor`和`@Transactional`注解实现。 2. Hibernate事务管理:使用`...

    spring整合hibernate实现事务处理

    在`Spring_1800_Spring_Hibernate_Transaction_Annotation`这个压缩包文件中,很可能包含了使用注解方式实现Spring整合Hibernate事务处理的相关示例代码和配置文件。通过阅读和理解这些代码,你可以更好地掌握这一...

    spring3,hibernate4 配置声明式事务管理(annotation方式)

    总的来说,Spring 3和Hibernate 4结合使用声明式事务管理,使得我们无需在代码中显式调用事务开始、提交和回滚,而是通过注解和配置文件来声明事务的边界和行为。这种方式降低了代码的复杂度,提高了可维护性和可...

    SpringAOP整合Hibernate并使用事务(模拟买书的过程)

    这个过程将涉及到数据库操作,事务的开始、提交和回滚,以及AOP在处理事务中的作用。 首先,Spring AOP是Spring框架的一部分,它允许我们定义横切关注点,如日志记录、性能监控或事务管理,这些关注点可以被模块化...

    用Hibernate和Spring开发事务持久层.rar_spring

    以下是一段示例代码,展示了如何在Spring中配置Hibernate事务管理: ```xml &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"&gt; &lt;!-- Hibernate配置 --&gt; ...

    Spring Hibernate 事务处理 详细说明

    3. **Hibernate事务配置:**在Spring中,需要配置Hibernate SessionFactory,并将其注入到需要进行数据库操作的服务中。同时,通过`PlatformTransactionManager`接口(如HibernateTransactionManager)配置事务管理...

    spring3+hibernate4配置声明式事务管理(annotation方式)

    5. **配置Spring和Hibernate**:在Spring 3中,我们需要配置Hibernate SessionFactory,并将其与Spring的事务管理器相结合。这通常通过XML配置文件或Java配置类完成。同时,需要为数据源、SessionFactory和事务管理...

    spring hibernate 事务管理学习笔记(一)

    通过声明式事务管理,我们只需在方法上添加`@Transactional`注解,即可声明该方法在一个事务中执行。 接下来,我们将深入讨论Spring中的声明式事务管理。在Spring配置文件中,我们需要开启事务管理器,并在需要事务...

    Spring+Hibernate注解事务实例

    - 首先,我们需要在Spring配置文件中启用事务管理器,通常是`HibernateTransactionManager`,并配置数据源。 - 然后,启用AOP代理,以便Spring可以在适当的时候处理事务。 2. **配置Hibernate**: - 创建...

    声明式事务控制spring+hibernate集成

    在"声明式事务控制,spring2.5+hibernate3集成源码"中,开发者可以学习如何配置Spring的事务管理器,以及如何在Hibernate的SessionFactory和SessionFactoryBuilder上使用Spring的TransactionProxyFactoryBean来创建...

    spring 结合druid和hibernate使用jta配置分布式事务

    在Spring中配置Druid和Hibernate结合Atomikos进行分布式事务管理的步骤如下: 1. **引入依赖**:在项目中添加Spring、Druid、Hibernate、Atomikos相关的Maven或Gradle依赖。 2. **配置Atomikos**:创建Atomikos的...

    spring mvc+hibernate 实现事务管理(全注解版)

    2. **Hibernate事务**: Hibernate本身也提供了一种事务管理机制,但在Spring环境中,我们通常使用Spring的事务管理器来协调。当@Transactional注解应用于方法上,Spring会在该方法执行前后自动管理事务的开始和结束...

    spring3、 hibernate4 配置声明式事务管理(annotation方式)

    本篇将详细介绍如何在Spring 3和Hibernate 4中配置声明式事务管理,采用注解方式。 一、Spring的事务管理 Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理需要在代码中显式地调用...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    3. 配置Hibernate:在Spring配置文件中,配置Hibernate的SessionFactory,并设置数据库连接信息。同时,需要编写实体类和对应的映射文件(`.hbm.xml`),以便Hibernate能够自动管理数据库表。 4. 配置Struts2:创建...

    Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

    本篇文章将重点讨论如何在Spring框架中集成Hibernate,并探讨编程式事务管理和Spring AOP的声明式事务。 首先,让我们理解Spring与Hibernate的集成。为了整合这两个库,你需要在Spring配置文件中定义Hibernate的...

    struts1.2 + spring2.5 + hibernate3.2框架demo

    在Struts1.2和Hibernate3.2集成中,Spring可以作为它们之间的粘合剂,比如管理Action的生命周期,提供数据访问的事务控制。 再来看Hibernate3.2,它是Java世界中广泛使用的ORM解决方案。通过将Java对象映射到数据库...

Global site tag (gtag.js) - Google Analytics