数据访问的模板化
来源:互联网 发布:淘宝怎么更改实名认证 编辑:程序博客网 时间: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
- 数据访问的模板化
- CodeSmith数据访问模板
- 数据访问中的模板控件
- CodeSmith模板(数据访问类)
- DotNet企业级架构实战之4—Spring.net下的nHibernate数据访问模板
- .net企业级架构实战之4——Spring.net下的nHibernate数据访问模板
- C#的数据访问
- 数据访问的代码
- 数据访问的封装
- CvMat的数据访问
- 访问数据的方法
- CvMat的数据访问
- SpringBoot的数据访问
- 禁止访问dede的模板目录templets,防止盗窃模板
- [转].net企业级架构实战之4——Spring.net下的nHibernate数据访问模板
- .net企业级架构实战之4——Spring.net下的nHibernate数据访问模板[1]
- .net企业级架构实战之4——Spring.net下的nHibernate数据访问模板[2]
- ASP.NET访问模板页的对象
- C++:关于sizeof
- Pointers on C——10 Structures and Unions.1
- JavaScript 中call、apply、bind学习
- Pointers on C——10 Structures and Unions.2
- 【balanced-binary-tree】
- 数据访问的模板化
- 修复dubbo注解与spring aop冲突的问题
- android、ios、windows等平台回声消除的解决方案
- Pointers on C——10 Structures and Unions.3
- network programming重点回顾
- java核心技术卷 之创建框架
- 如何查看文件夹被什么程序使用
- 排序算法梳理
- Python基础笔记