首页 > 代码库 > spring数据持久化

spring数据持久化

1、spring提供了一组数据访问框架,集成了多种数据访问技术。支持JDBC、ibatis、hibernate、jpa等持久化框架。

2、spring的数据访问哲学

  spring的目标之一就是允许开发人员在开发应用程序时,能够遵循面向对象原则中的“针对接口编程”。spring对数据访问的支持也不例外。DAO是数据访问对象(data access object)的缩写,DAO提供了数据读取和写入到数据库中的一种方式。他们以接口的方式发布功能,应用程序的其他部分可以通过接口来进行访问。如图:

技术分享

服务对象通过接口来访问DAO,它使得服务对象易于测试,因为他们不再与特定的数据访问实现绑定在一起。此外,数据访问层是以持久化技术无关的方式来进行访问的。持久化方式的选择独立于DAO,只有相关的数据访问方法通过接口来进行发布。这可以实现灵活的设计并使得切换持久化框架对应用程序其他部分所带来的影响最小。如果将数据访问层的实现细节渗透到应用程序的其他部分中,那么整个应用程序将与数据访问层耦合在一起,从而导致僵化的设计。

3、spring的数据访问异常体系

  JDBC访问数据会强制捕获SQLException异常,JDBC对于所有的数据访问问题都会抛出SQLException异常,但是这个异常却没有告诉你哪里出错了以及如何进行处理,不能再catch块中解决问题。一些持久化框架提供了相对丰富的异常体系。分别对应于特定的数据访问问题。这样就可以针对想处理的异常编写catch代码块。

  不同于JDBC,spring提供了多个数据访问异常,分别描述了它们抛出时所对应的问题。如图:

技术分享

尽管spring的异常体系比JDBC简单的SQLException丰富得多,但它并没有与特定的持久化方式相关联。这意味着我们可以用spring抛出一致的异常,而不用关心所选择的持久化方案。这有助于我们将所有持久化机制与数据访问隔离开来。spring认为触发异常的很多问题是不能在catch代码块中修复的。spring使用了非检查型异常,而不是强制开发人员编写catch代码块。这把是否要捕获异常的权力留给了开发人员。

4、数据访问模板化

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

技术分享

  针对不同的持久化平台,spring提供了多个可选的模板。如图:

技术分享

使用数据访问模板只需将其配置为spring上下文中的bean并将织入到应用程序的DAO中。或者,你还可以使用spring的DAO支持类进一步简化应用程序的DAO配置。尽管直接织入模板是不错的选择,但是spring还提供了一系列便利的DAO基类,这些基类可以用于管理模板。

5、使用DAO支持类

  数据访问模板并不是spring数据访问框架的全部。每个模板提供了一些简便的方法,使我们不必创建明确的回调实现,从而简化了数据访问。另外,基于模板-回调设计,spring提供了DAO支持类,而将业务自己的DAO类作为它的子类。如图:

技术分享

  spring不仅提供了多个数据模板实现类,还为每种模板提供了对应的DAO支持类。如图:

技术分享

6、配置数据源

  不管选择哪一种spring DAO的支持方式,都需要配置一个数据源的引用。spring提供了在spring上下文中配置数据源bean的多种方式,包括:

  1)通过JDBC驱动程序定义的数据源;

  2)通过JNDI查找的数据源;

  3)连接池的数据源;

  

spring数据持久化