5.1.2 数据访问的模板化
大多数人都有乘飞机旅行的经历,都会明白旅行中最重要的组成部分之一是把行李从A点运输到B点。这个过程包含多个步骤。当我们到达机场时,首先要做的是在柜台登记行李,然后安检会对其进行扫描以确保安全,之后行李会通过行李车转移到飞机上。如果需要中途转机,行李也会有同样的旅程。在到达目的地时,行李会被从飞机上取下来,放到行李传送带上,最后由旅客在取行李处把它取走。
虽然这其中包含多个步骤,但与旅客相关的只有几个。运输公司负责完成这个过程,旅客只在必要时介入,不必关心其他的步骤。这反映出一种强大的设计模式:“模板方法”模式。
模板方法定义过程的构架。在前面的范例里,整个过程是把行李从出发地转移到目的地。这个过程本身是固定的,不会改变。处理行李过程的系列事件每次都是以同样方式发生的:登记、装载到飞机上等等。过程中的某些步骤也是固定的,也就是说这些步骤每次都是一样的。比如当飞机到达目的地时,所有行李都会被卸载、放到行李传送带上以转移到取行李处。
然而在某些步骤上,这个过程把工作委托给子类以实现某种特定的细节,这是过程中会变化的部分。举例来说,行李处理过程是从旅客在柜台登记行李开始的,这个步骤总是在过程起始时发生,所以它在过程中的次序是固定的。由于每个旅客的行李登记是不同的,所以这个步骤的实现是由旅客决定的。用软件术语来说,模板方法把过程中特定部分的实现委托给接口,对接口的不同实现定义了步骤的具体实现。
Spring使用同样的模式来处理数据访问。无论什么样的技术,都需要一定的数据访问步骤。举例来说,我们总是需要获得与数据存储的一个连接,在完成操作之后也总是要释放资源,这些都是数据访问过程中的固定步骤。但是我们所编写的每个数据访问方法是有所不同的,比如会对不同的对象进行查询,以不同的方式更新数据,这些是数据访问过程中变化的部分。
Spring把数据访问过程中固定与变化的部分明确地划分为两类:模板和回调。模板管理过程中的固定部分,而回调处理自定义的数据访问代码。图5.3说明了这些类的职责。
|
| 图5.3 Spring的DAO模板类负责通用的数据访问职能, 对于特定任务则调用自定义DAO回调对象。 |
正如图5.3所示,Spring的模板类处理数据访问的固定部分―控制事务、管理资源和处理异常。同时,数据处理的异常部分,也就是属于每个程序的部分,包括创建语句、绑定参数、整理结果,是在回调实现中处理的。这为实际应用构建了一个漂亮的框架,让开发人员只需关心自己的数据访问逻辑。
Spring提供了多个模板,针对于不同的存留平台。如果使用的是直接JDBC,可以使用JdbcTemplate。如果想使用某种对象/关系映射框架,适合的模板是HibernateTemplate或JpaTemplate。表5.2列出了Spring全部的数据访问模板及其用途。
表5.2 Spring提供了多个数据访问模板,分别适用于不同的存留机制
|
模 板 类 |
用 途 |
|
jca.cci.core.CciTemplate |
JCA CCI连接 |
|
jdbc.core.JdbcTemplate |
JDBC连接 |
|
jdbc.core.nameparam.NameParameterJdbcTemplate |
支持命名参数的JDBC连接 |
|
jdbc.core.simple.SimpleJdbcTemplate |
JDBC连接,用Java 5概念进行了简化 |
|
orm.hibernate.HibernateTemplate |
Hibernate 2.x会话 |
|
orm.hibernate3.HibernateTemplate |
Hibernate 3.x会话 |
|
orm.ibatis.SqlMapClientTemplate |
iBATIS SqlMap客户 |
|
orm.jdo.JdoTemplate |
Java数据对象实现 |
|
orm.jpa.JpaTemplate |
Java存储API实体管理器 |
|
orm.toplink.TopLinkTemplate |
Oracle的TopLink |
后面将会介绍到,使用数据访问模板只需要把它配置为Spring上下文里的Bean,然后把它织入到程序的DAO。或者,还可以利用Spring的DAO支持类进一步简化程序DAO的配置。虽然直接织入模板就很不错,但Spring也提供了一组方便的DAO基类,可以用于管理模板。下面来看一看这些基于模板的DAO类是如何工作的。
| 回书目 上一节 下一节 |
|
||||
| · 浏览器的战国时代 · CCNA认证考试Pass必备 · 无线网络环境 · 无线路由器故障处理 · 解析35岁技术人的价值.. · 无线重中之重:安全问题 · 无线局域网基本知识 · 家庭无线局域网 |
· 华为七千人主动辞职规.. · 微软出价446亿美元收购.. · 虚拟化的“赤壁之战” · 802.11n:下一代的无线.. · 脉冲无线电uwb专题 · AIX操作系统管理应用 · 云计算时代来临 · 求职必杀技 决战面试官 |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · 无线网状网(MESH) · Windows远程桌面应用 · C#技术开发指南 |
· Apache技术专题 · Windows集群服务应用 · C#技术开发指南 · 文档格式标准开战 OOXM.. · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 解析35岁技术人的价值.. |
|||