第5章 使用数据库
在掌握了Spring容器的基础知识之后,我们要把它们应用到实际的程序之中。一个很好的起点是针对几乎所有企业程序都存在的需求:数据存留。几乎所有程序员都曾经处理过数据库访问,也都知道数据访问具有一些缺陷。我们必须初始化数据访问框架、打开连接、处理各种异常、关闭连接。如果上述任何操作出现了问题,都可能破坏或删除珍贵的公司数据。数据访问的错误处理所带来的后果是很可怕,绝对不是什么好事情。
出于努力把事情做好的一贯追求,我们转向了Spring。Spring提供了一组数组访问框架,集成了多种数据访问技术。无论是通过直接的JDBC、iBATIS或对象关系映射(ORM,比如Hibernate),Spring都能够消除数据存留代码中的麻烦,它会处理底层数据访问工作,让我们把精力集中于数据的管理。
本章将建立RoadRantz程序的存留层(如图5.1所示)。在这个层里,我们面临多个选择,可以使用JDBC、Hibernate、Java存留API(JPA)、iBATIS或任意一个存留框架。幸运的是,Spring支持这些存留机制。
|
| 图5.1 像大多数程序一样,RoadRantz从关系型数 据库存留与获取数据,程序的存留层负责完成全部的数据访问工作 |
在建立RoadRantz程序的存留层的过程中,将介绍Spring如何抽象通用的数据访问函数,从而简化存留代码,让使用JDBC、Hibernate、JPA和iBATIS变得更加容易。在开始讨论数据访问之前,我们简要介绍一下Spring对声明式缓存的支持,它将提高我们程序的性能。
除了要选择存留技术(简单的JDBC或复杂的JPA),Spring的数据访问框架还有很多共同的基础,所以在实际讨论Spring对数据访问的支持之前,我们先来介绍Spring对DAO支持的基础知识。
5.1 Spring的数据访问哲学
从前面章节的内容可以看出,Spring的目标之一是让我们遵循面向对象(OO)原则中的“面向接口编程”原则。Spring的数据访问支持也是如此。
DAO 代表“数据访问对象”,这个名称很好地描述了DAO在程序中的角色。DAO的作用在于提供一种手段来读取和写入数据库,它们应该通过接口的形式来提供这种功能,让程序的其他部分能够访问它们。图5.2展示了设计数据访问层次的正确方式。
从图中可以看出,服务对象通过接口访问DAO。这样做有几点好处。首先,服务对象易于被测试,因为它们没有被耦合到特定的数据访问实现。实际上,我们可以伪造这些数据访问接口的实现,从而在没有连接到数据库的情况下对服务对象进行测试,这样能够明显提高单元测试的效率,并且消除由于不兼容数据造成的测试失败。
另外,数据访问层是以“存留技术不可知”方式被访问的,也就是说,选择存留方法与DAO是隔离的,惟一相关的数据访问方法是通过接口曝露的。这样能够实现灵活的程序设计,能够在改变存留框架时对其他部分的影响达到最小。如果数据访问层的细节被泄漏到程序的其他部分,整个程序就与数据访问层耦合在一起,形成一种呆板的程序设计。
说明:如果在阅读了上面几段文字之后,读者会觉得我在极力把存留层隐藏到接口之后,那么我的目的就达到了。实际上,我相信接口是编写松耦合代码的关键,它们应该用于程序的全部层次,而不只是数据访问层。除此之外,还需要说明另外一点。虽然Spring鼓励使用接口,但Spring并不需要它们。我们不必使用接口,就可以利用Spring把Bean(DAO或其他)直接装配到另一个Bean的属性里。
Spring把数据访问层与程序其他部分相隔离的手段之一是提供了一个统一的异常体系,它被用于Spring的全部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岁技术人的价值.. |
|||