Hibernate QBC的检索方式:组合查询和分页查询

朱雀 2021-01-14 04:47 1880阅读 0赞

前面我们已经详细介绍过 Criteria 接口的功能及使用步骤,并通过示例演示了条件查询,接下来将对 QBC 中的其他两种常用的检索方式进行讲解。

组合查询

组合查询是指通过 Restrictions 工具类的相应方法动态地构造查询条件,并将查询条件加入 Criteria 对象,从而实现查询功能。

下面通过具体案例演示如何实现 QBC 检索中的组合查询。在 com.mengma.test 包下,创建一个名为 QBCTest 的类,在该类下添加一个 test1() 方法,该方法用于查询 id 为 3 或者 name 为 wangwu 的用户信息,如下所示。

  1. package com.mengma.test;
  2. import java.util.List;
  3. import org.hibernate.Criteria;
  4. import org.hibernate.Session;
  5. import org.hibernate.criterion.Criterion;
  6. import org.hibernate.criterion.Restrictions;
  7. import org.junit.Test;
  8. import com.mengma.domain.HibernateUtils;
  9. import com.mengma.domain.User;
  10. public class QBCTest {
  11. // 组合查询
  12. @Test
  13. public void testl() {
  14. Session session = HibernateUtils.getSession();
  15. session.beginTransaction();
  16. Criteria criteria = session.createCriteria(User.class);
  17. Criterion criterion = Restrictions.or(Restrictions.eq("id", 3),
  18. Restrictions.eq("name", "wangwu")); // 设定查询条件
  19. criteria.add(criterion); // 添加查询条件
  20. List<User> list = criteria.list(); // 执行查询,返回查询结果
  21. for (User u : list) {
  22. System.out.println(u);
  23. }
  24. session.getTransaction().commit();
  25. session.close();
  26. }
  27. }

上述代码中,使用了 Restrictions 对象编写查询条件,并将查询条件加入到了 Criteria 对象中。使用 JUnit 测试运行 test1() 方法,运行成功后,控制台的输出结果如图 1 所示。

输出结果
图 1 输出结果

从图 1 的显示结果中可以看出,符合查询条件的记录共有两条。

需要注意的是,QBC 检索是使用 Restrictions 对象编写查询条件的,上述代码中的 Restrictions.or 方法类似于 SQL 语句中的 or 关键字,Restrictions.eq 方法类似于 SQL 语句中的等于。除了这两个方法以外,在 Restrictions 类中还提供了大量的静态方法创建查询条件,如表 1 所示。

方法名 说 明
Restrictions.allEq 使用 Map 和 key/value 进行多个等于的比较
Restrictions.gt 大于 >
Restrictions.ge 大于等于 >=
Restrictions.lt 小于
Restrictions.le 小于等于 <=
Restrictions.between 对应 SQL 的 between 子句
Restrictions.like 对应 SQL 的 like 子句
Restrictions.in 对应 SQL 的 IN 子句
Restrictions.and and 关系
Restrictions.sqlRestriction SQL 限定查询

分页查询

除了使用 HQL 可以实现分页功能以外,还可以通过 QBC 实现分页。在 Criteria 对象中,通过 setFirstResult(int firstResult) 和 setMaxResult(int maxResult) 两个方法就可以实现分页查询。

下面通过一个具体示例演示如何使用 QBC 检索实现分页。在 QBCTest 类中添加一个名为 test2() 的方法,具体代码如下所示:

  1. // 分页查询
  2. @Test
  3. public void test2() {
  4. Session session = HibernateUtils.getSession(); // 得到一个Session
  5. session.beginTransaction();
  6. Criteria criteria = session.createCriteria(User.class); // 创建criteria对象
  7. criteria.setFirstResult(1); // 从第 2 条开始查询
  8. criteria.setMaxResults(3); // 查询 3 条数据
  9. List<User> list = criteria.list(); // 执行查询,返回查询结果
  10. for (User u : list) {
  11. System.out.println(u);
  12. }
  13. session.getTransaction().commit();
  14. session.close();
  15. }

在上述代码中,使用 setFirstResult(int firstResult) 方法指定从哪个对象开始检索,这里是从第 2 条开始的,所以索引值为 1。使用 setMaxResult(int maxResult) 方法指定一次最多检索对象的数量为 3,所以会查询出 3 条数据。

使用 JUnit 测试运行 test2() 方法,运行成功后,控制台的输出结果如图 2 所示。

输出结果
图 2 输出结果

发表评论

表情:
评论列表 (有 0 条评论,1880人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hibernateQBC查询

    最近不得不写一下,就因为一个简单的查询的功能,让没用过hibernate的QBC查询的我卡了三天,原因是没有用过,我在网上查了好多资料, 关于QBC查询的介绍、问题、少的可怜,