【分页插件】分页工具类的使用

在生产中查询出的List集合数据需要分页传到前端。


一、分页工具类

/**
 * 分页工具类
 */
public class PayUtil {

  /**
   * 转换WrapperResponse<PageResult>里面的dto
   *
   * @param res   需要装换的WrapperResponse<PageResult<K>>
   * @param clazz 装换目标dto对象
   * @return WrapperResponse<PageResult < T>
   */
  public static <K, T> WrapperResponse<PageResult<T>> convertWrapperPageResultData(WrapperResponse<PageResult<K>> res, Class<T> clazz) {
    //新建WrapperResponse对象
    WrapperResponse<PageResult<T>> response = new WrapperResponse<>();
    //设置WrapperResponse对象的属性值
    response.setCode(res.getCode());
    response.setType(res.getType());
    response.setMessage(res.getMessage());
    //入参PageResult对象
    PageResult<K> pageParam = res.getData();
    //新建PageResult对象
    PageResult<T> page = new PageResult<>();
    //设置PageResult对象的属性值
    page.setPageNum(pageParam.getPageNum());
    page.setPageSize(pageParam.getPageSize());
    page.setSize(pageParam.getSize());
    page.setStartRow(pageParam.getStartRow());
    page.setEndRow(pageParam.getEndRow());
    page.setPages(pageParam.getPages());
    page.setRecordCounts(pageParam.getRecordCounts());
    page.setFirstPage(pageParam.isFirstPage());
    page.setLastPage(pageParam.isLastPage());
    //设置WrapperResponse对象的data值
    response.setData(page);
    //流处理dto装换
    List<T> castList = res.getData().getData().stream().map(
        dto -> (T) PowerBeanHelper.convertToBean(dto, clazz)
    ).collect(Collectors.toList());
    //设置PageResult对象的data值
    page.setData(castList);
    //返回结果
    return response;
  }

  /**
   * WrapperResponse<List>转换为分页对象WrapperResponse<PageResult>
   *
   * @param res      要装换的WrapperResponse<List<T>>
   * @param pageNum  分页数
   * @param pageSize 分页大小
   * @return WrapperResponse<PageResult < T>>
   */
  public static <T> WrapperResponse<PageResult<T>> convertWrapperListToPageResult(WrapperResponse<List<T>> res, int pageNum, int pageSize) {
    //新建WrapperResponse对象
    WrapperResponse<PageResult<T>> response = new WrapperResponse<>();
    //设置WrapperResponse对象的属性值
    response.setCode(res.getCode());
    response.setType(res.getType());
    response.setMessage(res.getMessage());
    //新建PageResult对象
    PageResult<T> page = convertListToPageResult(res.getData(), pageNum, pageSize);
    //置WrapperResponse对象的data值
    response.setData(page);
    return response;
  }

  /**
   * List转换为分页对象PageResult
   *
   * @param list     要装换的List<T>
   * @param pageNum  分页数
   * @param pageSize 分页大小
   * @return PageResult < T>
   */
  public static <T> PageResult<T> convertListToPageResult(List<T> list, int pageNum, int pageSize) {
    //总数据条数
    int recordCounts = 0;
    if(CollUtil.isNotEmpty(list)){
      recordCounts=list.size();
    }
    //取数据开始行数
    int startRow = (pageNum - 1) * pageSize;
    //取数据结束行数
    int endRow = pageNum * pageSize;
    //分页后的数据结果
    List<T> filterList = new ArrayList<>();
    //for循环取过滤数据
    for (int i = startRow; i < endRow; i++) {
      if (i < recordCounts) {
        filterList.add(list.get(i));
      } else {
        break;
      }
    }
    //分页后的数据结果集
    int filterSize = 0;
    if(CollUtil.isNotEmpty(filterList)){
      filterSize= filterList.size();
    }
    //新建PageResult对象
    PageResult<T> page = new PageResult<>();
    //设置PageResult对象的属性值
    page.setPageNum(pageNum);
    page.setPageSize(pageSize);
    page.setSize(filterSize);
    page.setStartRow(filterSize > 0 ? (startRow + 1) : 0);
    page.setEndRow(filterSize > 0 ? (startRow + filterSize) : 0);
    page.setPages((recordCounts / pageSize) + (recordCounts % pageSize == 0 ? 0 : 1));
    page.setRecordCounts(recordCounts);
    page.setFirstPage(pageNum == 1);
    page.setLastPage(page.getPages() == pageNum);
    page.setData(filterList);
    return page;
  }

  /**
   * 数据库开启了分页查询出来的list对象转换为分页对象PageResult<T>
   *
   * @param pageRows 要装换的List<K>,数据库开启了分页查询出来的list对象
   * @param data     分页对象里面的data设值
   * @return PageResult<T>
   */
  public static <K, T> PageResult<T> convertPageListToPageResult(List<K> pageRows, List<T> data) {
    //获取查询的分页信息
    PageInfo<K> pageHelper = new PageInfo<>(pageRows);
    //创建分页对象
    PageResult<T> res = new PageResult<>();
    //分页对象赋值
    res.setPageNum(pageHelper.getPageNum());
    res.setPageSize(pageHelper.getPageSize());
    res.setSize(pageHelper.getSize());
    res.setStartRow(pageHelper.getStartRow());
    res.setEndRow(pageHelper.getEndRow());
    res.setPages(pageHelper.getPages());
    res.setRecordCounts((int) pageHelper.getTotal());
    res.setFirstPage(pageHelper.isIsFirstPage());
    res.setLastPage(pageHelper.isIsLastPage());
    res.setData(data);
    return res;
  }



  public static <T> PageResultData<T> convertPageResultData(int recordCounts, int pageSize, int pageNum, List<T> filterData) {
    //总数据条数
    //取数据开始行数
    int startRow = (pageNum - 1) * pageSize;
    //分页后的数据结果集
    //新建PageResult对象
    int filterSize =filterData.size();
    PageResultData<T> page = new PageResultData<>();
    //设置PageResult对象的属性值
    page.setPageNum(pageNum);
    page.setPageSize(pageSize);
    page.setSize(filterSize);
    page.setStartRow(filterSize > 0 ? (startRow + 1) : 0);
    page.setEndRow(filterSize > 0 ? (startRow + filterSize) : 0);
    page.setPages((recordCounts / pageSize) + (recordCounts % pageSize == 0 ? 0 : 1));
    page.setRecordCounts(recordCounts);
    page.setFirstPage(pageNum == 1);
    page.setLastPage(page.getPages() == pageNum);
    page.setData(filterData);
    return page;
  }

  public static <T> PageResult<T> convertPageResult(int recordCounts,int pageSize,int pageNum,List<T> filterData) {
    //总数据条数
    //取数据开始行数
    int startRow = (pageNum - 1) * pageSize;
    //分页后的数据结果集
    //新建PageResult对象
    int filterSize =filterData.size();
    PageResult<T> page = new PageResult<>();
    //设置PageResult对象的属性值
    page.setPageNum(pageNum);
    page.setPageSize(pageSize);
    page.setSize(filterSize);
    page.setStartRow(filterSize > 0 ? (startRow + 1) : 0);
    page.setEndRow(filterSize > 0 ? (startRow + filterSize) : 0);
    page.setPages((recordCounts / pageSize) + (recordCounts % pageSize == 0 ? 0 : 1));
    page.setRecordCounts(recordCounts);
    page.setFirstPage(pageNum == 1);
    page.setLastPage(page.getPages() == pageNum);
    page.setData(filterData);
    return page;
  }

  /**
   * @Description 對結果集進行分頁處理
   * @param data 結果list
   * @param total 縂條數
   * @param pageSize 每頁條數
   * @param pageNum 頁碼
   * @return cn.hsa.hsaf.core.framework.util.PageResult<T>
   */
  public static<T> PageResult<T> dealPages(List<T> data,Integer total,Integer pageNum,Integer pageSize){

    //总页数
    int pages = (total / pageSize) + (total % pageSize == 0 ? 0 : 1);
    //当前页开始行
    int startRow = (pageNum - 1) * pageSize + 1;
    //当前页结束行
    int endRow = pageNum * pageSize;

    //创建分页对象
    PageResult<T> res = new PageResult<>();
    //分页对象赋值
    res.setPageNum(pageNum);
    res.setPageSize(pageSize);
    res.setStartRow(startRow);
    res.setEndRow(endRow);
    res.setPages(pages);
    res.setRecordCounts(total);
    res.setFirstPage(pageNum == 1);
    res.setLastPage(pageNum == pages);
    res.setData(data);

    return res;
  }
}

二、分页工具的使用

 public PageResult<SpPsnRwDfrDDTO> queryRewardsInfo(QSpPsnRwDfrDDTO qSpPsnRwDfrDDTO) {
        //设置分页参数
        PageHelper.startPage(qSpPsnRwDfrDDTO.getPageNum(), qSpPsnRwDfrDDTO.getPageSize());
        Page<SpPsnRwDfrDDTO> result;
        //入参校验
        if (PowerStringUtils.isBlank(qSpPsnRwDfrDDTO.getValiFlag())) {
            throw new HygeiaException("有效标志不能为空");
        }

        result = specialPeopleRewardsDAO.queryRewardsInfo(qSpPsnRwDfrDDTO);

        if (CollectionUtils.isEmpty(result)) {
            return PayUtil.convertPageResult(0, qSpPsnRwDfrDDTO.getPageSize(), qSpPsnRwDfrDDTO.getPageNum(), new Page<>());
        } else {
            return PayUtil.convertPageResult((int) result.getTotal(), qSpPsnRwDfrDDTO.getPageSize(), qSpPsnRwDfrDDTO.getPageNum(), result);
        }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis-Plus 是 Mybatis 的增强工具,在 Mybatis 的基础上扩展了很多实用的功能,其中包括分页插件使用 Mybatis-Plus 分页插件非常简单,只需要按照以下步骤操作即可: 1. 在 pom.xml 文件中添加 Mybatis-Plus 和分页插件的依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.6</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.0.6</version> </dependency> ``` 2. 在 Mybatis 的配置文件中添加分页插件的配置: ```xml <plugins> <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"> <property name="dialec" value="mysql"/> </plugin> </plugins> ``` 3. 在代码中使用分页查询: ```java // 构造分页对象 Page<User> page = new Page<>(1, 10); // 执行分页查询 IPage<User> userPage = userMapper.selectPage(page, new QueryWrapper<User>().lambda().ge(User::getAge, 18)); // 获取分页结果 List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); ``` 以上代码中,首先构造了一个分页对象 `Page<User>`,该对象表示要查询第 1 页,每页 10 条记录。然后使用 `selectPage` 方法执行分页查询,该方法的第一个参数是分页对象,第二个参数是查询条件。最后通过 `userPage` 对象获取分页结果。 注意,在查询条件中使用了 `QueryWrapper`,这是 Mybatis-Plus 提供的一个方便构建查询条件的工具类。 以上就是使用 Mybatis-Plus 分页插件的基本步骤,希望能帮到你。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值