`

spring事务处理demo

 
阅读更多

1.事务是什么及为什么使用事务

   

    事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。

 

例如:

    我要修改一个旅游产品,首先是根据productId查出对应的团队游产品,然后根据productId查询出对应的行程信息表并进行修改,保存;然后再根据productId查出价格表,再进行修改,保存;当以上的两个动作我都完成之后(并且成功完成),这个产品修改就算完成了!假如其中之一修改失败,即产品修改失败!这个时候我就可以用到事务去控制了,要么成功(commit),要么失败(roolback)。

 

2.demo

    spring-hibernate.xml:

   

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" abstract="false"     //sessionFactory注入hibernatePropertities,mappingResources,以及lobHandler
          singleton="true" lazy-init="default" autowire="default" dependency-check="default">
        <property name="dataSource">
            <ref local="dataSource"/>
        </property>
        <!--  -->
        <property name="hibernateProperties">
            <props>
	        <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.cache.use_minimal_puts">false</prop>
                <prop key="hibernate.cache.use_query_cache">false</prop>
                <prop key="hibernate.cache.use_second_level_cache">false</prop>   
                <prop key="hibernate.connection.SetBigStringTryClob">true</prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>
                <value>com/joey/framework/persistence/MenuItem.hbm.xml</value>
                <value>com/joey/security/persistence/mapping/LogHistory.hbm.xml</value>
                <value>com/ctol/mango/pge/productmanager/persistence/mapping/ScheduledFlight.hbm.xml</value>
            </list>
        </property>
        <property name="lobHandler">
        	<ref bean="oracleLobHandler" />
       	</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"          // transactionManager注入了sessionFactory,HibernateTransactionManager 在后面博客会讲到       
         abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
        <property name="sessionFactory">
            <ref local="sessionFactory"/>
        </property>
</bean>
 
<bean id="baseTransactionProxy" abstract="true"
          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" singleton="true"     // TransactionProxyFactoryBean为事务代理,注入了tracsactionManager和transactionAttributes
          lazy-init="default" autowire="default" dependency-check="default">
        <property name="transactionManager">
            <ref bean="transactionManager"/>
        </property>
        <property name="transactionAttributes">
            <props>
                <!-- <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>-->
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
</bean>

    spring-factory.xml:

 

<bean id="providerFacade" parent="baseTransactionProxy" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
        <property name="target">
            <bean class="com.ctol.mango.pge.productmanager.business.facade.impl.ProviderFacadeImpl" parent="facade" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
                <property name="providerDAO">
                    <ref bean="providerDAO"/>
                </property>
            </bean>
        </property>
</bean>

   则ProviderFacadeImpl这个实现类已使用了事务控制!

  

   一般spring事务管理放在service层,因为dao层一般都是比较细粒度话的操作,而service可以是比较复杂的增删改查!并且用spring管理事务,只需要在配置文件配置即可,无需在service层代码中每次都显式调用,节省了代码量!

 

诸如:
session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
……
tx.commit();


    或者:

    Connection dbconn = getConnection();  
    dbconn.setAutoCommit(false);  
    ……  
    dbconn.commit();  

 

 

分享到:
评论

相关推荐

    Spring事务管理Demo

    在Spring事务管理Demo中,通常会包含以下几个步骤: 1. 配置事务管理器:在Spring的XML配置文件中,根据数据库类型(如JDBC、Hibernate、MyBatis等)配置相应的事务管理器。 2. 开启事务:使用`@Transactional`注解...

    Spring事务小demo

    这个名为"Spring事务小demo"的项目提供了一个实践示例,帮助开发者了解Spring事务处理的基本概念和用法。 首先,Spring事务管理是Spring框架的核心特性之一,它允许我们以声明式或编程式的方式管理事务。声明式事务...

    Spring事务传播Demo.zip

    总结来说,"Spring事务传播Demo"是一个用于学习和演示Spring事务管理和传播行为的实例,通过分析和实践这个Demo,开发者可以更好地理解和掌握Spring在处理事务时的复杂情况,提升在实际项目中的应用能力。...

    spring 事务传播 demo

    总之,“spring 事务传播 demo”将展示如何利用Spring的事务传播特性来处理复杂的业务场景,帮助开发者更好地理解和运用这一强大的工具。通过学习和实践这个示例,你将能够掌握在多层方法调用中如何优雅地管理和协调...

    SPRING事务机制DEMO

    Spring事务机制是Java开发中非常重要的一个概念,它在企业级应用中扮演着核心角色,确保数据的一致性和完整性。Spring提供了多种事务管理方式,包括编程式事务管理和声明式事务管理。在这篇DEMO中,我们将重点探讨...

    spring声明式事务处理demo

    首先,我们要理解Spring事务管理的两种主要方式:编程式事务管理和声明式事务管理。编程式事务管理通常通过AOP(面向切面编程)的TransactionTemplate或PlatformTransactionManager接口直接在代码中控制事务,而声明...

    spring 事务传播与隔离级别DEMO

    本DEMO主要探讨的是Spring事务的传播行为和隔离级别,这些概念对于理解和优化数据库操作至关重要。让我们深入理解这些概念及其实际应用。 首先,我们来谈谈事务的传播行为。在Spring中,当一个方法被另一个具有事务...

    Spring Cloud微服务事务处理Demo

    在这个"Spring Cloud微服务事务处理Demo"中,我们将探讨如何在微服务环境中解决事务一致性问题。 首先,我们来看核心组件——Spring Boot。Spring Boot是基于Spring Framework的快速开发框架,它简化了Spring应用...

    spring五种事务配置demo

    测试spring事务管理 搭建了ssh框架的web工程 本工程用到的数据库表很简单 user(id, name) 可自行创建 本例所有的事务放在service层进行管理,方法中间抛出运行时异常以测试是否回滚 Spring配置文件中关于事务...

    springmvc spring hibernate整合Demo

    这些接口通常由Spring管理,通过代理模式实现事务控制。 6. 编写Controller:定义处理HTTP请求的Controller类,注入DAO,调用其方法处理业务逻辑。Controller将请求转发给相应的Service,Service再调用DAO完成...

    spring+quartz demo

    Spring 可以通过 AOP 将 Job 实例注入到 Spring 容器中,从而利用 Spring 的特性,如事务管理、依赖注入等。 5. **启动 Scheduler**: 在 Spring 初始化时,`SchedulerFactoryBean` 会根据配置启动 Scheduler。...

    spring3实例Demo

    总的来说,Spring3实例Demo是一个全面展示Spring框架功能的实践案例,它涵盖了从基础的bean管理到复杂的AOP和事务处理,再到数据访问和Web应用开发。通过学习和实践这个Demo,你可以加深对Spring的理解,提升开发...

    Spring Data JPA Demo

    Spring Data JPA 是一个强大的框架,它简化了与Java Persistence API (JPA) 的交互...同时,了解Spring Data JPA 如何与Hibernate 配合工作,以及如何处理复杂的查询和事务管理,这些都是在实际开发中非常重要的技能。

    spring注解事务实现demo

    不过,这并不意味着在只读事务中不能执行更新操作,只是提示Spring可以优化事务处理。 6. **异常回滚规则** 默认情况下,如果在`@Transactional`方法中抛出未检查异常(继承自`RuntimeException`的异常)或者`...

    spring深入学习demo

    通过这些Demo,我们可以深入理解Spring框架在实际项目中的应用,包括如何设计模块化的服务,如何优雅地处理依赖,以及如何利用AOP进行事务管理和日志记录。同时,这些示例也能帮助开发者更好地掌握Spring Boot的快速...

    spring-ws demo

    4. **Spring集成**:Spring框架的集成使得Spring-WS可以利用Spring的依赖注入、事务管理、安全控制等特性。这使得服务的开发、测试和部署更加方便。 5. **消息处理**:Spring-WS支持多种消息处理模型,如基于...

    spring的小demo

    在本项目"spring的小demo"中,我们主要探讨的是如何将Spring框架与iBATIS(现在称为MyBatis)进行整合,以实现高效、灵活的数据访问。Spring是Java开发中的一个核心框架,它提供了依赖注入(DI)、面向切面编程(AOP...

    spring-demo

    AOP主要用于处理系统中的横切关注点,比如日志记录、事务管理等,避免了这些通用功能对业务代码的侵入。 在与MyBatis的整合方面,"14spring4_mybatis03"、"13spring4_mybatis02"、"12spring4_mybatis"这些文件可能...

    spring完整demo实例

    在这个"spring完整demo实例"中,我们将深入探讨Spring的主要功能和如何在实际项目中应用它们。 首先,Spring的核心特性——依赖注入,是它简化软件开发的关键。依赖注入允许我们解耦组件,使得代码更加模块化,易于...

    spring mybatis 简单 demo

    在这个“spring mybatis 简单 demo”中,我们可以学习如何将这两个强大的框架整合起来,实现数据访问功能。 首先,我们需要了解Spring的核心概念。Spring框架主要由依赖注入(Dependency Injection,DI)和面向切面...

Global site tag (gtag.js) - Google Analytics