【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 调用存储过程使用
【sping揭秘】18、使用spring访问数据的更多相关文章
- 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)
MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...
- Spring04-SpringEL&Spring JDBC数据访问
一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 ...
- Spring 梳理-数据访问-DB
针对接口编程 DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式.Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口 ...
- 06.深入浅出 Spring Boot - 数据访问之Druid
代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.Druid是什么? 1.Druid是数据库连接池,功能.性能.扩展性方面都算不错 ...
- Spring ( 五 )Spring之数据访问与事务管理
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Spring之数据访问 1.Spring数据访问工程环境搭建 jdbc.properties配置 ...
- Spring Boot数据访问之动态数据源切换之使用注解式AOP优化
在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...
- Spring Boot数据访问之多数据源配置及数据源动态切换
如果一个数据库数据量过大,考虑到分库分表和读写分离需要动态的切换到相应的数据库进行相关操作,这样就会有多个数据源.对于一个数据源的配置在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的 ...
- Spring Boot数据访问之整合Mybatis
在Mybatis整合Spring - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中谈到了Spring和Mybatis整合需要整合的点在哪些方面,需要将Mybatis中数据库连接池等相关对 ...
- Spring Boot数据访问之Druid连接池的配置
在Spring Boot数据访问之数据源自动配置 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中数据源连接池方式缺省(type)情况下默认使用HikariCP,那不缺省如何配置呢?我们 ...
随机推荐
- 简单了解pytorch的forward
import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torch.autogra ...
- Mac Eclipse 配置 SDK Manager Proxy (代理)
默认的下载地址非常慢,可以换成东软的代理. 顶部任务栏中选择SDK Manager -> 偏好设置 : 可以看到下载速度快了很多,出现类很多安装选项: 安装好后,在偏好设置窗口中,选择Clear ...
- Apache ab 压力并发测试工具
当你使用PHP(或其他编程语言)完成一个web程序的开发,并且web程序在Apache服务器上正常运行的时候,你有没有考虑过对你的Apache服务器及部署在其上的web程序进行一些压力测试呢?毕竟,真 ...
- Cannot resolve method
1.问题描述: 本人idea下拉项目,结果impl里的类满屏的红色 2.解决方法 步骤: File --> Settings --> Plugins -->搜索并安装lom即可
- ELK+SpringBoot+Logback离线安装及配置
ELK+SpringBoot+Logback 离线安装及配置 版本 v1.0 编写时间 2018/6/11 编写人 xxx 目录 一. ELK介绍2 二. 安装环境2 三. Elasticse ...
- Python11/26--mysql之视图/触发器/事务/存储过程
视图: 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的时候直接使用即可 2.为什么用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 select * from ...
- Maths | 离散K-L变换/ 主成分分析法
目录 1. 概述 2. K-L变换方法和原理推导 2.1. 向量分解 2.2. 向量估计及其误差 2.3. 寻找最小误差对应的正交向量系 3. K-L变换高效率的本质 4. PCA在编.解码应用上的进 ...
- 06-jQuery的文档操作
之前js中咱们学习了js的DOM操作,也就是所谓的增删改查DOM操作.通过js的DOM的操作,大家也能发现,大量的繁琐代码实现我们想要的效果.那么jQuery的文档操作的API提供了便利的方法供我们操 ...
- Nginx unit 源码安装初体验
Nginx unit 源码安装初体验 上次介绍了从yum的安装方法(https://www.cnblogs.com/wang-li/p/9684040.html),这次将介绍源码安装,目前最新版为1. ...
- sublime将python的运行结果在命令行显示
sublime将python的运行结果在命令行显示 为什么这么折腾? 因为每次查看输出结果都要上下拖动窗口,很烦. 将build system修改为 { "cmd": [" ...