pagehelper里的PageInfo自定义分页

7 篇文章 0 订阅
6 篇文章 0 订阅
 前因:因为数据库里的表数据过大,每条查询需要2秒以上,如果用mybatis内置的分页,就相当于要查两次数据库(原理先count 再查故两次) 所以就自己实现分页,不用mybatis的分页

package com.xxx.utils;

import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

public class PageUtil {
    //手动分页 自定义方法
    public static PageInfo pageInfo(Integer page, Integer pageSize1, List list){
        // 手动封装PageInfo参数进行分页
        PageInfo realPageInfo = new PageInfo<Map<String,Object>>(list);
        int start = 0;
        int end = 0;
        int totalPages = 0;
        int totalRecord = 0;
        int pageSize = 0;
        int size  = 0;
        int number = 0;
        size  = pageSize1;
        number = page;
        pageSize = pageSize1;
        totalRecord = list.size();
        //设置总数
        realPageInfo.setTotal(totalRecord);
        //设置每页的显示条数
        realPageInfo.setPageSize(size);
        //设置要显示的是第几页的数据
        realPageInfo.setPageNum(number);
        realPageInfo.setSize(totalRecord);
        //计算获取对应的要显示的数据
        if(totalRecord%pageSize==0){
            totalPages = totalRecord / pageSize;
        }else {
            totalPages = totalRecord / pageSize + 1;
        }
        realPageInfo.setPages(totalPages);
        //初始边界值计算
        if (number == 1){
            start = 0;
            realPageInfo.setHasPreviousPage(false);
            realPageInfo.setPrePage(0);
            realPageInfo.setIsFirstPage(true);
        }else {
            start = realPageInfo.getPageSize()*(realPageInfo.getPageNum()-1);
            realPageInfo.setHasPreviousPage(true);
            realPageInfo.setPrePage(number-1);
            realPageInfo.setIsFirstPage(false);
        }
        realPageInfo.setStartRow((number-1)*pageSize);
        //结束边界值计算
        if ((start+realPageInfo.getPageSize() > realPageInfo.getTotal())){
            end = totalRecord;
            realPageInfo.setHasNextPage(false);
            realPageInfo.setIsLastPage(true);
            realPageInfo.setEndRow(totalRecord);
        }else {
            end = start + realPageInfo.getPageSize();
            realPageInfo.setHasNextPage(true);
            realPageInfo.setNextPage(number + 1);
            realPageInfo.setIsLastPage(false);
            realPageInfo.setEndRow((number)*pageSize);
        }
        if (start < end && end <= totalRecord){
            realPageInfo.setList(list.subList(start,end));
        }
        if(realPageInfo.getSize() == 0) {
            realPageInfo.setStartRow(0);
            realPageInfo.setEndRow(0);
        } else {
            realPageInfo.setStartRow(realPageInfo.getStartRow() + 1);
            realPageInfo.setEndRow(realPageInfo.getStartRow()-1+realPageInfo.getSize());
        }
        realPageInfo.setPages(totalPages);
        realPageInfo.setNavigateLastPage(totalPages>number?number+1:totalPages);
        return realPageInfo;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值