持久层是适合使用MyBatis的地方。在面向对象的系统中,持久层主要关注对象(或者更精确地说应该是存储在那些对象中的数据)的存取。在企业应用程序中持久层通常用关系数据库系统来存储数据,虽然某些情况下其他持久的数据结构或者介质也可能使用。如某些系统就可能会使用简单的以逗号分隔数据的平板文件或XML文件。考虑到企业应用程序的持久化策略往往具有异质性,因此持久层需要关注的第二个问题就是抽象。持久层应该隐藏关于数据如何被存储以及如何被取出的所有细节。这样的细节决不能暴露 给应用程序的其他层。
为更好地理解这些关注点及其如何被管理,我们将持久层又分为3层:抽象层、持久化框架 以及驱动程序/接口层,如下图。
让我们再仔细研究一下持久层细分后得到的这3层吧。
抽象层
抽象层的目的就在于为持久层提供一致且有意义的接口。它是一组类和方法的集合,这些类和方法是持久层实现细节。抽象层中的方法不能使用特定于实现的参数,也不能返回特定实现专用的类或抛出特定实现专用的异常。一旦合适的抽象层准备就绪,整个持久化方法(包 括持久化API以及存储设施)的改变就不再涉及该抽象层,也不能引起其他任何依赖层的改变。 有许多模式可用于帮助实现一个合适的抽象层,其中最常用的就是DAO模式。包括MyBatis在内的许多框架都为你实现了这个模式。
持久化框架
持久化框架负责与数据库驱动程序(或接口)的交互。持久化框架会提供用于存储、获取、 更新、查找以及管理数据的方法。与抽象层不同,持久化框架通常只针对一类存储设施。例如, 你可能会找到专用于处理XML文件的数据存储的持久化API。但是,对大多数现代企业应用程序 来说,关系数据库通常是存储设施的首选。大多数流行的编程语言都带有用于访问关系数据库的 标准API。JDBC是Java应用程序访问数据库的标准框架
①即“外观模式”,用于为一个子系统定义一组一致的接口。据库的标准持久化框架。这些标准API能够用于任何目的,因此它们的实现非常完备,只是使用 起来非常冗长和繁琐。基于这些原因,人们在标准API的基础上又创建了许多框架,使之功能更加专用,因此也更加强大。MyBatis就是这样的一个持久化框架,它专用于处理任何类型的关系数据库,且以一种一致的方式同时支持Java。
驱动程序/接口层
存储设施可以简单得像一个以逗号分隔数据的平板文件,也可以复杂得像一个价值几百万元的企业数据库服务器。但不论是哪种情况,总有一个软件驱动程序在底层与存储设施通信以交换数据。一些驱动程序,如本地文件系统驱动程序,虽然在功能上是通用的,但与平台相关。你也许永远也不会看到文件I/O驱动程序,但可以肯定的是它一定存在。另一方面,数据库驱动程序总是非常复杂,并且在实现、大小和行为上存在较大的不同。因此就需要由持久化框架来与这些数据库驱动程序通信,从而将它们之间的不同简化并降低到最低点。
系列文章: