Spring对DAO的支持

  随着持久化技术的持续发展,Spring对多个持久化技术提供了集成支持,包括Hibernate、MyBatis、JPA、JDO;此外,还提供了一个简化JDBC API操作的Spring JDBC框架。Spring面向DAO指定了一个通用的异常体系,屏蔽具体持久化技术的异常,使业务层和具体的持久化技术实现解耦。

Spring的DAO理念

  DAO(Data Access Object)是用于访问数据的对象,DAO不但屏蔽了数据储存的最终介质的不同,也屏蔽了具体的实现技术的不同。

  近几年,各种数据持久化技术得到了长足发展,Hibernate、MyBatis、JPA、JDO成为持久层中常用的实现技术。只要为访问数据定义好DAO接口,并且使用具体技术实现DAO接口的功能,就可以在不同的实现技术间平滑切换。

  图中,在UserDao中定义访问User数据对象的接口方法,业务层通过UserDao操作数据,并使用具体的持久化技术实现UserDao接口方法,这样业务层和具体的持久化技术就实现了解耦。

  提供DAO层的抽象可以带来一些好处:首先,可以很容易地构造模拟对象,方便单元测试的开展;其次,在使用切面时会有更多选择,既可以用JDK动态代理,又可以使用CGLib动态代理。

  Spring本质上希望以统一的方式整合底层的持久化技术,即以统一的方式进行调用及事务管理。由于每种每种持久化技术都有各自的异常体系,所以Spring提供了统一的异常体系,方便定义出和具体实现技术无关的DAO接口,以整合到相同的事务管理体系中。

  


统一的异常体系:

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


统一数据访问模板:

  在使用JDBC数据访问操作中一般按以下流程进行:

    (1)准备资源

    (2)启动事务

    (3)在事务中执行具体的数据访问操作

    (4)提交/回滚事务

    (5)关闭资源,处理异常。

  按照传统方式,在编写任何带事务的数据访问程序时,都要重复上面的代码,而其中只有加粗的部分是和业务相关的,其他都是重复的内容。

  Spring将这个相同的数据访问流程固化到模板类中,并将数据访问中固定和变化的部分分开,同时保证模板线程类是线程安全的,以便多个数据访问线程共享同一个模板实例。这样,只要编写好回调接口,并调用模板类进行数据访问,就可以得到想要的结果:数据访问成功执行,前置和后置的模板化工作也按顺序执行,提高开发效率的同时保证了资源使用的正确性,消除了因忘记释放资源而引起的资源泄露问题。

Spring学习记录4——Spring对DAO的支持的更多相关文章

  1. Spring学习记录3——Spring AOP

    SpringAOP基础 AOP简介: AOP是Aspect Oriented Programing的简称,翻译为“面向切面编程”.它适用于具有横切逻辑的应用场合,如性能检测,访问控制,事务管理及日志记 ...

  2. 我的Spring学习记录(四)

    虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...

  3. 我的Spring学习记录(五)

    在我的Spring学习记录(四)中使用了注解的方式对前面三篇做了总结.而这次,使用了用户登录及注册来对于本人前面四篇做一个应用案例,希望通过这个来对于我们的Spring的使用有一定的了解. 1. 程序 ...

  4. 我的Spring学习记录(二)

    本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...

  5. Spring 学习记录3 ConversionService

    ConversionService与Environment的关系 通过之前的学习(Spring 学习记录2 Environment),我已经Environment主要是负责解析properties和p ...

  6. Spring 学习记录8 初识XmlWebApplicationContext(2)

    主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...

  7. Spring 学习记录6 BeanFactory(2)

    主题 除了Spring 学习记录5 BeanFactory 里写的几个接口外,BeanFactory的实现类还实现了一些其他接口,这篇文章主要介绍这些接口和实现类. 结构 DefaultListabl ...

  8. Spring学习1:Spring基本特性

    http://longliqiang88.github.io/2015/08/14/Spring%E5%AD%A6%E4%B9%A01%EF%BC%9ASpring%E5%9F%BA%E6%9C%AC ...

  9. Spring学习记录(九)---通过工厂方法配置bean

    1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...

随机推荐

  1. 2019-6-5-WPF-使用封装的-SharpDx-控件

    title author date CreateTime categories WPF 使用封装的 SharpDx 控件 lindexi 2019-6-5 9:4:36 +0800 2018-4-24 ...

  2. Educational Codeforces Round 54 (Rated for Div. 2) D Edge Deletion (SPFA + bfs)

    题目大意:给定你一个包含n个点m条边的无向图,现在最多在图中保留k条边,问怎么删除多的边,使得图中良好的节点数最多,求出保留在图中的边的数量和编号. 良好的节点定义为:删除某条边后该点到点1的最短距离 ...

  3. P1042 查找大于等于x的最小元素

    题目描述 现在告诉你一个长度为 \(n\) 的有序数组 \(a_1, a_2, ..., a_n\) ,以及 \(q\) 次询问,每次询问会给你一个数 \(x\) ,对于每次询问,你需要输出数组 \( ...

  4. 1119 机器人走方格 V2 (组合数学)

    M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果.   Input 第1行,2个数M,N,中间用空格隔开 ...

  5. 2018.11.25 齐鲁工业大学ACM-ICPC迎新赛正式赛题解

    整理人:周翔 A 约数个数(难) 解法1:苗学林  解法2:刘少瑞   解法3:刘凯  解法4:董海峥 B Alice And Bob(易) 解法1:周翔  解法2:苗学林  解法3:刘少瑞 C 黑白 ...

  6. ZOJ3537 Cake

    ZOJ3537 Cake 传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3537 题意: 给你几何形状的蛋糕,你需要 ...

  7. 今天IT告告诉我,我电脑上的java jdk属性收费滴!需卸载

    敲着代码,IT突然跑来说,你电脑的Jdk版本属于收费版,目前需要卸载!啊哦...手贱!每次有更新我都更新了,Java要收费老早之前耳闻了,但是俺很少做java,一般都在.Net,所以忽略鸟.. 于是G ...

  8. Visual Studio Team Services使用教程【3】:默认团队权限说明

    2017.4.23之后建议朋友看下面的帖子 TFS2017 & VSTS 实战(繁体中文视频) Visual Studio Team Services(VSTS)与敏捷开发ALM实战关键报告( ...

  9. slim的中间件

    slim中间件的作用简单来说就是过滤数据,request过来的数据要经过中间件才能到达内部,然后内部数据要到达外部的时候,也要经过中间件,正常通过才能到达外部

  10. javascript 闭包的理解(二)

    // 定义一个User构造函数 function User(properties){ //遍历对象属性,确保它作用域正确 for(var i in properties){ (function(whi ...