返回介绍

3.3 集成 Spring Data Repository

发布于 2025-04-22 19:57:17 字数 1549 浏览 0 评论 0 收藏

如你所见,使用 Querydsl 所执行的查询一般来说包括 3 个主要的步骤。

1.构建存储相关的查询实例。

2.在查询上使用一些过滤断言。

3.执行查询实例,可能会对其使用投射。

其中的两个步骤可以视为样板式的,因为它们通常会编写类似的代码。另一方面,Spring Data Repository 会尽可能帮助用户减少不必要代码的数量,因此将 Repository 抽象与 Querydsl 集成在一起是很有意义的。

3.3.1 执行断言

集成的核心在于 QueryDslPredicateExecutor 接口,它指定了用户可以执行 Querydsl 断言的 API,类似于 CrudRepository 所提供的 CRUD 方法,如示例 3-11 所示。

示例 3-11 QueryDslPredicateExecutor 接口

c0309

目前,Spring Data JPA 和 MongoDB 模块通过提供实现类来实现示例 3-11 中的 QueryDslPredicateExecutor 接口以支持这个 API。为了通过 Repository 接口暴露这个 API,需要让其扩展 QueryDslPredicateExecutor 以及 Repository(或其他可用的基础接口),参见示例 3-12。

示例 3-12 CustomerRepository 接口扩展了 QueryDslPredicateExecutor

c0310

扩展这个接口会有两个重要的结果:首先(可能也是最重要的)就是它将 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 集成”。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。