返回
使用 QueryDSL 提升 SpringBoot 应用查询能力
见解分享
2023-12-04 12:32:30
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 的高级用法,敬请期待。