📜  Hibernate-条件查询(1)

📅  最后修改于: 2023-12-03 15:01:08.313000             🧑  作者: Mango

Hibernate-条件查询

Hibernate 是一个开源的对象关系映射框架,它的主要优势在于将数据保存到数据库中变得非常简单,同时提供了很多能让开发更加方便的特性。在 Hibernate 中,条件查询是我们获取数据的常用方式之一,它允许我们根据一组特定的条件来查找数据。

简介

在 Hibernate 中,条件查询通常是使用 Hibernate Criteria API 来实现的。Criteria API 提供了一种面向对象的方式来查询数据,它允许我们通过设置一些查询条件来指定我们想要查询的数据,并且可以对查询结果进行排序、分页等操作。

查询方式
创建 Criteria

要执行一个条件查询,我们首先需要创建一个 Criteria 对象:

Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(User.class);

以上代码将会创建一个 Criteria 对象,该对象指示 Hibernate 查询 User 实体的所有记录。

添加查询条件

Criteria 提供了一些非常方便的方法来设置查询条件,例如:

criteria.add(Restrictions.eq("name", "John"));

以上代码表示条件查询 Name 属性等于 John 的记录。

还可以使用更多的查询条件,比如:

// 大于等于 age 18 的记录
criteria.add(Restrictions.ge("age", 18));

// 模糊查询 name 属性中包含 "John" 的记录
criteria.add(Restrictions.like("name", "%John%"));

// 查询 id 属性值在 1 和 10 之间的记录
criteria.add(Restrictions.between("id", 1, 10));

// 条件查询联表
// 查询 User 和 Order 表的记录,且查询条件为 User.id = Order.userId
Criteria criteria = session.createCriteria(User.class);
criteria.createAlias("orders", "o", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.eqProperty("id", "o.userId"));
添加排序

除了查询条件, Criteria API 还允许我们对查询结果进行排序,例如:

// 对结果按照 age 属性升序排序
criteria.addOrder(Order.asc("age"));

// 对结果按照 age 和 name 属性都进行排序
criteria.addOrder(Order.asc("age").desc("name"));
添加分页

当我们处理大量数据的时候,通常需要对查询结果进行分页操作, Hibernate 还允许我们在 Criteria 查询中指定分页参数:

// 设置起始记录和返回记录的数量
criteria.setFirstResult(0);
criteria.setMaxResults(10);

以上代码表示我们需要查询结果集的第一条记录,以及获取 10 条记录。由于 Criteria API 支持链式调用,因此我们可以非常方便地组合多个查询参数,最后构建出一个完整的条件查询:

Session session = sessionFactory.openSession();

Criteria criteria = session.createCriteria(User.class);

// 设置查询条件
criteria.add(Restrictions.eq("name", "John"))
        .add(Restrictions.ge("age", 18));

// 添加排序
criteria.addOrder(Order.asc("age").desc("name"));

// 添加分页
criteria.setFirstResult(0)
        .setMaxResults(10);

List<User> list = criteria.list();
总结

在 Hibernate 中进行条件查询是十分常见的需求, Criteria API 提供了一种非常优雅的方式来实现这一点。基本上,我们可以使用 Criteria 来满足所有我们在查询中所需的操作,例如设置查询条件、排序和分页等。