`
Luob.
  • 浏览: 1589980 次
  • 来自: 上海
社区版块
存档分类
最新评论

Spring配置Hibernate事务

阅读更多
为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事务有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>

第一种方式,利用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事务的核心:
分享到:
评论

相关推荐

    spring配置hibernate事务

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

    在Spring中配置Hibernate事务

    在Spring框架中集成和配置Hibernate事务管理是企业级Java应用中的常见实践,它能提供高效且灵活的事务处理策略。Spring作为一款强大的依赖注入(DI)和面向切面编程(AOP)容器,能够轻松地管理和协调不同数据访问...

    spring整合hibernate实现事务处理

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

    Spring Hibernate事务实例

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

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

    本项目是关于如何使用Spring MVC与Hibernate结合来实现事务管理的实践教程,通过MyEclipse自动生成所需的包和配置文件。这里将详细讲解这一过程,以及涉及到的关键知识点。 首先,Spring MVC作为Spring框架的一部分...

    Spring与Hibernate集成

    1. **配置Hibernate**: 首先,我们需要在Spring配置文件中定义`hibernate.cfg.xml`,配置数据库连接信息,如JDBC驱动、URL、用户名和密码。同时,这里还需要指定Hibernate的实体类和映射文件。 2. **配置...

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

    在Spring配置文件中,我们需要开启事务管理器,并在需要事务控制的Service层方法上添加`@Transactional`注解。这个注解允许我们指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)、隔离级别(如READ_COMMITTED、...

    Spring+Hibernate注解事务实例

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

    memcache也spring,hibernate的配置

    5. **Spring3.0的配置**:Spring3.0引入了许多新特性,如AOP表达式、注解驱动的事务管理、JSR-303/JSR-349验证支持等。在配置Memcached时,Spring可以用来管理缓存策略,例如使用`@Cacheable`和`@CacheEvict`注解来...

    Spring Hibernate 事务处理 详细说明

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

    springmvc+spring+hibernate

    5. **配置Hibernate**:在applicationContext.xml中配置Hibernate的SessionFactory,包括实体管理工厂、实体类扫描路径、数据库连接信息、方言等。还可以配置Hibernate的缓存策略。 6. **编写实体类**:根据数据库...

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

    4. **集成Hibernate**:配置Hibernate的SessionFactory,并将其注入到业务层的DAO(数据访问对象)中,用于数据库操作。 在项目实践中,`bankmoney`可能代表了一个银行资金管理的模块,可能包含相关的DAO、Service...

    Spring-hibernate结合使用全xml配置方式

    然后,配置Hibernate的SessionFactory。这涉及到Hibernate的配置属性,如实体扫描路径、方言、缓存策略等。示例配置如下: ```xml &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate4....

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

    最后,我们可以在测试类中使用`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`注解来加载Spring配置,并进行事务相关的测试。 总的来说,Spring 3和Hibernate 4结合使用声明式事务管理,使得...

    Spring+hibernate整合源代码

    Spring 和 Hibernate 是两个非常重要的 Java 开发框架,它们在企业级应用开发中有着广泛的应用。Spring 是一个全面的后端应用程序框架,提供了依赖注入、面向切面编程、数据访问、事务管理等多种功能。Hibernate 则...

    Spring与Hibernate整合

    然后,需要在Spring配置文件中配置HibernateTransactionManager,以便Spring可以管理Hibernate的事务。这一步是实现Spring的事务管理功能,确保数据操作的原子性和一致性。 在业务层,可以使用Spring的@Autowired...

    spring hibernate mysql 事务实例

    在IT行业中,数据库事务是确保数据一致性的重要机制,特别是在分布式系统和多层架构中,如Spring、Hibernate和MySQL的组合。本实例将深入探讨如何在这样的环境中实现事务管理。 Spring框架以其强大的依赖注入和AOP...

    现有Mysql数据库,写Spring + Hibernate的配置文件

    Spring作为一个全面的开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等核心功能,而Hibernate则是一个优秀的对象关系映射(ORM)框架,使得Java开发者可以更加方便地操作数据库。在本案例中,我们将探讨...

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

    为了整合这两个库,你需要在Spring配置文件中定义Hibernate的SessionFactory,并配置数据源。Spring通过`LocalSessionFactoryBean`来创建SessionFactory,它会读取Hibernate的配置文件(如hibernate.cfg.xml),并...

    spring+hibernate

    此外,还可以在Spring配置文件中手动定义PlatformTransactionManager bean,如HibernateTransactionManager,来实现对Hibernate事务的控制。 Spring事务管理主要有两种模式:编程式事务管理和声明式事务管理。编程...

Global site tag (gtag.js) - Google Analytics