返回介绍

3.2 生成查询元模型

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

正如在前文中所见,Querydsl 的核心构件(artifact)就是查询元模型类。这些类是通过注解处理工具集(APT,Annotation Processing Toolkit,见 http://www.jcp.org/ en/jsr/detail?id=175 )生成的,它是 Java 6 中 javac Java 编译器的一部分。APT 有一种机制,能够以编码的方式探查已有的 Java 源代码以查找特定的注解,然后再回过头来调用函数以生成 Java 代码。Querydsl 使用了这种机制来提供特定的 APT 处理器实现类,这个类可以用于探查注解。示例 3-1 使用了 Querydsl 特定的注解,如 @QueryEntity 以及 @QueryEmbeddable。如果我们已经拥有了某种存储类型的映射领域类,而这种存储类型是 Querydsl 所能够支持的,那么生成元模型类并不需要额外的过程。在这里的核心集成点在于需要将注解处理器传递给 Querydsl APT。通常处理器会在构建过程中执行。

3.2.1 构建系统集成

为了与 Maven 集成,Querydsl 提供了 maven-apt-plugin 插件,借助它就能够配置实际使用的处理器类了。在示例 3-8 中,将 process 的目标设置为 generate-source 阶段,这样所配置的处理器类就能探查 src/main/java 目录下的类。如果想要为测试源码包(src/test/java)中的类生成元模型类的话,需要在 generate-test-sources 阶段执行 test-process 目标。

示例 3-8 设置 Maven APT 插件

c030303

3.2.2 所支持的注解处理器

Querydsl 自带了各种 APT 处理器,以用于探查不同的注解并生成对应的元模型类。

QuerydslAnnotationProcessor

非常核心的注解处理器,会探查 Querydsl 的特定注解,如 @QueryEntity@QueryEmbeddable。

JPAAnnotationProcessor

用于探查 javax.persistence 注解,如 @Entity 以及 @Embeddable

HibernateAnnotationProcessor

类似于 JPA 处理器,但是增加了对 Hibernate 注解的支持。

JDOAnnotationProcessor

探查 JDO 注解,如 @PersistenceCapable@EmbeddedOnly

MongoAnnotationProcessor

Spring Data 的一个专用的处理器,会探查 @Document 注解。阅读 6.3 小节“映射模块”以了解更多信息。

3.2.3 使用 Querydsl 对存储进行查询

现在查询类已经就绪了,让我们看一下如何实际使用它们构建与特定存储相关的查询。正如前面所提到的,Querydsl 为各种存储都提供了集成模块,这些模块以优雅且一致的 API 来创建查询对象、通过所生成的元模型类进行断言定义并执行最终的查询。

例如,JPA 模块提供了一个 JPAQuery 实现类,它会接受 EntityManager 并提供了 API 能够实现在执行之前应用断言,如示例 3-9 所示。

示例 3-9 使用 Querydsl JPA 模块来查询关系型存储

c0307

如果还记得示例 3-6 的话,就会发现这两个代码片段看上去区别并不大。实际上,唯一的区别在于我们采用 JPAQuery 作为基础,而前面的示例使用是集合包装类(Collection Wrapper)。为 MongoDB 存储实现相同的场景同样也没有太大的变化,对于这一点你应该不会感到太惊讶(如示例 3-10 所示)。

示例 3-10 联合使用 Querydsl MongoDB 模块以及 Spring Data MongoDB

c0308

发布评论

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