第十章 Spring对DAO的支持

10.1 DAO的理念

DAO(data access object) 是用于访问数据库的对象,虽然大多数情况下将数据保存在数据库中,但这并不是唯一的选择,也可以将数据存储到文件中或LDAP中。DAO不但屏蔽了数据存储的最终介质不同,也屏蔽了具体的实现技术。

10.2 统一的异常体系

统一的异常系统是整合不同的持久化技术的关键。Spring提供了一套和实现技术无关的、面向DAO定义的异常体系,并通过转化器将不同持久化技术的异常转化为Spring的异常。

10.2.1 DAO异常体系

Spring的异常体系都是建立在运行期异常的基础上的,开发者可以根据需要捕捉感兴趣的异常。
Spring的异常体系都继承于DataAccessException,而DataAccessException本身继承于NestedRuntimeException,NestedRuntimeException异常以嵌套的方式封装源异常。DAO的异常体系不会丢失源异常。

异常说明
CleanupFailureDataAccessExceptionDAO操作失败执行,但在数据库资源释放时发生异常,如关闭Connection时发生异常等
ConcurrencyFailureException表示在进行并发数据库操作时发生异常,如乐观锁无法获取、悲观锁无法获取、死锁引发发失败等。
DataAccessResourceFailureException访问数据源时失败,如无法获取数据连接,无法获取Hibernate会话等。
DataRerievalFailureException获取数据失败,如找不到对应主键的数据,使用了错误的列索引等。
DataSourceLockupFailureException无法从JNDI中查找到数据源
DataIntegerViolationException当数据操作违反了数据一致性限制时抛出的一场,如插入重复的主键,引用不存在的外键等。
InvaildDataAccessApiUsageException不正确的调用某一持久化技术时抛出的异常。
InvalidDataAccessResourceUsageException在数据库访问时使用了不正确的方法所抛出的一场,如SQL语句错误抛出该类异常。
PermissionDeniedDataAccessException数据库访问时由于权限不足引发的异常。
UncategorizedDataAccessException其他未分类的异常都归到该异常中
10.2.2 JDBC异常类转化器

传统的JDBC API在发生几乎所有的数据库操作问题时都会抛出相同的SQLException,它将异常的细节信息封装在异常属性中。
SQLException拥有两个代表异常的具体原因的属性:错误代码和SQL状态码。Spring根据错误码和SQL状态信息将SQLException译成Spring DAO的异常体系对应的异常。

10.3 统一数据访问模板

Spring为支持持久化技术分别提供了模板访问的方式,降低了使用各种持久化技术的难度,因此可以大幅度的提高开发效率。

10.3.1 使用模板和回调机制

Spring 将这个相同的数据库访问流程固化到模板类中,并将数据库访问中固定和变化的部分分开,同时保证模板类是线程安全的,以便多个数据访问线程共享同一个模板实例。固定部分在模板类中已经准备好,而变化的部分通过回调接口开放出来,用于定义具体的数据访问和结果返回的操作。

10.4数据源

不管采用何种持久化技术,都必须拥有数据连接。在Spring中,数据连接是通过数据源获得的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值