springboot jpa2.2.10 QueryDSL 4.2.2 分页查询 QueryDslPredicateExecutor,详细案例
时间: 2024-05-04 14:16:34 浏览: 155
好的,我会为您提供详细的案例。首先,您需要在 pom.xml 文件中增加 QueryDSL 、jpa 和 spring-boot-starter-data-jpa 三个依赖:
```xml
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
```
其中 `${querydsl.version}` 变量可以设置为 QueryDSL 的版本号,当前最新版本为 4.4.0 。
其次,您需要在 pom.xml 文件中配置 QueryDSL 的插件:
```xml
<build>
<plugins>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>${apt-maven-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/apt</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
```
其中 `${apt-maven-plugin.version}` 变量可以设置为 apt-maven-plugin 的版本号,当前最新版本为 1.1.3 。
接着,您需要在 application.yml 文件中配置 QueryDSL 的参数,例如:
```yml
spring:
jpa:
show-sql: true
hibernate:
ddl-auto: none
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
data:
rest:
base-path: /api
querydsl:
target:
folder: target/generated-sources/apt
```
最后,我们可以开始编写代码了。以下是一个简单的范例:
```java
@Repository
public interface UserRepository extends JpaRepository<User, Long>, QueryDslPredicateExecutor<User> {
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public Page<User> searchUsers(String keyword, Pageable pageable) {
QUser qUser = QUser.user;
BooleanExpression expression = qUser.name.containsIgnoreCase(keyword);
return userRepository.findAll(expression, pageable);
}
}
```
在这个例子中,我们首先定义了一个 UserRepository 接口,该接口继承了 JpaRepository 和 QueryDslPredicateExecutor 接口。我们可以使用 JpaRepository 提供的方法实现基本的 CRUD 操作,而使用 QueryDslPredicateExecutor 提供的方法可以实现更加灵活的查询筛选操作。
接着,在 UserService 类中,我们使用了一个名为 searchUsers 的方法来进行分页查询。首先,我们需要创建一个 QUser 对象,用于查询用户实体。然后,我们可以使用 containsIgnoreCase 方法来查询用户实体的名字是否包含指定的关键词。最后,我们可以使用 findAll 方法来查询满足条件的用户,返回包含分页信息的 Page 对象。
总结一下,使用 QueryDSL 配合 Spring Data JPA 进行分页查询,需要做以下几个步骤:
1. 增加 QueryDSL 、jpa 和 spring-boot-starter-data-jpa 三个依赖;
2. 配置 QueryDSL 的插件;
3. 在 application.yml 文件中配置 QueryDSL 的参数;
4. 编写包含 QueryDslPredicateExecutor 接口的 Repository 接口;
5. 在 Service 类中编写查询方法,并使用 QueryDslPredicateExecutor 提供的方法进行查询操作。
阅读全文