三、Spring——数据访问
1、Spring 对 DAO的支持
Spring支持目前大多数常用的数据持久化技术,Spring定义了一套面向DAO层的异常体系,并未各种支持的持久化技术提供了异常转换器。这样,我们在设计DAO接口时,就可以抛开具体的实现技术,定义统一的接口。
不管采用 何种持久化技术,访问数据的流程是相对固定的。Spring将数据访问流程划分为固定和变化两个部分,并以模板的方式定好流程,用回调接口将变化的部分开放出来,留给开发者自行定义。这样,我们仅需要提供业务相关的逻辑就可以完成整体的数据访问了。
Spring为了进一步简化持久模板类的使用,为各个持久化技术提供了便捷的支持类,支持类不但包含数据访问模板,还包含数据源或会话等内容。通过扩展支持类定义自己的数据访问类是最简单的数据访问方式。
不管采用何种持久化技术,都需要定义数据源。在实际部署中,我们可能会采用应用服务器本身提供的数据源,这时,则可以通过JndiObjectFactoryBean或jee命名空间引用JNDI中的数据源。
2、Spring的事务管理
Spring使声明式事务平民化,事务作为一个切面织入到目标业务方法的周围,业务方法完全从事务代码中解脱出来,代码的复杂度大大降低。被织入的事务代码基于Spring事务同步管理器进行工作,事务同步管理器维护着业务类对象线程相关资源。DAO类需要利用资源获取工具访问底层数据连接,或者直接建立在相应持久化模板类的基础上。
Spring的事务配置主要提供两方面的信息:其一,切点信息,用于定位实施事务切面的业务类方法;其二,控制事务行为的事务属性,这些属性包括事务隔离级别、事务传播行为、超时时间、回滚规则。
3、Spring事务管理难点剖析
在没有事务管理的情况下,DAO照样可以顺利进行数据操作;
将应用分为Web、Service及DAO层只是一种参考的开发模式,并非是事务管理工作的前提条件;Spring通过事务传播机制可以很好地应对事务方法嵌套调用的情况,开发者无须为了事务管理而可以改变服务方法的设计;
经过事务管理增强的到实例Bean不存在线程安全问题,可以很好地工作在多线程环境下;
混合使用多个数据访问框架的最佳组合是一个ORM技术框架(Hibernate 或 JPA)+ 一个JDBC技术框架(Spring JDBC 或 iBatis)。直接使用ORM技术框架对应的事管理器就行了,但必须考虑ORM缓存同步问题;
Spring AOP增强有两个方案:其一是基于接口的动态代理,其二为基于CGLib动态生成子类的代理。由于Java语言的特性,有些特殊方法不能被Spring AOP代理,所以无法享受AOP织入到来的事务增强;
使用Spring JDBC时如果直接使用Connection,可能会造成连接泄漏。为降低连接泄漏的可能性,尽量使用DataSourceUtils获取数据连接。也可以对数据源进行代理,以便数据源拥有感知事务上下文的能力;
4、使用Spring JDBC访问数据库
- JdbcTemplate 使用大量的回调接口完成数据的访问操作,StatementCallback、PreparedStatementCallback、CallableStatementCallback、BatchPreparedStatementSetter以及RowMapper是其中常用的回调接口,一般可以通过匿名内部类实现这些回调接口,使代码更加紧凑;
5、整合其他ORM框架
Sprng为其所支持的ORM框架提供方便易用的FactoryBean用以创建ORM框架的基础设施。Spring通过模板类在不损失框架功能的前提下大大降低了使用这些ORM技术的难度。但也允许用户使用框架原生的API构造DAO,使用原生API时,Spring能保证用户获取到事务绑定的资源,Spring的事务管理机制同样有效;
具体的应用一般会定义一个项目级的DAO基类,简化接口方法、添加泛型支持,一个设计良好的DAO积累可以大大减少DAO层整体代码的总量,提高项目开发效率。
三、Spring——数据访问的更多相关文章
- Spring数据访问之JdbcTemplate
Spring数据访问之JdbcTemplate 使用JdbcTemplate的基本操作步骤 1.引jar包
- Spring数据访问和事务
1.模型 2.解耦 3.实现 3.1 核心接口 3.2 代码分析 3.2.1 事务管理 3.2.2 数据访问 4.使用 4.1 编程模式 4.2 配置模式 4.2.1 声明式配置方式 4.2.2 注解 ...
- JS设计模式(三) 数据访问对象模式
引言 HTML5 提供了两种在客户端存储数据的新方法:localStorage.sessionStorage,他们是Web Storage API 提供的两种存储机制,区别在于前者属于永久性存储,而后 ...
- Spring数据访问2 - 通过JDBC访问数据库
因为原生的jdbc操作太复杂,几乎都是建立连接.关闭连接和处理例外等模板式的代码,Spring对此进行了抽象——使用模板来消除样板式代码 ,JdbcTemplate承担了简化数据库访问这块的任务. 利 ...
- Spring数据访问1 - 数据源配置及数据库连接池的概念
无论你要选择哪种数据访问方式,首先你都需要配置好数据源引用. Spring中配置数据源的几种方式 通过在JDBC驱动程序定义的数据源: 通过JNDI查找的数据源: 连接池的数据源: 对于即将发布到生产 ...
- Spring ( 五 )Spring之数据访问与事务管理
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Spring之数据访问 1.Spring数据访问工程环境搭建 jdbc.properties配置 ...
- Spring 梳理-数据访问-DB
针对接口编程 DAO是指数据访问对象(data access object),它提供了数据读取和写入到数据库中的一种方式.Spring认为,它应该以接口的方式发布功能,而应用程序的其他部分需要通过接口 ...
- Spring04-SpringEL&Spring JDBC数据访问
一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 ...
- 三种数据库访问——Spring JDBC
本篇随笔是上两篇的延续:三种数据库访问——原生JDBC:数据库连接池:Druid Spring的JDBC框架 Spring JDBC提供了一套JDBC抽象框架,用于简化JDBC开发. Spring主要 ...
随机推荐
- 解决Selenium与firefox浏览器版本不兼容问题
因为在用java打开firefox浏览器的时候报错 org.openqa.selenium.firefox.NotConnectedException: Unable to connect to ho ...
- hibernate基于注解的维护权反转:@OneToMany(mappedBy=)
背景说明:首先是SSH环境下,对象基于注解的方式映射到数据库: 昨天遇到一个比较纠结的问题,@OneToMany(mappedBy="xxx"), mappedBy属性有什么用,然 ...
- MySQL操作汇总[转]
这学期学习了数据库系统原理,做了实验,mark一记. 目录(没有一键目录不开心...) 1.T—SQL的简单查询.连接查询 (1)用SQL语句建库.建表并插入记录. (2)修改表结构,包括修改属性 ...
- iOS开发UI篇—常见的项目文件介绍
iOS开发UI篇—常见的项目文件介绍 一.项目文件结构示意图 二.文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要 ...
- .htaccess设置自定义出错页面
404错误可以这么写 ErrorDocument code error.php 如果是404错误,跳到文件error.php 其他常用错误页面写法(其中404错误有2种写法,上面一种,下面是通用错误定 ...
- GPS模块启动模式说明
1.启动方式 GPS开机定位分为冷启动、温启动和热启动三种: 1、冷启动:以下几种情况开机均属冷启动。初次使用时;电池耗尽导致星历信息丢失时;关机状态下将接收机移动1000公里以上距离。 2、温 ...
- SQL2008无法启动,报错"17051
解决办法: 第一步:进入SQL2008配置工具中的安装中心, 第二步:再进入维护界面,选择版本升级, 第三步:进入产品密钥,输入密钥 Developer: PTTFM-X467G-P7RH2-3Q6C ...
- 关于Let和var声明变量的区别
Let是ES6中添加进来的一个关键字,用于声明变量,其法与var声明变量相同,不同点在于其作用域(块级). 举例可以看出其具体差别 for(var i=0;i<5;i++){ console.l ...
- ex26 纠正练习
题目中给出的代码如下: def break_words(stuff): """This function will break up words for us." ...
- 《JavaScript模式》第3章 字面量和构造函数
@by Ruth92(转载请注明出处) 第3章:字面量和构造函数 一.创建对象的三种方式 // 对象字面量 var car = {goes: "far"}; // 内置构造函数(反 ...