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

基于基本的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  调用存储过程使用

【sping揭秘】18、使用spring访问数据的更多相关文章

  1. 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)

    MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...

  2. Spring04-SpringEL&Spring JDBC数据访问

    一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 ...

  3. Spring 梳理-数据访问-DB

    针对接口编程 DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式.Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口 ...

  4. 06.深入浅出 Spring Boot - 数据访问之Druid

    代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.Druid是什么? 1.Druid是数据库连接池,功能.性能.扩展性方面都算不错 ...

  5. Spring ( 五 )Spring之数据访问与事务管理

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.Spring之数据访问 1.Spring数据访问工程环境搭建 ​ jdbc.properties配置 ...

  6. Spring Boot数据访问之动态数据源切换之使用注解式AOP优化

    在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...

  7. Spring Boot数据访问之多数据源配置及数据源动态切换

    如果一个数据库数据量过大,考虑到分库分表和读写分离需要动态的切换到相应的数据库进行相关操作,这样就会有多个数据源.对于一个数据源的配置在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的 ...

  8. Spring Boot数据访问之整合Mybatis

    在Mybatis整合Spring - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中谈到了Spring和Mybatis整合需要整合的点在哪些方面,需要将Mybatis中数据库连接池等相关对 ...

  9. Spring Boot数据访问之Druid连接池的配置

    在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中数据源连接池方式缺省(type)情况下默认使用HikariCP,那不缺省如何配置呢?我们 ...

随机推荐

  1. Jenkins之定时任务

    H的用法: H 10 * * *  ,这里H不是小时的意思,符号H(代表“Hash”,后面用“散列”代替) 符号H 在一定范围内可被认为是一个随机值,但实际上它是任务名称的一个散列而不是随机函数,每个 ...

  2. mysql查询语句中自定义变量(转)

    转:http://blog.sina.com.cn/s/blog_1512521570102wrfl.htmlselect cost,@a:=@a+1 from testone,(select @a: ...

  3. css3属性蒙版:-webkit-mask

    -webkit-mask: 蒙版,用于将固定形状设置透明度,形状可以是一个div,也可以是一张图片: 用法:-webkit-mask: radial-gradient(transparent 50px ...

  4. Vim中YouCompleteMe插件安装

    背景 YouCompleteMe需要使用GCC进行编译,然而Centos 6.7默认的GCC版本太低,所以需要使用devtools-2,用来安装多个版本GCC手动编译安装GCC的坑简直不要太多(类似于 ...

  5. 【bug小记】应用跳转白屏

    tv端项目 测试那边反馈我们的应用跳转到别的应用,再跳转回来会出现白屏的情况. 其实这个原因很简单,就是系统内存不足了把我们的app进程销毁了 所以再回到我们的应用的时候需要重新绘制,而这个" ...

  6. Job for ssh.service failed because the control process exited with error code.......

    转载自:https://blog.csdn.net/woailyoo0000/article/details/79782986 笔者最近更新ubuntu系统,在更新之前设置了证书信任文件,重启以后ss ...

  7. Linux Curl命令

    一.简介 linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具.   二.安装 wget http://c ...

  8. Base64加密转换原理与代码实现

    一.Base64实现转换原理 它是用64个可打印字符表示二进制所有数据方法.由于2的6次方等于64,所以可以用每6个位元(bit)为一个单元,对应某个可打印字符.我们知道三个字节(byte)有24个位 ...

  9. python基础之Day7part1集合

    一.集合 1.定义 s=set() 2.特点 每个元素必须是不可变类型,但集合本身是可变类型的,有add和remove等功能 3.用途 去重(原理:for循环if判断元素是否已存在,不存在则追加) 关 ...

  10. mui 页面提示:Unable to preventDefault inside passive

    页面提示: 点击该事件:页面提示:[8mui.min.js:7 [Intervention] Unable to preventDefault inside passive event listene ...