返回

使用 QueryDSL 提升 SpringBoot 应用查询能力

见解分享

SpringBoot + QueryDSL 入门到会用 —— 第一篇(整合)

前言

自打与 Spring Data JPA + QueryDSL 这对组合不期而遇,我便彻底抛弃了 MyBatis。QueryDSL 能够在任何受支持的 ORM 框架或 SQL 平台上,采用一种通用的 API 方式来构建查询。目前,QueryDSL 支持的平台包括 JPA、JDO、SQL、MongoDB 等等。

SpringBoot 集成 QueryDSL

添加 Maven 依赖

在 Maven 项目的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>5.0.0</version>
</dependency>

启用 QueryDSL

在 SpringBoot 主应用程序类中,启用 QueryDSL:

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

创建 QEntity 类

QueryDSL 会为每个实体类自动生成一个 QEntity 类,用于构建查询。这些类可以由 QueryDSL 工具自动生成,也可以手动创建。

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    // 省略 getter 和 setter 方法
}

生成 QUser 类:

mvn querydsl:generate

基本用法

构建查询

JpaRepository<User, Long> userRepository;

// 查询所有用户
List<User> allUsers = userRepository.findAll();

// 条件查询
List<User> usersByName = userRepository.findAll(QUser.user.name.eq("张三"));

自定义查询

QueryDSL 提供了丰富的 API,可以构建复杂的查询。

// 查询年龄大于 18 岁且姓名包含 "张" 的用户
List<User> users = userRepository.findAll(
        QUser.user.age.gt(18).and(QUser.user.name.contains("张"))
);

总结

SpringBoot 集成 QueryDSL 非常简单,它提供了强大的查询功能,可以极大地简化复杂的查询操作。在下一篇文章中,我们将深入探讨 QueryDSL 的高级用法,敬请期待。