Mybatis 的分页插件 PageHelper失效问题

1、Mybatis 的分页插件 PageHelper

1)、导包
<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelperartifactId>
    <version>最新版本version>
dependency>
2)、代码中使用
@ApiOperation(value = "通过场所id查询从业人员列表", notes = "通过场所id查询从业人员列表")
@PostMapping(value = "/selectCyryBySydwid")
public AjaxResult selectCyryBySydwid(@RequestBody JSONObject json) {
	// PageHelper.startPage()放在查询之前
    PageHelper.startPage(json.getInt("pageName"), json.getInt("pageSize"));
	List<TbSydwCyry> cyry = sydwCyryService.selectCyryBySydwid(json);
	PageInfo<TbSydwCyry> cyryPageInfo = new PageInfo<>(cyry);

	return AjaxResult.success(cyryPageInfo);
}

MyBatis 分页插件 PageHelper官网: 如何使用分页插件

2、分页失效问题

在上述代码中,如果sydwCyryService.selectCyryBySydwid()方法中,存在多个select查询,会造成分页失效

3、解决方法里多个查询造成的分页失效问题

自定义一个分页工具类

使用方式:

@ApiOperation(value = "通过场所id查询从业人员列表", notes = "通过场所id查询从业人员列表")
@PostMapping(value = "/selectCyryBySydwid")
public AjaxResult selectCyryBySydwid(@RequestBody JSONObject json) {
	List<TbSydwCyry> cyry = sydwCyryService.selectCyryBySydwid(json);
	Map<String, Object> pageResult = PageUtil.getPageResult(cyry, json.getInt("pageSize"),
		json.getInt("pageName"));

	return AjaxResult.success(pageResult);
}

PageUtil 工具类

package com.lzby.tqj.common.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 分页工具类,解决 PageHelper 一个方法多个查询失效问题
 *      PageHelper用法:
 *          PageHelper.startPage(int pageName, int pageSize));
 *          List cyry = sydwCyryService.selectCyryBySydwid(json);
 *          PageInfo cyryPageInfo = new PageInfo<>(cyry);
 *          return AjaxResult.success(cyryPageInfo);
 *
 *     自定义PageUtil用法:
 *          List tccList = sydwTccService.getTccList(json);
 *          Map pageResult = PageUtil.getPageResult(tccList, int pageSize, int pageName));
 *
 * @Author: TangHX
 * @date 2021/11/30 16:38
 **/
public class PageUtil {

    /**
     * 手动分页类
     *
     * @param datas    查询数据
     * @param pageSize 每页数量
     * @param pageName 页码
     * @return
     */
    public static <T> List<T> getPageSizeData(List<T> datas, int pageSize, int pageName) {
        //起始截取数据位置
        int startNum = (pageName - 1) * pageSize + 1;
        if (startNum > datas.size()) {
            return null;
        }
        List<T> res = new ArrayList<>();
        int rum = datas.size() - startNum;
        if (rum < 0) {
            return null;
        }
        //最后一个了
        if (rum == 0) {
            int index = datas.size() - 1;
            res.add(datas.get(index));
            return res;
        }
        //剩下的数据还够1页,返回整页的数据
        if (rum / pageSize >= 1) {
            //截取从startNum开始的数据
            for (int i = startNum; i < startNum + pageSize; i++) {
                res.add(datas.get(i - 1));
            }
            return res;
            //不够一页,直接返回剩下数据
        } else if ((rum / pageSize == 0) && rum > 0) {
            for (int j = startNum; j <= datas.size(); j++) {
                res.add(datas.get(j - 1));
            }
            return res;
        } else {
            return null;
        }
    }

    /**
     * 封装分页结果
     *
     * @param list     查询结果
     * @param pageSize 每页数量
     * @param pageName 页码
     * @date 2021/11/30 16:21
     **/
    public static Map<String, Object> getPageResult(List list, int pageSize, int pageName) {
        //使用工具类得到分页后的每页结果集
        List data = PageUtil.getPageSizeData(list, pageSize, pageName);
        Map<String, Object> map = new HashMap<>();
        //总条数
        int size = list.size();
        //总页数
        int totlePage = size / pageSize;
        //取余
        int i = size % pageSize;
        if (i > 0) {
            totlePage += 1;
        }
        //结果集
        map.put("list", data);
        //总页数
        map.put("pages", totlePage);
        //页码
        map.put("pageNum", pageName);
        //每页显示条数
        map.put("pageSize", pageSize);
        //总条数
        map.put("total", size);
        return map;
    }
}

你可能感兴趣的:(Java基础知识,java,开发语言,后端)