快速业务通道

Spring事务管理高级应用难点剖析: 第2部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13

Spring事务管理高级应用难点剖析: 第2部分

时间:2012-04-26 IBM 陈雄华

联合军种作战的混乱

Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特 色,各有千秋。像 Hibernate 是非常优秀的 ORM 实现方案,但对底层 SQL 的控制不太方便; 而 iBatis 则通过模板化技术让您方便地控制 SQL,但没有 Hibernate 那样高的开发效率;自 由度最高的当然是直接使用 Spring JDBC 莫属了,但是它也是最底层的,灵活的代价是代码的 繁复。很难说哪种数据访问技术是最优秀的,只有在某种特定的场景下,才能给出答案。所以 在一个应用中,往往采用多个数据访问技术:一般是两种,一种采用 ORM 技术框架,而另一种 采用偏 JDBC 的底层技术,两者珠联璧合,形成联合军种,共同御敌。

但是,这种联合 军种如何应对事务管理的问题呢?我们知道 Spring 为每种数据访问技术提供了相应的事务管 理器,难道需要分别为它们配置对应的事务管理器吗?它们到底是如何协作,如何工作的呢? 这些层出不穷的问题往往压制了开发人员使用联合军种的想法。

其实,在这个问题上, 我们低估了 Spring 事务管理的能力。如果您采用了一个高端 ORM 技术(Hibernate,JPA, JDO),同时采用一个 JDBC 技术(Spring JDBC,iBatis),由于前者的会话(Session)是对 后者连接(Connection)的封装,Spring 会“足够智能地”在同一个事务线程让前 者的会话封装后者的连接。所以,我们只要直接采用前者的事务管理器就可以了。下表给出了 混合数据访问技术所对应的事务管理器:

表 1. 混合数据访问技术的事务管理器

混合数据访问技术 事务管理器
ORM 技 术框架 JDBC 技术框架
Hibernate Spring JDBC 或 iBatis HibernateTransactionManager
JPA Spring JDBC 或 iBatis JpaTransactionManager
JDO Spring JDBC 或 iBatis JdoTransactionManager

由于一般不会 出现同时使用多个 ORM 框架的情况(如 Hibernate + JPA),我们不拟对此命题展开论述,只 重点研究 ORM 框架 + JDBC 框架的情况。Hibernate + Spring JDBC 可能是被使用得最多的组 合,下面我们通过实例观察事务管理的运作情况。

清单 1.User.java:使用了注解声明 的实体类

import javax.persistence.Entity; import javax.persistence.Table; import javax.persistence.Column; import javax.persistence.Id; import  java.io.Serializable; @Entity  @Table(name="T_USER") public  class User implements Serializable{   @Id   @Column(name =  "USER_NAME")   private String userName;   private String  password;   private int score;  @Column(name =  "LAST_LOGON_TIME")   private long lastLogonTime = 0; }

Spring事务管理高级应用难点剖析: 第2部分(2)

时间:2012-04-26 IBM 陈雄华

再来看下 UserService 的关键代码:

清单 2.UserService.java:使用 Hibernate 数据访问技术

package user.mixdao; import  org.springframework.beans.factory.annotation.Autowired; import  org.springframework.jdbc.core.JdbcTemplate; import  org.springframework.context.ApplicationContext; import  org.springframework.context.support.ClassPathXmlApplicationContext; import  org.springframework.s

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号