`
tianke66
  • 浏览: 188022 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论
阅读更多
编程式的事务管理
另外,编程式事务提供了TransactionTemplate 模板类,该类可以大大减少事务操作的代码。因此TransactionTemplate 采用Callback 避免让开发者重复书写其打开事务、提交事务及回滚事务等代码,同时TransactionTemplate 无须书写大量的try..catch 块。
HibernateTemplate 必须提供PlatformTransactionManager 实例。该实例既可以在代码中手动设置,也可以使用Spring 的依赖注入。总之,只要获取了PlatformTransactionManager 引用, TransactionTemplate 就可以完成事务操作。
使用TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务。这些步骤都由模板完成。但出现异常时,应通过TransactionStatus 的setRollbackOnly 显式回滚事务。
TransactionTemplate 的execute 方法接收一个TransactionCallback 实例。Callback 也是Spring 的经典设计,用于简化用户操作, TransactionCallback 包含如下方法。
• Object dolnTransaction(TransactionStatus status) 。
该方法的方法体就是事务的执行体。
如果事务的执行体没有返回值,则可以使用TransactionCallbackWithoutResultl类的实例。这是个抽象类,不能直接实例化,只能用于创建匿名内部类。它也是TransactionCallback 接口的子接口,该抽象类包含一个抽象方法:
• void dolnTransactionWithoutResult(TransactionStatus status)该方法与dolnTransaction 的效果非常相似,区别在于该方法没有返回值,即事务执行体无须返回值。
在下面的示例中, PlatformTransactionManager 实例采用适用于Hibernate 的事务管理器来实现类HibernateTransactionManager,该实现类是个局部事务管理器,容器中仅仅部署了该事务管理器bean ,因此应在代码中于动为TransactionTemplate 注入事务管理器bean。下面是Hibernate 局部事务管理的配置文件的源代码: 
<?xml version="1.0" encoding="gb2312"?>
<! -- Spring 配置文件的DTD 定义-->
<!DOCTYPE beans PUBL工C "-//SPRING//DTD BEAN//EN"
''http://www.springfrarnework.org/dtd/sp工rng-beans.dtd"
>
<!-- Spring 配置文件的根元素是beans-->
    
<beans>
        
<!--定义数据源,该bean 的ID 为dataSource-→
        <bean id="dataSource" class="org.springfrarnework.jdbc.datasource.DriverManagerDataSource">
            <!-- 指定数据库驱动
-->
            
<property narne="driverClassNarne"><value>corn.rnysql.jdbc.Driver</value></property>
            
<!-- 指定连接数据库的URL-->
            
<property narne="url"><value>jdbc:rnysql://wonder:3306/j2ee</value></property>
            
<!--root 为数据库的用户名-->
            
<property name="username"><value>root</value></property>
            
<!-- pass 为数据库密码-->
            
<property name="password"><value>pass</value></property>
        
</bean>
        
<!--定义Hibernate 的SessionFactory-->
        
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            
<!--依赖注入数据源,注入上文定义的dataSource-->
            
<property name="dataSource"><ref local="dataSource"/></property>
            
<!--mappingResouces属性用来列出全部映射文件>
            <property name="mappingResources">
                <list>
                    <!--以下用来列出所有的PO 映射文件
-->
                    
<value>lee/MyTest.hbm.xml</value>
                
</list>
            
</property>
        
<!--定义Hibernate 的SessionFactory的属性-->    
            
<property name="hibernateProperties">
                
<props>
                    
<!-- 指定Hibernate 的连接方法-->
                    
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    
<! 不同数据库连接,启动时选择create , update , create-drop-->
                    
<prop key="hibernate.hbm2ddl.auto">update</prop>
                
</props>
            
</property>
        
</bean>
        
<!--配置Hibernate 的事务管理器一〉
        <!--使用HibernateTransactionManager类,该类是PlatformTransactionManager 接口针对采用Hibernate持久化连接的特定实现。
-->
        
<bean id="transactionManager"        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        
<!--HibernateTransactionManager bean 需要依赖注入一个SessionFactory bean 的引用-->
            
<property name="sessionFactory">
                
<ref local="sessionFactory"/>
            
</property>
        
</bean>
</beans>

 

下面是采用TransactionTemplate和HibemateTemplate的事务操作代码:

public class TransactionTest
...{
public static void main(String[] args)
...{
    
//因为并未在web 应用中测试,故需要手动创建Spring 的上下文
    final ApplicationContext ctx = new FileSystemXrnlApplicationContext("bean.xml");
    
//获得Spring 上下文的事务管理器
    PlatformTransactionManager transactionManager=(PlatformTransactionManager)ctx.getBean("transactionManager");
    
final SessionFactory sessionFactory =    (SessionFactory)ctx.getBean("sessionFactory");
    
//以事务管理器实例为参数,创建TransactionTemplate对象
    TransactionTemplate tt = new TransactionTemplate(transactionManager);
    
//设置TransactionTemplate的事务传播属性
    tt. setPropagationBehavior (TransactionDefinition.PROPAGATION_REQUlRED);
    
//执行TransactionTemplate的execute方法,该方法需要TransactionCallback实例
    tt.execute(new TransactionCallbackWithoutResult()
    
//采用TransactionCallbackWithoutResult匿名内部类的形式执行
    protectedvoid dolnTransactionWithoutResult(TransactionStatus ts)
    
try
    
...{
        
//以SessionFactory 实例为参数创建HibernateTemplate
        HibernateTemplate hibernateTemplate =
        
new HibernateTemplate(sessionFactory);
        MyTestpl 
=丑ew MyTest ("Jack");
        
//保存第一个实例
        hibernateTemplate.save(pl);
        
//让下面的数据库操作抛出异常即可看出事务效果。前面的操作也
        
//不会生效
        MyTestp2 = new MyTest ("Jack");
        
//保存第二个实例,可将Person 的name 属性设为标识属性,并
        
//引起主键重复的异常,可看出前一条记录也不会加入数据库中
        hibernateTemplate.save(p2);
    }

    
catch (Exception e)
    
...{
        ts.setRollbackOnly();
        }

        }

        }
);
        }
        }
分享到:
评论
1 楼 yanggcnicai 2012-05-08  
 

相关推荐

    spring 自定义事务管理器,编程式事务,声明式事务@Transactional使用

    在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本教程将深入探讨如何在Spring中实现自定义事务管理器、编程式事务处理以及声明式事务`@Transactional`的使用。 首先,让我们了解事务...

    Spring事务管理Demo

    在Spring框架中,事务管理是核心特性之一,它允许开发者以声明式或编程式的方式处理应用中的事务。Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何...

    fastadmin事务管理系统

    FastAdmin事务管理系统 FastAdmin事务管理系统是一种基于Web的事务管理系统,旨在帮助管理员更好地管理事务流程和数据。下面是该系统的一些重要知识点: 登录 Token 设计 FastAdmin的事务管理系统使用 Token-...

    班级事务管理系统UML

    【班级事务管理系统UML】是针对学校班级日常事务管理而设计的一种软件系统,它通过统一建模语言(Unified Modeling Language,简称UML)进行模型化描述和设计。UML是一种标准化的图形建模语言,广泛应用于软件工程...

    个人日常事务管理系统(java版)

    《个人日常事务管理系统(Java版)详解》 个人日常事务管理系统是现代生活中不可或缺的一部分,它帮助我们有效地组织和管理日常的琐碎事务,确保生活、工作有序进行。本系统采用Java编程语言开发,具备高度的安全性...

    Java Web项目企业事务管理系统源码

    Java Web项目企业事务管理系统源码,详细的代码注释 本系统的开发工具具体如下。 ● 系统开发平台:MyEclipse 6.5。 ● 数据库管理系统软件:MySQL 5.0。 ● 运行平台:Windows 2000/Windows XP/Windows 2003/...

    SSM中事务管理所需的jar包-aspectjweaver

    本文将详细讲解SSM框架中事务管理的概念、AspectJ的作用以及`aspectjweaver.jar`在事务管理中的应用。 1. **事务管理**:事务是数据库操作的基本单元,它确保一组操作要么全部成功,要么全部回滚,遵循ACID(原子性...

    全面分析_Spring_的编程式事务管理及声明式事务管理

    Spring 框架的事务管理是其核心特性之一,它为开发者提供了强大的支持,确保了在多线程和并发环境中数据的一致性和完整性。本教程将深入探讨 Spring 的编程式事务管理和声明式事务管理,帮助你理解这两种方式的差异...

    Spring事务管理开发必备jar包

    在Spring框架中,事务管理是实现业务逻辑时不可或缺的一部分,它确保了数据的一致性和完整性。本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理...

    毕业设计—基于Java的Acme班级事务管理系统.zip

    毕业设计—基于Java的Acme班级事务管理系统,已获老师指导并通过的高分项目。 毕业设计—基于Java的Acme班级事务管理系统,已获老师指导并通过的高分项目。毕业设计—基于Java的Acme班级事务管理系统,已获老师指导...

    全面分析 Spring 的编程式事务管理及声明式事务管理

    本文将全面分析Spring中的编程式事务管理和声明式事务管理,旨在帮助开发者深入理解这两种事务管理方式,并在实际项目中合理选择。 **编程式事务管理** 编程式事务管理是通过代码直接控制事务的开始、提交、回滚等...

    Xml文件配置实现声明式事务管理

    在Spring框架中,声明式事务管理是一种非常重要的特性,它允许开发者通过XML配置或注解来定义事务的边界,而无需在业务代码中显式地管理事务。这种方式极大地提高了代码的可读性和可维护性。本篇文章将深入探讨如何...

    Spring.NET学习笔记16——事务管理Demo源码

    Spring.NET是.NET平台上的一个轻量级开源框架,它借鉴了Java界的Spring框架,并提供了诸如依赖注入、面向切面编程以及事务管理等核心功能。在本篇“Spring.NET学习笔记16——事务管理Demo源码”中,我们将深入探讨...

    事务管理(C#)

    在IT领域,尤其是在数据库编程中,事务管理是一个至关重要的概念。C#作为一种广泛使用的编程语言,提供了丰富的功能来处理事务,确保数据的一致性和完整性。本文将深入探讨C#中的事务管理,包括基本概念、使用场景、...

    Spring JDBC与事务管理

    javaEE 实验三 Spring JDBC与事务管理, 一、实验目的 1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用; 3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握...

    Visual C++源代码 112 如何使用事务管理删除数据库记录

    Visual C++源代码 112 如何使用事务管理删除数据库记录Visual C++源代码 112 如何使用事务管理删除数据库记录Visual C++源代码 112 如何使用事务管理删除数据库记录Visual C++源代码 112 如何使用事务管理删除数据库...

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

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

    事务管理(二)——SQL SERVER的事务管理

    在SQL Server中,事务管理是数据库操作的核心组成部分,它确保数据的一致性和完整性。这篇博客“事务管理(二)——SQL SERVER的事务管理”可能详细介绍了SQL Server如何处理事务,包括事务的特性、隔离级别以及如何...

    JDBC事务管理.docx

    JDBC事务管理是数据库操作的重要组成部分,特别是在多用户并发访问数据库的环境中,保证数据的一致性和完整性至关重要。本文主要探讨了事务的基本概念、ACID原则、数据库并发问题以及解决方案。 首先,事务是数据库...

Global site tag (gtag.js) - Google Analytics