- 作者简介
- 内容提要
- 关于本书
- 路线图
- 代码规范与下载
- 作者在线
- 封面插图简介
- 前言
- 译者序
- 致谢
- 第1部分 Spring 的核心
- 第1章 Spring 之旅
- 第2章 装配 Bean
- 第3章 高级装配
- 第4章 面向切面的 Spring
- 第2部分 Web 中的 Spring
- 第5章 构建 Spring Web 应用程序
- 第6章 渲染 Web 视图
- 第7章 Spring MVC 的高级技术
- 第8章 使用 Spring Web Flow
- 第9章 保护 Web 应用
- 第3部分 后端中的 Spring
- 第10章 通过 Spring 和 JDBC 征服数据库
- 第11章 使用对象-关系映射持久化数据
- 第12章 使用 NoSQL 数据库
- 第13章 缓存数据
- 第14章 保护方法应用
- 第4部分 Spring 集成
- 第15章 使用远程服务
- 第16章 使用 Spring MVC 创建 REST API
- 第17章 Spring消息
- 第18章 使用 WebSocket 和 STOMP 实现消息功能
- 第19章 使用 Spring 发送 Email
- 第20章 使用 JMX 管理 Spring Bean
- 第21章 借助 Spring Boot 简化 Spring 开发
第11章 使用对象-关系映射持久化数据
本章内容:
使用Spring和Hibernate
借助上下文Session,编写不依赖于Spring的Repository
通过Spring使用JPA
借助Spring Data实现自动化的JPA Repository
小时候,骑自行车是一件很有趣的事情,对吧?在清晨,我们骑车上学。放学后,我们游逛到朋友家。当天色渐晚之时,在父母的呼喊声中,我们骑车回家。那些日子真的很有意思!
后来,随着慢慢长大,现在我们所需要的不仅仅是一辆自行车了。有时,我们需要走很远的路去上班或需要装载一些生活用品,还有可能接送孩子去上足球课。如果生活在得克萨斯州的话,我们还必须需要一台空调。我们的需求超出了自行车的功能范围。
在数据持久化的世界中,JDBC就像自行车。对于份内的工作,它能很好地完成并且在一些特定的场景下表现出色。但随着应用程序变得越来越复杂,对持久化的需求也变得更复杂。我们需要将对象的属性映射到数据库的列上,并且需要自动生成语句和查询,这样我们就能从无休止的问号字符串中解脱出来。此外,我们还需要一些更复杂的特性:
延迟加载(Lazy loading):随着我们的对象关系变得越来越复杂,有时候我们并不希望立即获取完整的对象间关系。举一个典型的例子,假设我们在查询一组PurchaseOrder对象,而每个对象中都包含一个LineItem对象集合。如果我们只关心PurchaseOrder的属性,那查询出LineItem的数据就毫无意义。而且这可能是开销很大的操作。延迟加载允许我们只在需要的时候获取数据。
预先抓取(Eager fetching):这与延迟加载是相对的。借助于预先抓取,我们可以使用一个查询获取完整的关联对象。如果我们需要PurchaseOrder及其关联的LineItem对象,预先抓取的功能可以在一个操作中将它们全部从数据库中取出来,节省了多次查询的成本。
级联(Cascading):有时,更改数据库中的表会同时修改其他表。回到我们订购单的例子中,当删除Order对象时,我们希望同时在数据库中删除关联的LineItem。
一些可用的框架提供了这样的服务,这些服务的通用名称是对象/关系映射(object-relational mapping,ORM)。在持久层使用ORM工具,可以节省数千行的代码和大量的开发时间。ORM工具能够把你的注意力从容易出错的SQL代码转向如何实现应用程序的真正需求。
Spring对多个持久化框架都提供了支持,包括Hibernate、iBATIS、Java数据对象(Java Data Objects,JDO)以及Java持久化API(Java Persistence API,JPA)。与Spring对JDBC的支持那样,Spring对ORM框架的支持提供了与这些框架的集成点以及一些附加的服务:
支持集成Spring声明式事务;
透明的异常处理;
线程安全的、轻量级的模板类;
DAO支持类;
资源管理。
本章没有足够的篇幅介绍Spring支持的全部ORM框架。其实这并不会有什么问题,因为Spring对不同ORM解决方案的支持是很相似的。一旦掌握了Spring对某种ORM框架的支持后,你可以轻松地切换到另一个框架。
在本章中,我们将会看到Spring如何与最常用的两种ORM方案集成:Hibernate和JPA。同时还会通过Spring Data JPA了解一下Spring Data项目。借助这种方式,我们不仅可以学习到如何借助Spring Data JPA移除JPA Repository中的样板式代码,还能为下一章的如何将Spring Data用于无模式的存储打下基础。
让我们先来看看Spring是如何为Hibernate提供支持的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论