zoukankan      html  css  js  c++  java
  • 【sping揭秘】18、使用spring访问数据

     

     

     

    统一的数据访问异常层次体系

    基于基本的jdbc封装dao层访问接口,封装不论是访问,csv文件,关系数据库(RDBMS),ladp都可以封装成一个个DAO对象来进行访问

    抛出问题

    可是对于我们忽略了一个问题,那就是当DAO层发生异常的时候,我们是否应该在dao层进行处理,如果是,那么有个问题,客户端调用方法的时候,怎么知道发生了什么异常,客户端对于访问数据层发生的事情是不可预知的,所以我们需要在DAO中吧异常抛出,也就是在类上throw Exception

    但是上面还有一个问题,dao是我们封装访问数据的,可是对客户端来说,访问上面数据它并不关心,但是dao层需要对不同的数据层封装,如果是jdbc,那么异常可能是 SQLException,但是如果是ldap,那可能抛出NamingException,如果我们更换了数据访问对象,那么客户端又要对第二个异常进行处理,客户端代码还得改!!!

    解决问题:

    用runtimeexception对异常进行统一封装,然后抛出这一个类型的异常,这里还需要对异常进行异常的分类转译

    也就是根据不同的数据库,提取信息,然后封装好抛出,当然一个runtimeexception肯定是不够用的,那么我们可以设计子类,排分出不同的异常对象子类

    我们看看spring的异常体系

     

    这里是spring的包装异常,我们观察一下它对应的dao的封装

     

     

    JDBC API 的最佳实践

    Spring有2种实践

    1、 使用jdbctemplate为核心,基于Template的jdbc使用

    2、 在jdbctemplate基础上构建基于操作对象的JDBC

    首先使用jdbctemplate之前,我们先学习一下模板方法模式

    http://www.cnblogs.com/cutter-point/p/5263492.html

    spring中jdbctemplate类关系

     

    Jdbctemplate中提供的基于五种查询的方式

     

     

     

    基本就是五种:

    ConnectionCallback 直接使用connection

    StatementCallback  使用对外公开Statement对象

    String sql 直接使用sql,这个没什么好说的吧。。。

    PreparedStatementCallback 暴露PreparedStatement对象使用

    CallableStatementCallback  调用存储过程使用

  • 相关阅读:
    类的加载
    java经典面试题(转)
    I/O NIO 2
    【转】Impala和Hive的关系
    【转】工作站和服务器的区别
    JAVA之线程
    【转】Linux中vim的粘贴复制快捷键的使用
    【转】Zookeeper集群为什么要是单数
    【转】Impala常见错误
    hadoop命令工作常用
  • 原文地址:https://www.cnblogs.com/cutter-point/p/9147712.html
Copyright © 2011-2022 走看看