• pagehelper 分页实现真假分页


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

    添加分页插件依赖:pagehelper

    <dependency>
                    <groupId>com.github.pagehelper</groupId>
                    <artifactId>pagehelper</artifactId>
                    <version>4.1.1</version>
                </dependency>

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

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

  • 相关阅读:
    hash算法
    TCP/IP四层与OSI七层模型
    di
    VSCode安装程序——java开发
    java中的多线程
    C#ThreadPool类—多线程
    学习-思考
    DataTable通过Select进行过滤
    javascript遍历对象属性
    WebClient 与HttpClient 的区别
  • 原文地址:https://www.cnblogs.com/spll/p/16312220.html
Copyright © 2020-2023  润新知