4. JPQL

简介

JPQL语法基本与SQL一直,不同点在于SQL操作数据库表,而JPQL操作实体模型。
JPQL是一种独立于平台的查询语言,简单而强大。JPA会在执行时将JPQL自动转换为对应的SQL,可做到兼容任何类型数据库。

使用

看下面例子:
语法与SQL几乎保持一致,需要注意的是,jpql操作对象,所以Book b相当于创建了一个Book类的对象b,搜索字段、条件判断等都需要适用对象b完成。
传参方法有两种:
一种是例子中的 ==?1== 这种(?+数字)的形式;
另一种就是 ==:id== 这种(:+参数名)的形式;
数字形式需要注意要从1开始,参数名下面例子会有示例。

1
2
3
4
String jpql="select b from Book b where b.id = ?1";
Query query = entityManager.createQuery(jpql);
query.setParameter(1,id);
Book book = (Book) query.getResultList().get(0);

上面的例子是普通的方法实现jpql查询,还有一种预查询方法通过注解实现。

@NamedQuery
1
2
3
4
5
@Entity
@NamedQuery(name = "selectById",query = "select b from Book b where b.id = :id")
public class Book {
...
}

在实体类上方使用@NamedQuery注解,定义name和query即可。调用则使用createNamedQuery方法即可

1
2
3
Query query = entityManager.createNamedQuery("selectById");
query.setParameter("id",1);
Book book = (Book) query.getResultList().get(0);

此例中使用了:id形式的传参方法