Java—手动实现分页查询功能

之前用SpringBoot+Mybatis可以很好的实现分页查询的功能,因为PageHelper只支持在Mybtis中使用,但是项目里不是用mybatis框架,于是自己用Java手动实现了分页查询的功能。

一、分析思路

假设每页展示10条数据,当我们展示第一页的数据的时候,展示前10条数据;点击第二页的时候,展示11-20的数据,依次类推,其实核心的部分是我们需要对取得的所有数据根据pageSize(每页显示页数)和pageNum(当前页数)计算出每一页的开始下标和结束下标,我们就可以轻松实现分页。

二、具体实现

1、创建需要分页的Page对象

import com.constants.GlobalConstant;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * 分页通用类
 */
@Data
public class PageBean<T> implements Serializable {
  private int pageNum;//当前页数
  private int pageSize = GlobalConstant.PAGE_SIZE;//每页显示数,这里是10
  private int totalPage;//总页数
  private int totalRecord;//总的记录数
  private List<T> data;//当前页面的数据集合
  private int start;
  private int end;
  public PageBean(int pageNum, int pageSize, int totalRecord){
    this.pageNum = pageNum;
    this.totalRecord = totalRecord;
      //计算总页数
    if (totalRecord % pageSize == 0){
      this.totalPage = totalRecord / pageSize;
    }else {
      this.totalPage = totalRecord / pageSize + 1;
    }
    //这里是核心,计算每页的起始下标
    this.start = (pageNum - 1) * pageSize;
    this.end = this.start + pageSize;
  }
}

2、控制层-Controller

@GetMapping("/getGlobalPersonPage")
@ApiOperation("根据全局参数获取成都或者地市——拓展商户排名数据——分页")
public  PageBean<PersonWeekData> getGlobalPersonPage(@RequestParam(name="globalParam") @ApiParam(name = "globalParam", value = "全局参数,成都还是地市") String globalParam,
                                               @RequestParam(name="pageNum") @ApiParam(name = "pageNum", value = "全局参数,成都还是地市") int pageNum){
  String weekTimeStr = MyUtils.getWeekTimeStr();
  PageBean<PersonWeekData> result = globalService.getGlobalPersonPage(globalParam, 		   weekTimeStr, pageNum);
  return result;
}

3、实现层-Imp

@Service("globalService")
public class GlobalServiceImpl implements GlobalService {
  @Override
  public PageBean<PersonWeekData> getGlobalPersonPage(String globalParam, String weekTimeStr, int  pageNum) {
    //获取所有拓展人也就是市场人员的数据-默认展示10个拓展人,剩下的拓展人数据为收缩状态,一共展示20个拓展人数据数据
    List<PersonWeekData> personWeekDataList = personResultDao.getAllPersonDataByGlobalParamAndWeekTime(globalParam, weekTimeStr);
    int size = 0;
    if (!CollectionUtils.isEmpty(personWeekDataList)){
      size  = personWeekDataList.size();
    }
    PageBean<PersonWeekData> pageBean = new PageBean<>(pageNum, GlobalConstant.PAGE_SIZE, size);
    List<PersonWeekData> data = new ArrayList<>();
    for (int i = pageBean.getStart(); i < pageBean.getEnd(); i++) {
      data.add(personWeekDataList.get(i));
    }
    pageBean.setData(data);
    return pageBean;
  }
}

4、数据返回

三、总结

综上所述,其实分页功能的实现很简单,哈哈哈,关键是要把基本思路和原理想清楚,然后自己再去手动实现一遍哦。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值