jpa2.2.10 QueryDSL写个详细案例,从配置到查询
时间: 2024-05-07 18:16:40 浏览: 100
好的,下面是一个详细的案例:
1. 配置JPA和QueryDSL
首先需要添加JPA和QueryDSL的相关依赖项。在pom.xml文件中添加以下代码:
```
<dependencies>
<!-- JPA -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.0.Final</version>
</dependency>
<!-- QueryDSL -->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.1.3</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.1.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
```
2. 配置实体类和JPA
接下来,需要配置实体类和JPA。在实体类中使用注解来映射数据库表和字段。例如:
```
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
private int age;
// constructors, getters and setters
}
```
在应用程序的入口创建EntityManagerFactory和EntityManager,用于与数据库进行交互。具体的代码如下:
```
public class Main {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("demo");
EntityManager em = emf.createEntityManager();
// code goes here
em.close();
emf.close();
}
}
```
3. 创建查询
使用QueryDSL可以方便地构造类型安全的查询。首先需要定义Q实体类,用于从数据库中获取数据。例如,定义QPerson类:
```
@Generated("com.querydsl.codegen.EntitySerializer")
public class QPerson extends EntityPathBase<Person> {
public QPerson(String variable) {
super(Person.class, variable);
}
public QPerson(Path<? extends Person> path) {
super(path.getType(), path.getMetadata());
}
public QPerson(PathMetadata metadata) {
super(Person.class, metadata);
}
public final NumberPath<Long> id = createNumber("id", Long.class);
public final StringPath firstName = createString("firstName");
public final StringPath lastName = createString("lastName");
public final NumberPath<Integer> age = createNumber("age", Integer.class);
}
```
接下来就可以构造查询了。例如,查询所有年龄大于18岁的人员:
```
QPerson person = QPerson.person;
JPAQuery<Person> query = new JPAQuery<>(em);
List<Person> result = query.selectFrom(person)
.where(person.age.gt(18))
.orderBy(person.lastName.asc())
.fetch();
```
这将返回一个按姓氏排序的人员列表。
以上就是一个jpa2.2.10 QueryDSL的详细案例。如果您有任何问题,请随时问我。
阅读全文