zoukankan      html  css  js  c++  java
  • [Spring3.x] 第 8 章 Spring 对 DAO 的支持

    第八章 Spring 对 DAO 的支持
     Spring 对持久化技术提供的支持 : Hibernate, iBatis, JDO, JPA, TopLink
     Spring 通过 Spring JDBC 框架对 JDBC API 进行简化
     Spring 面向 DAO 制定了通用的异常体系,屏蔽具体持久化技术的异常
     Spring 提供了模板类简化各种持久化技术的使用
     总结 : 持久化支持, JDBC简化,模板类 + 通用异常
    8.1 Spring 的 DAO 理念
     DAO层抽象的好处是 : (1), 方便构造模拟对象,有利于单元测试
                       (2), 使用切面,可以使用 JDK 动态代理,CGLib动态代理
     Spring 本质希望以统一的方式整合底层的持久化技术:以统一的方式进行调用及事务管理,避免让具体的实现侵入到业务层代码。
    8.2 统一的异常体系
     Spring 提供了与实现技术无关的,面向DAO层语义的异常体系,并通过转换器将不同持久化技术的异常转换成Spring异常。
     8.2.1 Spring 的 DAO 异常体系
      Spring 的异常体系都是建立在运行期异常的基础上,开发者可以根据需要捕捉感兴趣的异常
         Spring 在 org.springframework.dao 包中提供了优雅的 DAO 异常体系,这些异常都继承 DataAccessException
         而 DataAccessException extends NestedRuntimeException
         框架自动处理异常,(如发生运行期异常时自动回滚事务)
     8.2.2 JDBC 的异常转换器
         传统的 JDBC API 在发生几乎所有的数据操作问题都抛出相同的 SQLException,细节封装在异常属性中。
         e.getErrorCode(), e.getSQLState() Spring 框架替我们将 SQLException 翻译成 Spring DAO 异常体系。
     8.2.3 异常转换器
         Spring 也支持 iBatis ORM 持久化技术,由于 iBatis 抛出的异常 和 JDBC 的 SQLException 异常相同。
    8.3 统一数据访问模板
       (1), 我们为什么要时不时下下馆子 : 因为我们只 需要, 点菜 --> 用餐 --> 买单。幕后的烹饪制作,刷锅等不关心。
    后幕后,餐馆拥有一个服务的模板,模板中定义的流程可以用于应付所有的顾客。
        对比 :
          我们在直接使用具体的持久化技术时,我们大多需要处理整个流程,并没有享受餐馆用餐式的便捷。
          Spring 为支持的持久化技术分别提供了模板访问的方式,降低了使用各种持久化技术的难度,可以大幅提供开发效率。
     8.3.1 使用模板和回调机制
      JDBC 繁琐弊端 : 1, 准备资源 2, 启动事务 3, 在事务中执行具体数据访问操作 4, 提交/回滚事务 5,关闭资源,处理异常
      Spring 将这个数据访问流程固化到模板类中,将数据访问中固定(Dao模板)和变化(Dao回调)的部分分开,同时保证模板类是线程安全的。
     8.3.2 Spring 为不同持久化技术所提供的模板类
         ORM 持久化技术                      模板类
             JDBC            org.springframework.jdbc.core.JdbcTemplate
            iBatis           org.springframework.orm.ibatis.SqlMapClientTemplate

         如果我们直接使用模板类,一般都需要在 DAO 中定义一个模板对象并提供数据资源,Spring为每一个持久化技术都提供了支持类,。
         我们只需要扩展这些支持类就可以直接编写实际的数据访问逻辑。

         
         不同持久化技术的支持类
           ORM 持久化技术                   支持类
               JDBC                   org.springframework.jdbc.core.JdbcDaoSupport
              iBatis                  org.springframework.orm.ibatis.SqlMapClientTemplate
      * 这些支持类都继承于 dao.support.DaoSupport 类,DaoSupport 实现了 InitializingBean 接口,在 afterPropertiesSet() 接口方法中检查模板对象和数据源是否被正确设置,否则将抛出异常。
    8.4 数据源
        持久化技术,需要拥有数据连接,Spring 中数据连接通过数据源获得。Spring 中 数据源不依赖于容器了,便于单元测试。
        Mysql 的 8 小时问题。 284P 解决。
      8.4.1 配置一个数据源
        DBCP 数据源, DBCP 是一个依赖 Jakarta commons-pool 对象池机制的数据库连接池。
        <bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
        BasicDataSource 提供了 close() 方法关闭数据源,所以必须设定 destroy-method="close",以便容器关闭,数据源关闭。
      8.4.2 Spring 数据源的实现类
        DriverManagerDataSource, 位于 org.springframework.jdbc.datasource 包中。
        不需要额外的依赖包,也没有池子的概念。
    8.5 小结
     (1), Spring 支持目前大多数常用的持久化技术  
     (2), Spring 定义了一套面向 DAO 层的异常体系
     (3), 并为各种持久化技术提供了异常转化器
      不管采用什么持久化技术,访问数据的流程是相对固定的。Spring 将数据访问流程划分为 固定 和 变化两部分。
      模板的方式定义好流程,回调接口将变化的部分开放出来,留给开发者自行定义,Spring为简化模板类的使用,提供了支持类,支持类不但包含 数据访问模板,还包含数据源或会话等内容。通过扩展支持类定义自己的数据访问类是最简单的数据访问方式。
      
      c3p0、dbcp、tomcat jdbc pool
  • 相关阅读:
    C语言函数手册—函数分类列表
    HTTP协议详解(一直在用可是这篇太好了转一下)
    Substance风格实例大全javaswing皮肤风格大全(原)
    Component creation must be done on Event Dispatch Thread错误解决方法
    用开源Look&Feel (Substance)写 漂亮的Swing应用程序
    Swift翻译之-关于Swift
    Swift翻译之-Swift语法入门 Swift语法介绍
    Swift语言简介+快速上手
    JDK各个版本的新特性jdk1.5-jdk8
    5个常用Java代码混淆器 助你保护你的代码
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786498.html
Copyright © 2011-2022 走看看