pagehelper 分页实现真假分页


借鉴博客:https://www.jianshu.com/p/64657c9da39f

添加分页插件依赖:pagehelper


                com.github.pagehelper
                pagehelper
                4.1.1
            

1、真分页:它在数据库里使用limit进行处理,算是在数据库中就分好页拿相应数据

 @Override
    public IPage page(PageTimeTemplateBo bo) {
        boolean isSysAdmin = isSystemAdmin(null);
        PageHelper.startPage(bo.getPageNum(), bo.getPageSize());
        List timeTemplateVos = timeTemplateMapper.findPage(bo,isSysAdmin,CurrentUserUtil.currentUserId());
        PageInfo pageInfo = new PageInfo(timeTemplateVos);
        if (CollectionUtil.isEmpty(timeTemplateVos)) {
            return new Page<>();
        }
        //转换分页类
        Page timeTemplateVoPage = new Page<>();
        timeTemplateVoPage.setTotal(pageInfo.getTotal());
        timeTemplateVoPage.setRecords(pageInfo.getList());
        timeTemplateVoPage.setSize(pageInfo.getSize());
        return timeTemplateVoPage;
    }

  真分页比假分页效率高。

 2、假分页:有时候会出现这样的情况:就是没办法在数据库中分好页拿数据,而是要先把所有数据查出来,然后再对list结果数据进行分页,          

         主要创建一个Page对象,然后给page设置相应的分页参数:pageIndex、pageSize

    再根据页码参数pageIndex和每页显示数pageSize,用list.subList()计算拿到当前页数据的起始下标数据,把数据放入page对象中

    最后把分好页的page对象放入PageInfo对象中返回

/**
     * @Description: 手动实现分页
     * @param list  所有数据
     * @param pageNum  分页页码
     * @param pageSize  分页条数
     **/
    public  PageInfo startPage(List list, Integer pageNum, Integer pageSize) {
        //创建Page类
        com.github.pagehelper.Page page = new com.github.pagehelper.Page(pageNum, pageSize);
        //为Page类中的total属性赋值
        page.setTotal(list.size());
        //计算当前需要显示的数据下标起始值
        int startIndex = (pageNum - 1) * pageSize;
        int endIndex = Math.min(startIndex + pageSize, list.size());
        //从链表中截取需要显示的子链表,并加入到Page
        page.addAll(list.subList(startIndex,endIndex));
        //以Page创建PageInfo
        PageInfo pageInfo = new PageInfo<>(page);
        return pageInfo;
    }

// 调用完 再进行封装
       Page deviceOfflineStatisticsVoPage = new Page<>();
        deviceOfflineStatisticsVoPage.setTotal(pageInfo.getTotal());
        deviceOfflineStatisticsVoPage.setRecords(pageInfo.getList());
        deviceOfflineStatisticsVoPage.setSize(pageInfo.getSize());
        return deviceOfflineStatisticsVoPage;

相关