jpa querydsl_Java EE开发人员的三大JPA生产力提升器– QueryDSL

jpa querydsl

Spring Data及其CDI对应的DeltaSpike Data是很棒的工具。 它们极大地提高了您的生产率,尤其是在启动项目时,并且当您需要使用较低级别的API创建更复杂的东西时,它们不会妨碍您。

但是它们最酷的功能,基于方法命名的自动生成查询以及JPQL / SQL查询都有一些缺点。 您的方法名称很容易变得很长,并且不能在方法名称上添加换行符。 而且,就像您要使用查询语言一样,即使使用了良好的工具,也可能存在在开发过程中无法轻易发现的问题。

QueryDSL是一个库,可使用类型明确的Java API轻松构建查询。 它的强大之处在于基于您的实体类自动生成的帮助器类。 通过IDE的自动完成功能和强大的键入功能,使构建与首次运行一起使用的查询非常容易,这与我编写的大多数SQL或JPQL查询不同。 QueryDSL实际上支持多个后端,但是它的JPA支持自然是我们要在这里使用的东西。

Spring Data和DeltaSpike Data模块都支持使用QueryDSL编写自定义查询。 因此,您应该将其视为补充工具,以替代其中任何一个,当“存储库生成器”不再那么方便时,您可以使用它。 而且,您可以将其视为对开发人员更友好的方式,以编程方式表达您的查询,而不是使用有些棘手的JPA Criteria API构建查询。

就个人而言,当基于简单方法名称的感觉不再足够时,我会选择JPQL而不是Criteria API,但是QueryDSL无疑将竞争重新转向了编程查询定义。

查看使用QueryDSL的示例项目

要开始使用QueryDSL,您需要设置注释处理器来创建帮助器类。 一种简单的方法是在您的项目中添加以下maven插件:

<plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.3</version>
                <executions>
                    <execution>
                        <id>querydsl</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/generated-sources/querydsl</outputDirectory>
                            <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.mysema.querydsl</groupId>
                        <artifactId>querydsl-apt</artifactId>
                        <version>3.6.1</version>
                    </dependency>
                </dependencies>
            </plugin>

在运行时,您需要以下依赖项:

<dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-core</artifactId>
        <version>3.6.1</version>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>3.6.1</version>
    </dependency>

使用QueryDSL作为两个存储库生成器的补充很容易,但是Spring Data有了更深的集成。 借助其findAll(Predicate谓词,Pageable页面可分页)方法,您可以直接为查询定义谓词,并使用标准的Spring Data排序和分页API以及基于QueryDSL的查询。  

还请参见: JPA生产力提升器#1:Spring数据

本文的用例可以结合使用Spring Data和QueryDSL来编写,如下所示:

public List<Contact> findPaged(Invoicer invoicer, String filter,
            int firstResult, int maxResults) {
        return repository.findAll(
                QContact.contact.name.startsWithIgnoreCase(filter)
                .and(QContact.contact.invoicer.eq(invoicer)),
                new PageRequest(firstResult / maxResults, maxResults)
        ).getContent();
    }

 

我很高兴能够探索Java EE应用程序的各种JPA帮助程序库。 在启动以数据为中心的应用程序方面,我已经知道Spring Data是一个超酷的野兽,但是我还没有意识到在其他标准Java EE环境中使用它是如此容易。

我还发现,对于相同的用例,DeltaSpike Data是一个切实可行的替代方案。 它还具有一个很酷的“示例查询”功能,您无法在Spring Data中找到该功能。 如果我必须在他们之间进行选择,我可能会掷硬币或根据团队的现有经验做出决定。

我也终于真正尝试使用QueryDSL。 我已经阅读了几篇有关它的文章,并且已经对它的用途深信不疑,但从未真正尝试过它。 如果将构建脚本与从中获得的生产力提升进行比较,那么设置构建脚本来自动生成查询助手类是一个小麻烦。 有了它,您可以对SQL或JPQL查询中的讨厌的错字说“再见”。 如果您的应用程序中有很多复杂的查询,则一定要签出该库。 它也可以很好地补充“存储库”。

还请参见: JPA生产力提升器2:DeltaSpike数据

希望您能从我的经验中学到东西。 要快速使用这些工具中的任何一个,请在GitHub上查看我简单的全栈电话簿CRUD示例,该示例在数据库上具有三个不同的外观,并使用最佳的JPA生产力增强器实现。

翻译自: https://jaxenter.com/top-3-jpa-productivity-boosters-for-java-ee-developers-querydsl-116135.html

jpa querydsl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值