- 浏览: 205840 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
wangxin0ldrs:
Exception in thread "main& ...
Javamail发送邮件的简单实例 -
Drakedog:
现在知道是jar包里的,但是好像不是org.apache.cr ...
AJAX大量数据xml格式提交 -
Drakedog:
XmlDocument 这个是要自己写 吗?
AJAX大量数据xml格式提交 -
fashion_518:
楼主是高手吗?
SSH2的包 -
cloverprince:
阿,动态语言的优雅。正在为java+DOM的罗嗦发愁的路过。
解析XML
编程式事务提供了 TransactionTemplate 模板类,该类可以大大减少事务操作的代码。因此 TransactionTemplate 采用 Callback 避免让开发者重复书写其打开事务、提交事务及回滚事务等代码,同时 TransactionTemplate 无须书写大量的 t可...catch 块。HibernateTemplate 必须提供 PlatformTransactionManager 实例。该实例既可以在代码中手动设置,也可以使用 Spring 的依赖注入。总之,只要获取了PlatformTransactionManager 引用, TransactionTemplate 就可以完成事务操作。
使用 TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务。这些步骤都由模板完成。但出现异常时,应通过 TransactionStatus 的 setRollbackOnly 显式回攘事务。
TransactionTemplate 的 execute 方法接收一个 TransactionCallback 实例。 Callback 也是 Spring 的经典设计,用于简化用户操作,TransactionCallback 包含如下方法。
ObjectdolnTransaction(TransactionStatusstatus)。
该方法的方法体就是事务的执行体。
如果事务的执行体没有返回值,则可以使用TransactionCallbackWithoutResult1类的实例。这是个抽象类,不能直接实例化,只能用于创建匿名内部类。它也是TransactionCallback接口的子接口,该抽象类包含一个抽象方法:
voiddolnTransactionWithoutResult(TransactionStatusstatus)
该方法与 dolnTransaction 的效果非常相似,区别在于该方法没有返回值,即事务执行体无须返回值。
在下面的示例中,PlatformTransactionManager实例采用适用于 Hibernate 的事务管理器来实现类 HibernateTransactionManager,该实现类是个局部事务管理器,容器中仅仅部署了该事务管理器 bean,因此应在代码中于动为 TransactionTemplate 注入事务管理器bean。下面是 Hibernate 局部事务管理的配置文件的源代码:
下面是采用TransactionTemplate和 HibemateTemplate的事务操作代码:
查看数据库的 mytable 表,该表中没有任何记录(如果没有采用事务,第一条记录应该可以进去。而两次保存记录放在 doInTransactionWithoutResult 方法中执行),因为该方法的方法体具有事务性,该方法的数据库操作要么全部生效,要么全部失效。由于第二条记录违反了数据库的主键约束,因此,记录全部失效。
使用 TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务。这些步骤都由模板完成。但出现异常时,应通过 TransactionStatus 的 setRollbackOnly 显式回攘事务。
TransactionTemplate 的 execute 方法接收一个 TransactionCallback 实例。 Callback 也是 Spring 的经典设计,用于简化用户操作,TransactionCallback 包含如下方法。
ObjectdolnTransaction(TransactionStatusstatus)。
该方法的方法体就是事务的执行体。
如果事务的执行体没有返回值,则可以使用TransactionCallbackWithoutResult1类的实例。这是个抽象类,不能直接实例化,只能用于创建匿名内部类。它也是TransactionCallback接口的子接口,该抽象类包含一个抽象方法:
voiddolnTransactionWithoutResult(TransactionStatusstatus)
该方法与 dolnTransaction 的效果非常相似,区别在于该方法没有返回值,即事务执行体无须返回值。
在下面的示例中,PlatformTransactionManager实例采用适用于 Hibernate 的事务管理器来实现类 HibernateTransactionManager,该实现类是个局部事务管理器,容器中仅仅部署了该事务管理器 bean,因此应在代码中于动为 TransactionTemplate 注入事务管理器bean。下面是 Hibernate 局部事务管理的配置文件的源代码:
<?xml version="1.0" encoding="gb2312"?> <!--Spring配置文件的DTD定义--> <!DOCTYPE beansPUBLiC"-//SPRING//DTD BEAN//EN"''http://www.springfrarnework.org/dtd/spring-beans.dtd"> <!--Spring配置文件的根元素是beans--> <beans> <!--定义数据源,该bean的 ID 为 dataSource--> <bean id="dataSource" class="org.springfrarnework.jdbc.datasource.DriverManagerDataSource"> <!--指定数据库驱动--> <property name="driverClassNarne"><value>corn.rnysql.jdbc.Driver</value> </property> <!--指定连接数据库的URL--> <property name="url"><vaiue>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(newTransactionCallbackWithoutResult() //采用 TransactionCallbackWithoutResult匿名内部类的形式执行 protectedvoid dolnTransactionWithoutResult(TransactionStatus ts)try{ //以 SessionFactory 实例为参数创建 HibernateTemplateHibernateTemplate hibernateTemplate=new HibernateTemplate(sessionFactory); MyTestpl=newMyTest ("Jack"); //保存第一个实例 hibernateTemplate.save(pl); //让下面的数据库操作抛出异常即可看出事务效果。前面的操作也不会生效 MyTestp2=new MyTest ("Jack"); //保存第二个实例,可将Person的 name属性设为标识属性,并引起主键重复的异常,可看出前一条记录也不会加入数据库中 hibernateTemplate.save(p2); }catch (Exception e){ ts.setRollbackOnly();.,)}
查看数据库的 mytable 表,该表中没有任何记录(如果没有采用事务,第一条记录应该可以进去。而两次保存记录放在 doInTransactionWithoutResult 方法中执行),因为该方法的方法体具有事务性,该方法的数据库操作要么全部生效,要么全部失效。由于第二条记录违反了数据库的主键约束,因此,记录全部失效。
发表评论
-
hibernate 如何实现延迟加载
2011-03-25 15:26 865延迟加载: ... -
基本O/R映射(二)--Hibernate快速参考
2011-03-24 13:14 1031composite-id <composite-id ... -
基本O/R映射(一)--Hibernate快速参考
2011-03-24 13:12 1092hibernate-3.2/doc/reference/en/ ... -
Spring实例化Bean的三种方式
2010-11-19 15:53 875本文向您介绍Spring实例化Bean的三种方式,包括xml配 ... -
lazy-init属性和预实例化
2010-11-19 14:20 1066最近在负责一个大项目 ... -
可以取得页面参数的 ServletRequestAware接口
2010-11-09 14:05 1010为了在Action处理过程中可以访问到当前请求HttpServ ... -
DAO中的异常处理
2010-06-29 18:57 1153只有在可以合理地预期调用者可以处理异常时,DAO 接口中的方法 ... -
在spring中使用log4j
2010-06-28 14:59 874Log4j是Apache的一个开放源代码项目,通过使用Log4 ... -
struts2中extends='struts-default' 理解
2010-06-25 10:11 3214struts2的struts.xml中package是否必须要 ... -
struts配置的 <package name="tutorial" extends="struts-default">
2010-06-25 10:00 2085<package name="tutorial ... -
Struts2如何使用Spring插件完成整合
2010-06-24 17:51 1502Struts2与Spring的整合,对于程序员很有利,他能使程 ... -
几种获得spring里注册Bean的方法 转载
2010-06-23 14:52 968/** * 获取类型为requiredType的对 ... -
ClassPathXmlApplicationContext 和FileSystemXmlApplicationContext的区别
2010-06-23 10:26 1471classpath: 前缀是不需要的, 默认就是指项目的cla ... -
spring+hibernate架构中Dao访问数据库的几种方法
2010-06-07 13:06 943在spring+hibernate的架构中,访问数据库有几种方 ... -
好文章
2010-06-07 11:29 719http://wangjie0503.blog.sohu.co ... -
【Spring.事务.异常回滚】请问Spring的声明式事务发生异常时的处理方式。
2010-06-04 15:52 1723http://www.iteye.com/problems/1 ... -
Dao层(hibernate实现)的异常是在Dao层类内处理还是抛到上一层(Service业务层)
2010-06-04 13:58 3448Dao层(hibernate实现)的异 ... -
SSH2的包
2010-06-01 16:41 1283你可能把不要的包也导进去了或是哪个必需的包没导入,以下是必需包 ... -
Struts2 获取request对象的方法
2010-05-31 16:27 1295方法一: 在Action中的代码:Map request ... -
申明式事务和OpenSessionInView
2010-05-25 16:05 827Write operations are not allowe ...
相关推荐
本文将全面分析Spring中的编程式事务管理和声明式事务管理,旨在帮助开发者深入理解这两种事务管理方式,并在实际项目中合理选择。 **编程式事务管理** 编程式事务管理是通过代码直接控制事务的开始、提交、回滚等...
本篇文章将深入探讨Spring中的两种主要事务管理方式:编程式事务管理和声明式事务管理。 1. 编程式事务管理: 编程式事务管理允许开发者直接在代码中控制事务的开始、提交、回滚等操作。这种方式具有较高的灵活性,...
本教程将深入探讨 Spring 的编程式事务管理和声明式事务管理,帮助你理解这两种方式的差异与应用场景。 首先,编程式事务管理依赖于编程的方式显式地控制事务的开始、提交、回滚等操作。它通过实现 `...
全面分析 Spring 的编程式事务管理与声明式事务管理 本文将从 Spring 的事务管理入手,深入讲解编程式事务管理和声明式事务管理的实现机制和原理。通过本文的学习,您将能够理解 Spring 事务管理的本质,并灵活运用...
Spring框架提供了两种主要的事务管理方式:声明式事务管理和编程式事务管理。本资料着重于“编程式事务管理”,这是一种通过代码直接控制事务开始、提交、回滚等操作的方式。 在Spring中,编程式事务管理通常使用...
本文将详细解释 Spring 的编程式事务管理及声明式事务管理,帮助读者理清思路。 事务管理的重要性 事务管理对于企业应用至关重要。它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏...
Spring提供了两种主要的事务管理方式:声明式事务管理和编程式事务管理。本篇文章将聚焦于编程式事务管理,特别是如何通过`TransactionTemplate`进行事务控制。 1. **Spring编程式事务管理**: 编程式事务管理允许...
详解Spring学习之编程式事务管理 Spring框架中提供了两种事务管理方式:编程式事务管理和声明式事务管理。在本篇文章中,我们主要介绍编程式事务管理。 什么是编程式事务管理? 编程式事务管理是指通过编写代码...
编程式事务管理(处理方案).md
在Java应用中,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 **编程式事务管理** 是通过调用`PlatformTransactionManager`接口提供的方法来手动控制事务的开始、提交、回滚。例如,你...
在本篇“Spring学习笔记(十五)——编程式事务例子”中,我们将深入探讨Spring框架中的编程式事务管理。在实际开发中,我们通常使用声明式事务管理,它基于AOP(面向切面编程)来简化事务处理。然而,有时为了更细...
在本篇"Spring学习之八--Hibernate编程式事务"中,我们将探讨如何在Spring框架中使用Hibernate进行编程式事务管理。编程式事务管理是相对于声明式事务管理的一种方式,它允许开发者通过代码来显式控制事务的开始、...
本篇文章将重点讨论如何在Spring框架中集成Hibernate,并探讨编程式事务管理和Spring AOP的声明式事务。 首先,让我们理解Spring与Hibernate的集成。为了整合这两个库,你需要在Spring配置文件中定义Hibernate的...
编程式事务管理允许开发者通过代码来精确控制事务的边界,而`TransactionTemplate`就是Spring为编程式事务管理提供的一种便捷工具。 `TransactionTemplate`类是Spring框架的`org.springframework.transaction....
它分为两种主要类型:编程式事务管理和声明式事务管理。这两种方式各有特点,适用于不同的场景。 首先,编程式事务管理是通过编写代码来控制事务的开始、提交、回滚以及异常处理。在Spring中,我们通常使用`...
编程式事务管理需要在代码中手动调用`TransactionTemplate`或`PlatformTransactionManager`的API来开始、提交、回滚事务,而声明式事务管理则更倾向于面向切面编程(AOP)的方式,通过配置来定义事务的边界。...
Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 **编程式事务管理**是通过编写代码来显式地管理事务的开始、提交、回滚等操作。在Spring中,可以使用PlatformTransactionManager接口的实现...