【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  调用存储过程使用

猜你喜欢

转载自www.cnblogs.com/cutter-point/p/9147712.html