- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 1 章 Spring Data 项目
- 第 2 章 Repository:便利的数据访问层
- 第 3 章 使用 Querydsl 实现类型安全的查询
- 第二部分 关系型数据库
- 第 4 章 JPA Repository
- 第 5 章 借助 Querydsl SQL 实现类型安全的 JDBC 编程
- 第三部分 NoSQL
- 第 6 章 MongoDB: 文档存储
- 第 7 章 Neo4j:图数据库
- 第 8 章 Redis:键/值存储
- 第四部分 快速应用开发
- 第 9 章 使用 Spring Roo 实现持久层
- 第 10 章 REST Repository 导出器
- 第五部分 大数据
- 第 11 章 Spring for Apache Hadoop
- 第 12 章 使用 Hadoop 分析数据
- 第 13 章 使用 Spring Batch 和 Spring Integration 创建大数据管道
- 第六部分 数据网格
- 第 14 章 分布式数据网格:GemFire
- 关于封面
3.3 集成 Spring Data Repository
如你所见,使用 Querydsl 所执行的查询一般来说包括 3 个主要的步骤。
1.构建存储相关的查询实例。
2.在查询上使用一些过滤断言。
3.执行查询实例,可能会对其使用投射。
其中的两个步骤可以视为样板式的,因为它们通常会编写类似的代码。另一方面,Spring Data Repository 会尽可能帮助用户减少不必要代码的数量,因此将 Repository 抽象与 Querydsl 集成在一起是很有意义的。
3.3.1 执行断言
集成的核心在于 QueryDslPredicateExecutor 接口,它指定了用户可以执行 Querydsl 断言的 API,类似于 CrudRepository 所提供的 CRUD 方法,如示例 3-11 所示。
示例 3-11 QueryDslPredicateExecutor 接口
目前,Spring Data JPA 和 MongoDB 模块通过提供实现类来实现示例 3-11 中的 QueryDslPredicateExecutor 接口以支持这个 API。为了通过 Repository 接口暴露这个 API,需要让其扩展 QueryDslPredicateExecutor 以及 Repository(或其他可用的基础接口),参见示例 3-12。
示例 3-12 CustomerRepository 接口扩展了 QueryDslPredicateExecutor
扩展这个接口会有两个重要的结果:首先(可能也是最重要的)就是它将 API 引入了进来并且将其暴露给 CustomerRepository 的客户端。其次,Spring Data Repository 基础设施将会探查每个 Repository 接口并判断它是否扩展了 QueryDslPredicateExecutor。如果答案是肯定的并且 Querydsl 位于类路径之中,那么 Spring Data 将会选择一个特定的基类支撑 Repository 代理,它一般会通过创建存储相关的查询实例、绑定给定的断言、使用分页并最终执行查询来实现这些 API 方法。
3.3.2 手动实现 Repository
我们刚刚所看到的方式解决了为 Repository 所管理的领域类进行通用查询的问题。但是,无法通过这种机制执行更新或删除操作,或者管理特定存储的查询实例。这种场景可以很好地参与 Repository 抽象的特性,可以有选择地实现那些需要手动代码的方法(参见 2.3.2 小节“手动实现 Repository 方法”了解这个话题的更多细节)。为了便于实现自定义的 Repository 扩展,我们提供了特定存储的基础类。要了解更多细节,参见 4.4.2 小节“Repository 与 Querydsl 集成”以及 6.5.3 小节“Mongo Querydsl 集成”。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论