当前位置:   article > 正文

Hibernate 标准查询

Hibernate 标准查询

在 Hibernate 中,标准查询通常指的是使用 Hibernate Query Language (HQL) 或 Criteria API 进行查询。这两种方法都是 Hibernate 提供的标准查询方式,它们允许你以面向对象的方式编写查询语句。下面分别介绍这两种查询方式:

1. HQL (Hibernate Query Language)

HQL 是一种面向对象的查询语言,它允许你以面向对象的方式来编写查询语句。HQL 非常接近 SQL,但是它是针对对象而非数据库表的。这使得 HQL 更容易理解和维护,因为它直接映射到你的 Java 对象模型。

示例

假设你有一个 Customer 类,你可以使用 HQL 来查询所有姓氏为 “Smith” 的客户:

String hql = "FROM Customer WHERE lastName = :lastName";
Query query = session.createQuery(hql);
query.setParameter("lastName", "Smith");
List<Customer> customers = query.list();
  • 1
  • 2
  • 3
  • 4

2. Criteria API

Criteria API 是一种更面向对象的查询构建方式。它允许你使用流式 API 来创建查询条件,而不需要手动拼接字符串。Criteria API 可以用来创建复杂的查询条件,而且更加类型安全。

示例

使用 Criteria API 查询所有姓氏为 “Smith” 的客户:

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Customer> criteriaQuery = builder.createQuery(Customer.class);
Root<Customer> root = criteriaQuery.from(Customer.class);

Predicate predicate = builder.equal(root.get("lastName"), "Smith");
criteriaQuery.where(predicate);

TypedQuery<Customer> typedQuery = session.createQuery(criteriaQuery);
List<Customer> customers = typedQuery.getResultList();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

示例:HQL 和 Criteria API 的比较

为了更好地理解这两种查询方式的区别,我们来比较一下使用 HQL 和 Criteria API 来执行相同查询的情况。

假设我们有一个 Customer 类,包含 firstNamelastName 属性,我们想要查询所有姓氏为 “Smith” 的客户。

使用 HQL
String hql = "FROM Customer WHERE lastName = :lastName";
Query query = session.createQuery(hql);
query.setParameter("lastName", "Smith");
List<Customer> customers = query.list();
  • 1
  • 2
  • 3
  • 4
使用 Criteria API
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Customer> criteriaQuery = builder.createQuery(Customer.class);
Root<Customer> root = criteriaQuery.from(Customer.class);

Predicate predicate = builder.equal(root.get("lastName"), "Smith");
criteriaQuery.where(predicate);

TypedQuery<Customer> typedQuery = session.createQuery(criteriaQuery);
List<Customer> customers = typedQuery.getResultList();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

总结

  • HQL:更适合编写简单的查询语句,类似于 SQL,但面向对象。
  • Criteria API:适合编写更复杂的查询条件,类型安全,易于维护。

其他查询方式

除了 HQL 和 Criteria API 之外,Hibernate 还支持其他的查询方式:

  • Native SQL:直接使用 SQL 查询语句,适用于那些无法用 HQL 或 Criteria API 表达的复杂查询。
  • Named Queries:可以在实体类或映射文件中定义命名查询,以便在整个应用程序中重用。

示例:使用 Native SQL

SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM customer WHERE last_name = :lastName");
sqlQuery.setParameter("lastName", "Smith");
sqlQuery.addEntity(Customer.class);
List<Customer> customers = sqlQuery.list();
  • 1
  • 2
  • 3
  • 4

示例:使用 Named Queries

在实体类或映射文件中定义命名查询:

@Entity
@Table(name = "customers")
@NamedQueries({
    @NamedQuery(name = "Customer.findByLastName", query = "FROM Customer WHERE lastName = :lastName")
})
public class Customer {
    // ...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

然后在代码中调用命名查询:

Query query = session.getNamedQuery("Customer.findByLastName");
query.setParameter("lastName", "Smith");
List<Customer> customers = query.list();
  • 1
  • 2
  • 3

总结

HQL 和 Criteria API 是 Hibernate 提供的两种标准查询方式。HQL 更接近 SQL 语法,而 Criteria API 更加面向对象并且类型安全。根据你的具体需求,可以选择最适合的查询方式来构建你的应用程序。如果你需要更详细的示例或者特定场景下的查询,请随时告诉我。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/938282
推荐阅读
相关标签
  

闽ICP备14008679号