三、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层整体代码的总量,提高项目开发效率。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,678评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 对经常关注淘品牌的人来说,张大奕、大金、管阿姨等名字绝对不陌生,而这些炙手可热的网红店铺实际上都属于同一家公司——...
    SI玲阅读 482评论 0 1
  • 大概是我们这个年纪的执迷 认为对的人就奋不顾身 最后爱而不得 大概是我们这个年纪的执迷 认为背叛的友谊就一文不值 ...
    苏茫Wyg阅读 204评论 2 0
  • 姥爷,你可怕死啊?不怕。为什么呢?活着跟你在一起,死了跟你舅舅他们在一起,两边都是我的亲人。那人死了后都到哪儿去了...
    柳七归来阅读 430评论 6 6