使用TypedQuery查询时,如何获得分页信息(当前页,总页数,记录总数)
时间: 2023-12-03 12:02:12 浏览: 113
在使用 TypedQuery 进行分页查询时,可以通过以下步骤获取分页信息:
1. 在查询之前,先查询符合条件的记录总数,例如:
```
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> countQuery = criteriaBuilder.createQuery(Long.class);
countQuery.select(criteriaBuilder.count(countQuery.from(EcuFileInfo.class)));
countQuery.where(predicates.toArray(new Predicate[predicates.size()]));
Long count = entityManager.createQuery(countQuery).getSingleResult();
```
2. 在查询时,设置分页参数,例如:
```
TypedQuery<EcuFileInfo> typedQuery = entityManager.createQuery(criteriaQuery);
typedQuery.setFirstResult((condition.PageIndex - 1) * condition.PageSize);
typedQuery.setMaxResults(condition.PageSize);
List<EcuFileInfo> result = typedQuery.getResultList();
```
其中,setFirstResult 方法设置查询结果的起始位置,setMaxResults 方法设置每页显示的记录数。
3. 根据查询结果和记录总数计算分页信息,例如:
```
int totalPage = (int) Math.ceil((double) count / condition.PageSize);
int currentPage = condition.PageIndex;
int totalCount = count.intValue();
```
其中,totalPage 表示总页数,count 表示记录总数,currentPage 表示当前页,totalCount 表示符合条件的记录总数。
需要注意的是,第一步和第二步的查询语句需要使用相同的查询条件和排序条件,以确保查询结果的正确性。同时,为了提高分页查询的效率,可以使用缓存机制缓存查询结果。
阅读全文