Spring学习记录4——Spring对DAO的支持
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将这个相同的数据访问流程固化到模板类中,并将数据访问中固定和变化的部分分开,同时保证模板线程类是线程安全的,以便多个数据访问线程共享同一个模板实例。这样,只要编写好回调接口,并调用模板类进行数据访问,就可以得到想要的结果:数据访问成功执行,前置和后置的模板化工作也按顺序执行,提高开发效率的同时保证了资源使用的正确性,消除了因忘记释放资源而引起的资源泄露问题。
最新文章
- html+css实现简易下拉菜单
- JAVA中的字符串小结
- [vim]的关键字补全
- jQuery前端验证多种方式
- BZOJ 2768 冠军调查(最小割)
- [工作技能]SVN
- 用 Javascript 获取页面大小、窗口大小和滚动条位置
- Android之天气APP
- 数值积分NIntegrate中的具体算法
- centos下的lnmp环境搭建
- Javascript 学习笔记 无缝滚动
- Quartz学习——Spring和Quartz集成详解(三)
- 多线程系列(四):Task
- 服务器控件的几个属性 SelectedIndex、SelectedItem、SelectedValue、SelectedItem.Text、selectedItem.value
- :before添加图片,IE8兼容
- Oracle管理文件OMF (oracle managed files)
- docker的安装与启动
- react表单事件和取值
- 005.MySQL双主-Master01可用配置
- 关于dubbo和zookeeper 注册中心
热门文章
- Argus--[优先队列]
- H3C 计算子网内可用主机地址数
- springboot+nginx+https+linux实现负载均衡加域名访问简单测试
- linux 内核定时器
- vue-learning:1 - 为什么选择vue
- SpringBoot --web 应用开发之文件上传
- Teleport ultra/IDM(Internet Download Manager)
- egg-socket在egg中的使用
- [板子]用线段树解决ST表问题
- Team Foundation Server 2015使用教程【1】:团队项目创建