孙卫琴的《精通JPA与Hibernate》的读书笔记:JPA 分页查询

当批量查询数据时(例如查询CUSTOMERS表中所有记录),如果数据量很大,会导致无法在用户终端的单个页面上显示所有的查询结果,此时需要对查询结果分页。假如CUSTOMER表中有99条记录,可以在用户终端上分10页来显示结果,每一页最多只显示10个Customer对象,用户既可以导航到下一页,也可以导航到前一页。

Query接口提供了用于分页获取查询结果的方法:

  • setFirstResult(int firstResult):设定从哪一个对象开始检索,参数firstResult表示这个对象在查询结果中的索引位置,索引位置的起始值为0。在默认情况下,Query接口从查询结果中的第一个对象,也就是索引位置为0的对象开始检索。
  • setMaxResults(int maxResults):设定一次最多检索出的对象数目。在默认情况下,Query接口检索出查询结果中所有的对象。

以下代码从查询结果的起始对象开始,共检索出10个Customer对象,查询结果按照name属性排序:

//采用JPQL检索方式
TypedQuery<Customer> query = entityManager.createQuery(
             "from Customer c order by c.name asc",Customer.class);
query.setFirstResult(0);
query.setMaxResults(10);
List<Customer> result = query.getResultList();

//采用QBC检索方式
CriteriaQuery<Customer> criteriaQuery =
      criteriaBuilder.createQuery(Customer.class);    
Root<Customer> root = criteriaQuery.from(Customer.class );
criteriaQuery.select(root);  

javax.persistence.criteria.Order order=
   criteriaBuilder.asc(root.get(Customer_.name));
criteriaQuery.orderBy(order);  //指定排序方式

TypedQuery<Customer> query=entityManager.createQuery(criteriaQuery);
query.setFirstResult(0);
query.setMaxResults(10);
List<Customer> result=query.getResultList();

如果查询结果中共有99个Customer对象,那么在result中包含10个Customer对象,第1个对象在查询结果中的索引位置为0,第10个对象在查询结果中的索引位置为9。

以下代码从查询结果中索引位置为97的对象开始,共检索出10个Customer对象:

//采用JPQL检索方式
TypedQuery<Customer> query = entityManager.createQuery(
                "from Customer c order by c.name asc",Customer.class);
query.setFirstResult(97);
query.setMaxResults(10);
List<Customer> result = query.getResultList();

//采用QBC检索方式
……
TypedQuery<Customer> query=entityManager.createQuery(criteriaQuery);
query.setFirstResult(97);
query.setMaxResults(10);
List<Customer> result = query.getResultList();

如果查询结果中共有99个对象,那么在result中只包含两个Customer对象,它们的索引位置分别为97和98。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙卫琴书友会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值