- 作者简介
- 内容提要
- 关于本书
- 路线图
- 代码规范与下载
- 作者在线
- 封面插图简介
- 前言
- 译者序
- 致谢
- 第1部分 Spring 的核心
- 第1章 Spring 之旅
- 第2章 装配 Bean
- 第3章 高级装配
- 第4章 面向切面的 Spring
- 第2部分 Web 中的 Spring
- 第5章 构建 Spring Web 应用程序
- 第6章 渲染 Web 视图
- 第7章 Spring MVC 的高级技术
- 第8章 使用 Spring Web Flow
- 第9章 保护 Web 应用
- 第3部分 后端中的 Spring
- 第10章 通过 Spring 和 JDBC 征服数据库
- 第11章 使用对象-关系映射持久化数据
- 第12章 使用 NoSQL 数据库
- 第13章 缓存数据
- 第14章 保护方法应用
- 第4部分 Spring 集成
- 第15章 使用远程服务
- 第16章 使用 Spring MVC 创建 REST API
- 第17章 Spring消息
- 第18章 使用 WebSocket 和 STOMP 实现消息功能
- 第19章 使用 Spring 发送 Email
- 第20章 使用 JMX 管理 Spring Bean
- 第21章 借助 Spring Boot 简化 Spring 开发
10.1.2 数据访问模板化
如果以前有搭乘飞机旅行的经历,你肯定会觉得旅行中很重要的一件事就是将行李从一个地方搬运到另一个地方。这个过程包含多个步骤。当你到达机场时,第一站是到柜台办理行李托运。然后保安人员对其进行安检以确保安全。之后行李将通过行李车转送到飞机上。如果你需要中途转机,行李也要进行中转。当你到达目的地的时候,行李需要从飞机上取下来并放到传送带上。最后,你到行李认领区将其取回。
尽管在这个过程中包含多个步骤,但是涉及到旅客的只有几个。承运人负责推动整个流程。你只会在必要的时候进行参与,其余的过程不必关心。这反映了一个强大的设计模式:模板方法模式。
模板方法定义过程的主要框架。在我们的示例中,整个过程是将行李从出发地运送到目的地。过程本身是固定不变的。处理行李过程中的每个事件都会以同样的方式进行:托运检查、运送到飞机上等等。在这个过程中的某些步骤是固定的——这些步骤每次都是一样的。比如当飞机到达目的地后,所有的行李被取下来并通过传送带运到取行李处。
在某些特定的步骤上,处理过程会将其工作委派给子类来完成一些特定实现的细节。这是过程中变化的部分。例如,处理行李是从乘客在柜台托运行李开始的。这部分的处理往往是在最开始的时候进行,所以它在处理过程中的顺序是固定的。由于每位乘客的行李登记都不一样,所以这个过程的实现是由旅客决定的。按照软件方面的术语来讲,模板方法将过程中与特定实现相关的部分委托给接口,而这个接口的不同实现定义了过程中的具体行为。
这也是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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论