使用QueryDSL教程心得

该文章旨在记录工作过程使用QueryDSL的一些体验以及心得;

废话不说,直接进入主题,要想使用QueryDSL首先我们需要加入依赖;

如下所示:

针对Maven集成;

<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>

然后我们来配置maven APT插件

<project>
<build>
    <plugins>
        <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>apt-maven-plugin</artifactId>
            <version>1.1.3</version>
            <executions>
            <execution>
            <goals>
            <goal>process</goal>
            </goals>
    <configuration>
            <outputDirectory>target/generated-sources/java</outputDirectory>
            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processo
    </configuration>
    </execution>
    </executions>
        </plugin>
    </plugins>
</build>
</project>

JPAAnnotationProcessor 查找带有 javax.persistence.Entity 注解的领域类型并为其生成查询类型。 如果你在领域类型中使用的是Hibernate的注解, 那应该使用 APT 处理器com.querydsl.apt.hibernate.HibernateAnnotationProcessor 来代替
JPAAnnotationProcessor 。运行 clean install 命令后, 在 target/generated-sources/java 目录下将生成相应的查询类型。
如果你使用Eclipse, 运行 mvn eclipse:eclipse 更新你的Eclipse项目, 将target/generated-sources/java 作为源目录。
 

接下来,我们创建一个实体类;

@Entity
public class Customer {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
} p
ublic String getLastName() {
return lastName;
} p
ublic void setFirstName(String fn) {
firstName = fn;
} p
ublic void setLastName(String ln)[
lastName = ln;
}
}

Querydsl 会在 Customer 类的同一个包内生成一个名称为 QCustomer 的查询类。 QCustomer 的静态实例变量可在Querydsl查询中作为 Customer 类的代表。
QCustomer 有一个默认的静态实例变量:QCustomer customer = QCustomer.customer;
或者你可以像下面列子一样定义查询类实例变量:
QCustomer customer = new QCustomer("myCustomer");

2. 查询
Querydsl JPA 模块同时支持 JPA 和 Hibernate API

当使用 JPA 时, 需要用到 JPAQuery 实例, 就像下面的例子:

// where entityManager is a JPA EntityManager
JPAQuery<?> query = new JPAQuery<Void>(entityManager);


如是你使用的是 Hibernate API, 你可以实例化一个 HibernateQuery :

// where session is a Hibernate session
HibernateQuery<?> query = new HibernateQuery<Void>(session);


JPAQuery 和 HibernateQuery 都实现了 JPQLQuery 这个接口。
构造一个获取名字为 "Bob" 的一个 customer 的信息的查询:

// queryFactory => JPAQueryFactory
QCustomer customer = QCustomer.customer;
Customer bob = queryFactory.selectFrom(customer)
.where(customer.firstName.eq("Bob"))
.fetchOne();

调用 selectFrom 方法是定义查询的来源与映射, where 则定义查询的过滤
器, fetchOne 则要告诉 Querydsl 返回单个元素( SQLQuery<?> 中的泛型指定
元素类型) 。
一般用法
JPQLQuery 接口可以进行级联调用的方法说明:
select : 设置查询的映射(如果由查询工厂创建查询, 则不需要调用)
from : 添加查询的源(表)
innerJoin, join, leftJoin, rightJoin, on : 使用这些方法添加要 join
的元素。 连接方法的第一个参数是要连接的源, 第二个参数是源目标(别名) 。
where : 添加查询过滤器, 以逗号分隔的可变参数传入, 或是使用 and 或 or
操作连接。
groupBy : 以可变参数形式添加查询的分组。
having : 添加具有 "GROUP BY" 分组作为断言( Predicate ) 表达式的可变
参数数组的 HAVING 过滤器
orderBy : 添加结果的排序方式的排序表达式。 使用 asc() 和 desc() 方法
获取基于数字、 字符串或其他可进行比较的表达式的 OrderSpecifier 实例
limit, offset, restrict : 设置分页查询的结果。 limit 为结果的最大行
数, offset 是偏移的行数, restrict 则是两者的限定约束

3.子查询

QDepartment department = QDepartment.department;
QDepartment d = new QDepartment("d");
queryFactory.selectFrom(department)
.where(department.size.eq(
JPAExpressions.select(d.size.max()).from(d)))
.fetch();

其他的增删改查就不贴了,大同小异;

如果看不懂的话请移步我的资源,我把该资源的文档上传了;

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QueryDSL 是一个用于构建类型安全的 SQL 查询的 Java 框架。而 jpa2.2.10 是 Java Persistence API(JPA)的一个版本。如果你想在 jpa2.2.10 中使用 QueryDSL,你需要先引入 QueryDSL 的依赖,然后在你的代码中使用它提供的 API 来构建和执行查询。 首先,你需要在你的项目中引入 QueryDSL 的依赖。例如,如果你正在使用 Maven,可以在你的 pom.xml 文件中添加下面的依赖: ``` <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>4.2.2</version> </dependency> ``` 然后,你需要在你的 JPA 实体类上使用 `@QueryEntity` 注解。这个注解会告诉 QueryDSL 你的实体类可以用于查询。 接下来,你可以使用 QueryDSL 的 API 来构建查询。例如,下面的代码演示了如何使用 QueryDSL 构建一个简单的查询,查询所有年龄大于 18 岁的用户: ``` QUser user = QUser.user; JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); List<User> users = queryFactory .selectFrom(user) .where(user.age.gt(18)) .fetch(); ``` 在这个例子中,首先我们定义了一个 `QUser` 类型的变量 `user`,这个变量是由 QueryDSL 自动生成的。然后我们创建了一个 `JPAQueryFactory`,它用于执行查询并返回查询结果。最后,我们使用 `queryFactory` 来构建查询,查询所有年龄大于 18 岁的用户。 希望这个回答能够帮助你理解如何在 jpa2.2.10 中使用 QueryDSL

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值