zoukankan      html  css  js  c++  java
  • 第八章 Spring 对 DAO 的支持 《Spring3.x》

    第八章 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为简化模板类的使用,提供了支持类,支持类不但包含 数据访问模板,还包含数据源或会话等内容。通过扩展支持类定义自己的数据访问类是最简单的数据访问方式。
  • 相关阅读:
    蓝桥网试题 java 基础练习 特殊的数字
    蓝桥网试题 java 基础练习 杨辉三角形
    蓝桥网试题 java 基础练习 查找整数
    蓝桥网试题 java 基础练习 数列特征
    蓝桥网试题 java 基础练习 字母图形
    蓝桥网试题 java 基础练习 01字串
    蓝桥网试题 java 基础练习 回文数
    蓝桥网试题 java 基础练习 特殊回文数
    Using text search in Web page with Sikuli
    each of which 用法
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786504.html
Copyright © 2011-2022 走看看