sping揭秘18使用spring访问数据

Posted cutter_point

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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访问数据的主要内容,如果未能解决你的问题,请参考以下文章

sping揭秘2关于spring配置文件

sping揭秘20spring的orm

sping揭秘25Spring远程方案

sping揭秘3Spring容器中bean默认是保持一个实例

sping揭秘23Spring框架内的JNDI支持

sping揭秘4某些无法注册到IOC容器的对象如何交给spring托管