Contents

Hibernate 从表中获取所有数据

1. 概述

在这个快速教程中,我们将了解如何使用 Hibernate 使用 JPQL 或 Criteria API 从表中获取所有数据。

JPQL 为我们提供了更快、更简单的实现,同时使用 Criteria API 更加动态和健壮。

2. JPQL

JPQL 提供了一种从表中获取所有实体的简单直接的方法。

让我们看看使用 JPQL 从表中检索所有学生会是什么样子:

public List<Student> findAllStudentsWithJpql() {
    return session.createQuery("SELECT a FROM Student a", Student.class).getResultList();
}

我们的 Hibernate 会话的 *createQuery()*方法接收一个类型化的查询字符串作为第一个参数,实体的类型作为第二个参数。我们通过调用 getResultList()方法来执行查询,该方法将结果作为类型化的List返回。

**简单是这种方法的优点。**JPQL 非常接近 SQL,因此更易于编写和理解。

3. 标准API

Criteria API 为构建 JPA 查询提供了一种动态方法。

它允许我们通过实例化表示查询元素的 Java 对象来构建查询。如果查询是从许多可选字段构建的,这是一个更简洁的解决方案,因为它消除了很多字符串连接。

我们刚刚看到了一个使用 JPQL 的全选查询。让我们看一下使用 Criteria API 的等效项:

public List<Student> findAllStudentsWithCriteriaQuery() {
    CriteriaBuilder cb = session.getCriteriaBuilder();
    CriteriaQuery<Student> cq = cb.createQuery(Student.class);
    Root<Student> rootEntry = cq.from(Student.class);
    CriteriaQuery<Student> all = cq.select(rootEntry);
    TypedQuery<Student> allQuery = session.createQuery(all);
    return allQuery.getResultList();
}

首先,我们得到一个CriteriaBuilder,我们用它来创建一个类型化的 CriteriaQuery。稍后,我们为查询设置根条目。最后,我们使用*getResultList()*方法执行它。

现在,这种方法类似于我们之前所做的。但是,它使我们可以完全访问 Java 语言,从而在制定查询时表达出更大的细微差别。

除了相似之外,JPQL 查询和基于 JPA 条件的查询具有同等的性能。