6、实现通用分页功能二(实现通用分页查询的业务方法)
【6、实现通用分页功能二(实现通用分页查询的业务方法)】基本思路:
当一个用户提交的分页查询请求过来时,通常带有请求的页码、过滤条件、排序要求等信息。我们可以在控制层,即在action类相应方法中,把上面的请求信息封闭成一个HQL语句,然后传给业务层的分页查询方法,由分页查询方法返回一个Page对象,这个对象里面就包括了需要在页面中显示的所有内容。
在业务层的分页查询方法中,为了封装一个Page对象,需要查询符合条件的总记录数和当前页的记录,所以在控制层中需要生成两条HQL语句,并且还要传相关的HQL语句参数过来。针对这个需求,我们可以创建一个工具类HqlHelper来负责生成这些HQL语句。
考虑到通用性,我们可以将分页查询方法放在BaseDao接口中。
一、创建HqlHelper工具类
package com.charlie.shop.util;
import java.util.ArrayList;
import java.util.List;
/**
* 这个类负责拼接分页查询的hql语句
* @author charlie
*
*/
public class HqlHelper {
/**查询数据列hql语句**/
private String listHql;
/**查询符合条件的总记录数的HQL语句**/
private String countHql;
/**HQL语句的参数数组**/
private List
二、BaseDao接口中添加分页查询方法
/**
* 分页查询方法
*/
public Page getByPage(int pageNow,HqlHelper hqlHelper);
三、在BaseDaoImp类中实现分页查询方法
分三步实现:
1、查询符合条件的总记录数
2、查询符合条件的数据
3、封装到Page对象中,并返回
// 在分页查询中,每一页显示的记录数,默认是10
protected int pageSize = 10;
@Override
public Page getByPage(int pageNow, HqlHelper hqlHelper) {
int maxResults = pageSize;
int firstResult = (pageNow-1)*pageSize;
int recordCount = getRecordCount(hqlHelper.getCountHql(),hqlHelper.getParameters());
List recordList = getPageData(hqlHelper.getListHql(), hqlHelper.getParameters(), firstResult, maxResults);
Page page = new Page(pageNow, pageSize, recordCount, recordList);
return page;
}
/**
* 查询符合条件的总记录数
*/
private int getRecordCount(String countHql,List params){
Query query = getSession().createQuery(countHql);
for(int i=0;
i getPageData(String hql,List params,int firstResult,int maxResults) {
Query query = getSession().createQuery(hql);
for(int i=0;
i
推荐阅读
- 一个多业务、多状态、多操作的交易链路(闲鱼架构这样演进)
- 趣旅(沖縄の旅-海钓、虚度在沖縄)
- 前端食堂技术周刊第|前端食堂技术周刊第 45 期(Vite3.0、第91次TC39会议、Figma背后的CSS、B 站事故复盘、图片优化工具)
- 【Netty】五、ChannelPipeline以及ChannelHandler
- 场景之分页查询设计
- vue2升级vue3(Vue|vue2升级vue3:Vue Demij打通vue2与vue3壁垒,构建通用组件)
- 意向不到的Dubug妙招
- 高级框架|分布式定时任务调度框架Quartz
- 她是主持人、金牌节目制作人和CEO,同时还是妻子和母亲
- 晨读感悟3.19