返回介绍

10.1.2 数据访问模板化

发布于 2024-08-17 00:45:49 字数 2827 浏览 0 评论 0 收藏 0

如果以前有搭乘飞机旅行的经历,你肯定会觉得旅行中很重要的一件事就是将行李从一个地方搬运到另一个地方。这个过程包含多个步骤。当你到达机场时,第一站是到柜台办理行李托运。然后保安人员对其进行安检以确保安全。之后行李将通过行李车转送到飞机上。如果你需要中途转机,行李也要进行中转。当你到达目的地的时候,行李需要从飞机上取下来并放到传送带上。最后,你到行李认领区将其取回。

尽管在这个过程中包含多个步骤,但是涉及到旅客的只有几个。承运人负责推动整个流程。你只会在必要的时候进行参与,其余的过程不必关心。这反映了一个强大的设计模式:模板方法模式。

模板方法定义过程的主要框架。在我们的示例中,整个过程是将行李从出发地运送到目的地。过程本身是固定不变的。处理行李过程中的每个事件都会以同样的方式进行:托运检查、运送到飞机上等等。在这个过程中的某些步骤是固定的——这些步骤每次都是一样的。比如当飞机到达目的地后,所有的行李被取下来并通过传送带运到取行李处。

在某些特定的步骤上,处理过程会将其工作委派给子类来完成一些特定实现的细节。这是过程中变化的部分。例如,处理行李是从乘客在柜台托运行李开始的。这部分的处理往往是在最开始的时候进行,所以它在处理过程中的顺序是固定的。由于每位乘客的行李登记都不一样,所以这个过程的实现是由旅客决定的。按照软件方面的术语来讲,模板方法将过程中与特定实现相关的部分委托给接口,而这个接口的不同实现定义了过程中的具体行为。

这也是Spring在数据访问中所使用的模式。不管我们使用什么样的技术,都需要一些特定的数据访问步骤。例如,我们都需要获取一个到数据存储的连接并在处理完成后释放资源。这都是在数据访问处理过程中的固定步骤,但是每种数据访问方法又会有些不同,我们会查询不同的对象或以不同的方式更新数据,这都是数据访问过程中变化的部分。

Spring将数据访问过程中固定的和可变的部分明确划分为两个不同的类:模板(template)和回调(callback)。模板管理过程中固定的部分,而回调处理自定义的数据访问代码。图10.2展现了这两个类的职责。

图10.2 Spring的数据访问模板类负责通用的数据访问功能。对于应用程序
特定的任务,则会调用自定义的回调对象

如图所示,Spring的模板类处理数据访问的固定部分——事务控制、管理资源以及处理异常。同时,应用程序相关的数据访问——语句、绑定参数以及整理结果集——在回调的实现中处理。事实证明,这是一个优雅的架构,因为你只需关心自己的数据访问逻辑即可。

针对不同的持久化平台,Spring提供了多个可选的模板。如果直接使用JDBC,那你可以选择JdbcTemplate。如果你希望使用对象关系映射框架,那HibernateTemplate或JpaTemplate可能会更适合你。表10.2列出了Spring所提供的所有数据访问模板及其用途。

表10.2 Spring提供的数据访问模板,分别适用于不同的持久化机制

模板类(org.springframework.*)

用  途

jca.cci.core.CciTemplate

JCA CCI连接

jdbc.core.JdbcTemplate

JDBC连接

jdbc.core.namedparam.NamedParameterJdbcTemplate

支持命名参数的JDBC连接

jdbc.core.simple.SimpleJdbcTemplate

通过Java 5简化后的JDBC连接(Spring 3.1中已经废弃)

orm.hibernate3.HibernateTemplate

Hibernate 3.x以上的Session

orm.ibatis.SqlMapClientTemplate

iBATIS SqlMap客户端

orm.jdo.JdoTemplate

Java数据对象(Java Data Object)实现

orm.jpa.JpaTemplate

Java持久化API的实体管理器

Spring为多种持久化框架提供了支持,这里没有那么多的篇幅在本章对其进行一一介绍。因此,我会关注于我认为最为实用的持久化方案,这也是读者最可能用到的。

在本章中,我们将会从基础的JDBC访问开始,因为这是从数据库中读取和写入数据的最基本方式。在第11章中,我们将会了解Hibernate和JPA,这是最流行的基于POJO的ORM方案。我们会在第12章结束Spring持久化的话题,在这一章中,将会看到Spring Data项目是如何让Spring支持无模式数据的。

但首先要说明的是Spring所支持的大多数持久化功能都依赖于数据源。因此,在声明模板和Repository之前,我们需要在Spring中配置一个数据源用来连接数据库。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文