如何在Spring Data JPA中引入Querydsl

一、环境说明

基础框架采用Spring Boot、Spring Data JPA、Hibernate。在动态查询中,有一种方式是采用Querydsl的方式。

二、具体配置

1、在pom.xml中,引入相关包和配置插件。

(1)引入包(注:不需要版本号,Spring Boot 会自动匹配合适的版本)

<!-- Querydsl相关包 -->         
         <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
        </dependency>

(2)配置插件:主要用来生成“查询对象”。

            <plugin>
              <groupId>com.mysema.maven</groupId>
              <artifactId>maven-apt-plugin</artifactId>
              <version>1.0.4</version>
              <executions>
                <execution>
                  <phase>generate-sources</phase>
                  <goals>
                    <goal>process</goal>
                  </goals>
                  <configuration>
                    <outputDirectory>target/generated-sources</outputDirectory>
                    <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                  </configuration>
                </execution>
              </executions>
            </plugin>             

 

2、设置源文件夹

经过上面pom.xml的配置后,就在 target/generated-sources 文件夹下面自动生成“查询对象”。需要将该文件夹设置成“源文件夹”,以便可以将下面的java文件进行编译使用。

生成的查询对象,都是在原实体(bo)类的名字前,加上 Q 表示。

如何在Spring Data JPA中引入Querydsl

3、dao中继承接口QueryDslPredicateExecutor

如何在Spring Data JPA中引入Querydsl

 

4、在service层使用 Querydsl方式进行是查询,例如:

如何在Spring Data JPA中引入Querydsl

三、写在最后

此文仅作为引入Querydsl的笔记,并不代表作者本人推荐使用Querydsl。就实际应用而言,个人更倾向于使用 JPA Criteria 的方式来实现动态查询,其接口是JpaSpecificationExecutor。