数据访问的模板化

来源:互联网 发布:淘宝怎么更改实名认证 编辑:程序博客网 时间:2024/06/07 02:18

数据访问的模板化

       大多数人都有乘飞机旅行的经历,都会明白旅行中最重要的组成部分之一是把行李从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


原创粉丝点击