`

Spring整合Hibernate加事务的处理

阅读更多

要在Spring中使用事务,先要在beans.xml中,把命名空间的名字和Location定义好,然后加一句话<tx:annotation-driven transaction-manager="txManager" />,接下来就是通过SessionFactory来获得txManager(最好查API),然后就可以通过AOP来处理事务(增强等)

 

beans.xml文件的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/tx 
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<context:annotation-config />
	<context:component-scan base-package="com.lbx" />
	<tx:annotation-driven transaction-manager="txManager" />

	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<value>classpath:jdbc.properties</value>
		</property>
	</bean>
	
	<bean id="dataSource" destroy-method="close"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		
		<!-- 
		<property name="annotatedClasses">
			<list>
				<value>com.lbx.model.User</value>
				<value>com.lbx.model.Log</value>
			</list>
		</property>
		 -->
		 <property name="packagesToScan">
			<list>
				<value>com.lbx.model</value>
			</list>
		</property>
		
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
				<prop key="hibernate.show_sql">true</prop>
			</props>
		</property>
	</bean>

	<bean id="logDAO" class="com.lbx.dao.impl.LogDAOImpl">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<bean id="u" class="com.lbx.dao.impl.UserDAOImpl">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<bean id="userService" class="com.lbx.service.UserService">
		<property name="userDAO" ref="u"></property>
		<property name="logDAO" ref="logDAO"></property>
	</bean>

	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
			<tx:method name="get*" read-only="true" />
			<tx:method name="add*" propagation="REQUIRED" />
		</tx:attributes>
	</tx:advice>

	<aop:config>
		<aop:pointcut id="fooServiceOperation"
			expression="execution(public * com.lbx.service..*.*(..))" />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation" />
	</aop:config>

	<bean id="txManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

</beans>

 

 

此事务处理的是在Service层,add*的所有方法,看下面一段代码:

package com.lbx.service;

import com.lbx.dao.LogDAO;
import com.lbx.dao.UserDAO;
import com.lbx.model.Log;
import com.lbx.model.User;


public class UserService {
	
	private UserDAO userDAO;  
	private LogDAO logDAO;
	
	public void add(User user) {
		userDAO.save(user);
		Log log = new Log();
		log.setMsg("a user saved!!!!!");
		logDAO.save(log);
	}
	public UserDAO getUserDAO() {
		return userDAO;
	}
	
	public void setUserDAO( UserDAO userDAO) {
		this.userDAO = userDAO;
	}
	
	public LogDAO getLogDAO() {
		return logDAO;
	}
	public void setLogDAO(LogDAO logDAO) {
		this.logDAO = logDAO;
	}
	
}

 

 

中有一个add(User user)的方法,但是此方法在增加User的情况下还要增加一个Log,而且要同步,然而此程序的事务又加在此方法上,一旦User的增加或者Log的增加出现了异常什么的,就都会回滚,这样就保证了事务的正常。

 

分享到:
评论

相关推荐

    spring整合hibernate实现事务处理

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

    spring整合hibernate示例代码

    标题"spring整合hibernate示例代码"提示我们,我们将讨论如何在实际项目中结合这两个框架。Spring可以帮助管理Hibernate的SessionFactory和Transaction,提供声明式事务管理,以及通过AOP(面向切面编程)实现更灵活...

    Spring整合Hibernate.jar

    标题"Spring整合Hibernate.jar"意味着我们将讨论如何将这两个强大的框架集成在一起,以便在Spring管理的环境中使用Hibernate进行数据库操作。这通常涉及到以下步骤和知识点: 1. **引入依赖**:首先,你需要在项目...

    Spring+hibernate整合源代码

    8. **异常处理**:整合过程中,可能会遇到 Hibernate 和 Spring 的异常,如 ConstraintViolationException、DataAccessException 等,需要适当地捕获和处理这些异常,提供友好的错误信息。 9. **测试**:编写单元...

    Spring与Hibernate整合

    SSH整合,即Struts、Spring和Hibernate的集成,是Java Web开发中常见的一种技术栈,它能有效地解决MVC模式下的业务逻辑处理和数据持久化问题。本篇将详细介绍Spring3.3与Hibernate2.1整合的过程及其相关知识点。 ...

    spring整合hibernate的jar包

    标题中的“spring整合hibernate的jar包”指的是在Java Web开发中,Spring框架与Hibernate持久层框架的集成。这两个框架结合使用可以提供强大的数据访问和业务逻辑处理能力。Spring作为一个全面的轻量级框架,提供了...

    Spring整合Hibernate案例

    在本文中,我们将深入探讨如何将Spring框架与Hibernate ORM(对象关系映射)框架整合,以便在实际项目中实现高效、灵活的数据访问层。Spring以其强大的依赖注入和管理能力,结合Hibernate的数据库操作功能,可以构建...

    spring整合hibernate所用相关jar包

    本文将深入探讨Spring整合Hibernate的相关知识点,适合初学者入门。 首先,我们需要理解Spring的核心理念。Spring框架提供了一个轻量级的容器,它能够管理应用程序中的对象,包括初始化、配置和依赖注入。AOP则是...

    spring整合hibernate实例

    这篇名为"spring整合hibernate实例"的内容,显然是关于如何将这两个框架协同工作,构建一个高效、灵活的Java应用的教程。在整合过程中,我们将探讨以下几个关键知识点: 1. **Spring的ApplicationContext**: 这是...

    Spring Hibernate 事务处理 详细说明

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

    spring mvc + spring + hibernate 全注解整合开发视频教程 11

    在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第11部分,重点可能是建立在前几部分的基础之上,进一步深化对这三个核心技术的理解和实践。 ...

    Spring3整合Hibernate4测试Demo

    **Spring3整合Hibernate4测试Demo** 在Java Web开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全面的后端应用程序框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及其他...

    Spring,Hibernate整合源码

    Spring与Hibernate的整合主要体现在以下几个方面: 1. **数据源配置**:Spring可以通过其DataSource Bean管理数据库连接,提供对多个数据源的支持,以及事务管理的能力。 2. **SessionFactory的管理**:Spring可以...

    使用spring整合hibernate和struts时所要用到的所有jar包

    - **模型-视图-控制器(MVC)设计模式**:Struts2负责控制器,Spring处理业务逻辑,Hibernate处理数据持久化,三者共同实现MVC架构。 综上所述,整合Spring、Hibernate和Struts可以构建出强大且灵活的Java Web应用...

    Spring整合HIbernate

    《Spring整合Hibernate实战指南》 在Java开发领域,Spring框架以其强大的依赖注入、AOP(面向切面编程)以及丰富的模块支持,成为了企业级应用开发的首选。而Hibernate作为持久层框架,以其对象关系映射(ORM)能力...

    hibernate与spring整合demo

    将Hibernate与Spring整合可以充分利用两者的优点,提高开发效率并降低复杂性。 一、Hibernate概述 Hibernate是Java世界中领先的ORM框架之一,它允许开发者用Java对象来操作数据库记录,而无需编写SQL语句。通过配置...

    spring与hibernate的整合

    总结来说,Spring 与 Hibernate 的整合主要涉及 SessionFactory 的配置、DAO 类的实现以及事务管理。通过 Spring 的 IoC 容器管理数据访问资源,可以使应用更加解耦,同时利用 Spring 的事务管理功能,可以简化事务...

    spring+hibernate整合demo

    在这个整合过程中,Spring会管理Hibernate SessionFactory的生命周期,并通过AOP代理来处理事务。当需要执行数据库操作时,Spring会自动开启和提交/回滚事务,简化了开发者的代码。 总的来说,"spring+hibernate...

    spring整合hibernate的所需jar包

    3. **jasperreports-1.3.4.jar**:这是一款报告生成库,与Spring整合时,可以帮助我们生成复杂的数据报表,但在这个场景下可能并非必需。 4. **itext-1.3.jar**:iText是一个用于生成PDF文档的库,jasperreports...

    SpringAOP整合Hibernate并使用事务

    下面我们将详细讲解如何进行Spring AOP整合Hibernate以及如何在其中使用事务。 1. **Spring AOP简介** 面向切面编程(AOP)是Spring框架的核心特性之一,它允许开发者定义“切面”,这些切面可以包含业务逻辑的...

Global site tag (gtag.js) - Google Analytics