简单介绍
- JPQL: JPA的一部分,是一个平台无关的面向对象查询语言,通过类似 SQL 的语句进行 JPA 查询,这在构建动态查询时非常有用。样子
SELECT u FROM User u WHERE u.status = :status and u.name = :name
- HQL: Hibernate 的面向对象查询语言,它是 JPQL 的超集,一句 HQL 不可能一定是 JPQL,但一句 JPQL 一定是 HQL。它超出 JPQL 的部分,比如 额外的内置函数,各数据库方言等。
- Criteria API:这是通过定义一系列 Java 对象来进行 JPA 查询,而 JPAQL 则是直接通过一条类 SQL 语句。JPQL 不是类型安全的,但 Ciriteria 是类型安全的。样子
CriteriaBuilder cb = em.getCriteriaBuilder();// 等价于 JPQL语句 -> SELECT c FROM Country cCriteriaQuery<Country> q = cb.createQuery(Country.class);Root<Country> c = q.from(Country.class);q.select(c);
- Spring Data JPA @Query: Spring Data JPA 中的 @Query 注解,里面的查询语句就是 JPQL, 因为Spring JPA 默认使用 Hibernate 实现的,因此查询语句也支持 HQL。样子
@Query("SELECT u FROM User u WHERE u.status = 1")
Collection<User> findAllActiveUsers();
详细指南索引
- JPQL | JDK 11 LTS | Oracle
- JPA 使用教程 | ObjectDB
- HQL 和 JPQL | Hibernate
- Hibernate 使用指南 | RedHat
- Spring Data JPA @Query 详解 | baedung
- HQL 当前时间和其他时间函数 | CodingDung
这些内容将会解答你关于 JPQL\HQL\JPA 的任何疑惑😘😘😘