PageHelper教你做人

本文最后更新于:2 年前

SpringBoot配置Mybatis-PageHelper

PageHelper的正确使用方式

PageHelper必须要跟上一个从数据库进行查询的语句,因为PageHelper的底层就是对数据库的语法上添加Limit进行分页,绝对不要随便跟一个集合,因为这根本不会起作用

String orderBy = "create_time desc";
// 开启分页插件
PageHelper.startPage(pageNum, pageSize, orederBy);
// 查询数据,获取list集合
List<TravelRecordResponseVo> list = sysEnterpriseService.selectSysEnterpriseList(sysEnterprise);
// 封装pageInfo对象
return AjaxResult.success(new PageInfo(list));

PageHelper的限制

  1. PageHelper.startPage(1,10);只对该语句以后的第一个查询语句得到的数据进行分页,就算你在PageInfo pa = new PageInfo(“”,对象);语句里面的对象是写的最终得到的数据,该插件还是只会对第一个查询所查询出来的数据进行分页

  2. 第一个查询语句是指什么呢?举个例子吧,比如你有一个查询数据的方法,写在了PageHelper.startPage(1, 10);下面.但是这个查询方法里面包含两个查询语句的话,该插件就只会对第一查询语句查询的数据进行分页,而不是对返回最终数据的查询与基础查询出来的数据进行分页

  3. 改变一下自己的代码结构,让最终需要的数据所需要的查询语句放在PageHelper.startPage(1, 10)下面就行

普通List集合解决分页的方法

/**
 * 集合数据分页
 * @param dataList  数据集合
 * @param pageSize  页大小
 * @param pageNum   当前页
 * @param sort      asc升序 desc降序
 * @return
 */
public static List<Object> pageHelp(List<Object> dataList, int pageSize, int pageNum, String sort) {
    // 进行集合反转
    if (StringUtils.isNotNull(sort) && StringUtils.isNotEmpty(sort) && "desc".equals(sort)) {
        Collections.reverse(dataList);
    }
    // 进行循环截取
    List<Object> currentPageList = new ArrayList<>();
    if (dataList != null && dataList.size() > 0) {
        int currIdx = (pageNum > 1 ? (pageNum - 1) * pageSize : 0);
        for (int i = 0; i < pageSize && i < dataList.size() - currIdx; i++) {
            Object data = dataList.get(currIdx + i);
            currentPageList.add(data);
        }
    }
    return currentPageList;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!其他问题请通过下方微信联系!

 目录