使用PageHelper不允许出错,晓得伐?

很久之前出的一个问题了-使用pagehelper分页已经开启分页了,但是没有生效,一直没总结,直到今天看到一个wechat作者总结的一篇文章-在一定场景下回导致OOM,那么就来总结一下。
下方为Error Code:

/** @author sunshaocong */
@RestController
@RequestMapping("/test")
public class TestController {
    private final GpsService gpsService;
    private final UserService userService;

    public TestController(GpsService gpsService, UserService userService) {
        this.gpsService = gpsService;
        this.userService = userService;
    }

    @GetMapping("/page")
    public ResponseEntity<?> pageGps() {
        PageHelper.startPage(1, 10);
        userService.lambdaQuery().eq(User::getId, "5f09beaa2bbde45f19a0546b");
        List<Gps> gpsList = gpsService.getList(new QueryWrapper<>());
        PageInfo<Gps> gpsPages = new PageInfo<>(gpsList);
        return CommonResponse.success(gpsPages);
    }
}

正常逻辑来说,看到了开启分页并且设置页码为1页大小为10,那么在最终的gpsPages应该是返回一页,十条数据,但事实并非如此,实际的执行效果如下:

{
    "code": 200,
    "message": "ok",
    "data": {
        "total": 4743,
        "list": [
            {
                "id": "5f09beaa2bbde45f19a0546b",
                "date": "2020-12-05",
                "percentBetween85And92OfHRMaxDuration": "1:0:0",
                "percentOver85OfHRMaxDuration": "1:0:0",
                "percentBetween75And85OfHRMaxDuration": "1:0:0",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a0546b",
                "percentOver92OfHRMaxDuration": "1:0:0",
                "totalDuration": "1:0:0",
                "distanceBetween20And25": 1.0,
                "profileMaxHR": 1,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 1.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-05",
                "playerName": "胡嘉祺",
                "playerNameEn": "Hu Jiaqi"
            },
            {
                "id": "5f09beaa2bbde45f19a05473",
                "date": "2020-12-05",
                "percentBetween85And92OfHRMaxDuration": "0:0:2",
                "percentOver85OfHRMaxDuration": "0:0:2",
                "percentBetween75And85OfHRMaxDuration": "0:0:2",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a05473",
                "percentOver92OfHRMaxDuration": "0:0:2",
                "totalDuration": "0:0:2",
                "distanceBetween20And25": 1.0,
                "profileMaxHR": 1,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 11.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-05",
                "playerName": "孙胥卿",
                "playerNameEn": "Sun Yuqing"
            },
            {
                "id": "5f09beaa2bbde45f19a054cf",
                "date": "2020-12-05",
                "percentBetween85And92OfHRMaxDuration": "0:0:2",
                "percentOver85OfHRMaxDuration": "0:0:2",
                "percentBetween75And85OfHRMaxDuration": "0:0:2",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a054cf",
                "percentOver92OfHRMaxDuration": "0:0:2",
                "totalDuration": "0:0:2",
                "distanceBetween20And25": 1.0,
                "profileMaxHR": 11,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 1.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-05",
                "playerName": "马昆越",
                "playerNameEn": "Ma Kunyue"
            },
            {
                "id": "5f09beaa2bbde45f19a054d4",
                "date": "2020-12-01",
                "percentBetween85And92OfHRMaxDuration": "12:00:00",
                "percentOver85OfHRMaxDuration": "12:00:00",
                "percentBetween75And85OfHRMaxDuration": "12:00:00",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a054d4",
                "percentOver92OfHRMaxDuration": "12:00:00",
                "totalDuration": "12:00:00",
                "distanceBetween20And25": 11.0,
                "profileMaxHR": 1,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 1.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-01",
                "playerName": "王刚",
                "playerNameEn": "Wang Gang"
            },
            {
                "id": "5f09beaa2bbde45f19a054d8",
                "date": "2020-12-05",
                "percentBetween85And92OfHRMaxDuration": "0:0:6",
                "percentOver85OfHRMaxDuration": "0:0:6",
                "percentBetween75And85OfHRMaxDuration": "0:0:6",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a054d8",
                "percentOver92OfHRMaxDuration": "0:0:6",
                "totalDuration": "0:0:6",
                "distanceBetween20And25": 1.0,
                "profileMaxHR": 1,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 1.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-05",
                "playerName": "李磊",
                "playerNameEn": "Li Lei"
            },
            {
                "id": "5f09beaa2bbde45f19a054d9",
                "date": "2020-12-01",
                "percentBetween85And92OfHRMaxDuration": "Yu",
                "percentOver85OfHRMaxDuration": "Yyyuubbnn",
                "percentBetween75And85OfHRMaxDuration": "Yuy",
                "accelAndDecelPerMin": 22.0,
                "totalDistance": 12.0,
                "distanceOver25": 22.0,
                "playerId": "5f09beaa2bbde45f19a054d9",
                "percentOver92OfHRMaxDuration": "Yu",
                "totalDuration": "Yu",
                "distanceBetween20And25": 22.0,
                "profileMaxHR": 22222,
                "accelerations": 11,
                "sessionMaxHR": 222222222,
                "decelerations": 22,
                "meanHeartRate": 2222222222222.22,
                "weekIndex": 49,
                "sprintCountOver20": 11,
                "sprintDistancePerMin": 11.0,
                "sprintMetersOver20": 11.0,
                "createdDate": "2020-12-04",
                "playerName": "于洋",
                "playerNameEn": "Yu Yang"
            },
            {
                "id": "5f09beaa2bbde45f19a054ec",
                "date": "2020-12-02",
                "percentBetween85And92OfHRMaxDuration": "1:0:0",
                "percentOver85OfHRMaxDuration": "1:0:0",
                "percentBetween75And85OfHRMaxDuration": "1:0:0",
                "accelAndDecelPerMin": 100.0,
                "totalDistance": 100.0,
                "distanceOver25": 100.0,
                "playerId": "5f09beaa2bbde45f19a054ec",
                "percentOver92OfHRMaxDuration": "1:0:0",
                "totalDuration": "1:0:0",
                "distanceBetween20And25": 100.0,
                "profileMaxHR": 100,
                "accelerations": 100,
                "sessionMaxHR": 100,
                "decelerations": 100,
                "meanHeartRate": 100.0,
                "weekIndex": 49,
                "sprintCountOver20": 100,
                "sprintDistancePerMin": 100.0,
                "sprintMetersOver20": 100.0,
                "createdDate": "2020-12-02",
                "playerName": "雷腾龙",
                "playerNameEn": "Lei Tenglong"
            },
            {
                "id": "5f09bee42bbde45f19a05f3e",
                "date": "2020-04-22",
                "percentBetween85And92OfHRMaxDuration": "",
                "percentOver85OfHRMaxDuration": "",
                "percentBetween75And85OfHRMaxDuration": "",
                "accelAndDecelPerMin": 0.05899,
                "totalDistance": 5013.41748,
                "distanceOver25": 0.0,
                "playerId": "5f09beaa2bbde45f19a05482",
                "percentOver92OfHRMaxDuration": "",
                "totalDuration": "5:22:05",
                "distanceBetween20And25": 0.56,
                "profileMaxHR": 0,
                "accelerations": 11,
                "sessionMaxHR": 0,
                "decelerations": 8,
                "seasonId": "5f09beaf2bbde45f19a05805",
                "weekIndex": 17,
                "sprintCountOver20": 0,
                "sprintDistancePerMin": 0.00174,
                "sprintMetersOver20": 0.56,
                "createdDate": "2020-04-22",
                "playerName": "陈怀远",
                "playerNameEn": "Chen Huaiyuan"
            },
            {
                "id": "5f09bee42bbde45f19a05f3f",
                "date": "2020-04-22",
                "percentBetween85And92OfHRMaxDuration": "",
                "percentOver85OfHRMaxDuration": "",
                "percentBetween75And85OfHRMaxDuration": "",
                "accelAndDecelPerMin": 0.04968,
                "totalDistance": 4696.04004,
                "distanceOver25": 0.0,
                "playerId": "5f09beaa2bbde45f19a0547f",
                "percentOver92OfHRMaxDuration": "",
                "totalDuration": "5:22:05",
                "distanceBetween20And25": 2.71,
                "profileMaxHR": 0,
                "accelerations": 11,
                "sessionMaxHR": 0,
                "decelerations": 5,
                "seasonId": "5f09beaf2bbde45f19a05805",
                "weekIndex": 17,
                "sprintCountOver20": 0,
                "sprintDistancePerMin": 0.00841,
                "sprintMetersOver20": 2.71,
                "createdDate": "2020-04-22",
                "playerName": "和玺",
                "playerNameEn": "He Xi"
            },
            {
                "id": "5f09bee42bbde45f19a05f40",
                "date": "2020-04-22",
                "percentBetween85And92OfHRMaxDuration": "",
                "percentOver85OfHRMaxDuration": "",
                "percentBetween75And85OfHRMaxDuration": "",
                "accelAndDecelPerMin": 0.03838,
                "totalDistance": 4701.95801,
                "distanceOver25": 0.0,
                "playerId": "5f09beaa2bbde45f19a05485",
                "percentOver92OfHRMaxDuration": "",
                "totalDuration": "6:04:47",
                "distanceBetween20And25": 9.32,
                "profileMaxHR": 0,
                "accelerations": 10,
                "sessionMaxHR": 0,
                "decelerations": 4,
                "seasonId": "5f09beaf2bbde45f19a05805",
                "weekIndex": 17,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 0.02555,
                "sprintMetersOver20": 9.32,
                "createdDate": "2020-04-22",
                "playerName": "和晓强",
                "playerNameEn": "He Xiaoqiang"
            },
            ....
        ],
        "pageNum": 1,
        "pageSize": 10,
        "size": 10,
        "startRow": 1,
        "endRow": 10,
        "pages": 475,
        "prePage": 0,
        "nextPage": 2,
        "isFirstPage": true,
        "isLastPage": false,
        "hasPreviousPage": false,
        "hasNextPage": true,
        "navigatePages": 8,
        "navigatepageNums": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
        ],
        "navigateFirstPage": 1,
        "navigateLastPage": 8
    }
}

哈哈哈,数据量太大,页面先撑不住了,直接OOM了。所以证实那位wechat作者的文章,真的会OOM。
在这里插入图片描述
既然出现了问题,就需要知道为什么会出现这样的问题,以及这样的问题应该如何解决。
Point 1:-Why
在 PageHelper 使用文档(https://pagehelper.github.io/faq/)中第一句就阐述了:
在这里插入图片描述
只有紧跟在 PageHelper.startPage 方法后的第一个 Mybatis 的查询(Select)方法会被分页。请注意关键词紧跟。为什么要紧跟呢?因为 PageHelper 的分页原理使用了 ThreadLocal,他的分页参数和线程是绑定在一起的,当我们执行PageHelper.startPage()语句时,他会将分页参数绑定到ThreadLocal中:

/**
 * 开始分页
 *
 * @param pageNum      页码
 * @param pageSize     每页显示数量
 * @param count        是否进行count查询
 * @param reasonable   分页合理化,null时用默认配置
 * @param pageSizeZero true且pageSize=0时返回全部结果,false时分页,null时用默认配置
 */
public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
    Page<E> page = new Page<E>(pageNum, pageSize, count);
    page.setReasonable(reasonable);
    page.setPageSizeZero(pageSizeZero);
    //当已经执行过orderBy的时候
    Page<E> oldPage = getLocalPage();
    if (oldPage != null && oldPage.isOrderByOnly()) {
        page.setOrderBy(oldPage.getOrderBy());
    }
    setLocalPage(page);
    return page;
}
//--------------------------------------------------
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();
protected static boolean DEFAULT_COUNT = true;

/**
 * 设置 Page 参数
 *
 * @param page
 */
protected static void setLocalPage(Page page) {
    LOCAL_PAGE.set(page);
}
//--------------------------------------------------
// 查询语句结束之后执行
@Override
public void afterAll() {
    //这个方法即使不分页也会被执行,所以要判断 null
    AbstractHelperDialect delegate = autoDialect.getDelegate();
    if (delegate != null) {
        delegate.afterAll();
        autoDialect.clearDelegate();
    }
    clearPage(); // 注意这个方法,是个重点
}
//--------------------------------------------------
/**
 * 移除本地变量
 */
public static void clearPage() {
    LOCAL_PAGE.remove(); // 分页被移除,也就是之后的查询操作便使用不了本地变量
}

Point 2:-Deal it

治标不治本:移动PageHelper.startPage() 方法位置,让真正的查询语句紧挨着它。这种方案不治本的原因在于,如果又有小伙伴不知道这个坑,有可能又会踩。
治标治本:使用 Function Lamdba 表达式。

Method 1

@GetMapping("/page")
public ResponseEntity<?> pageGps() {
    userService.lambdaQuery().eq(User::getId, "5f09beaa2bbde45f19a0546b").one();
    PageHelper.startPage(1, 10);
    List<Gps> gpsList = gpsService.getList(new QueryWrapper<>());
    PageInfo<Gps> gpsPages = new PageInfo<>(gpsList);
    return CommonResponse.success(gpsPages);
}

Method 2

@Builder
public class PageHelperTool<P, R> {
    private final Function<P, PageInfo<R>> pageFunction;
    public PageInfo<R> getPageInfo(P request) {
        PageHelper.startPage(((QueryDTO)request).getPageNumber(),((QueryDTO)request).getPageSize());
        return pageFunction.apply(request);
    }
}
/**
 * @author sunshaocong
 */
@Data
public class QueryDTO {
    private Integer pageNumber;
    private Integer pageSize;
    private QueryWrapper<Gps> query;
}
public PageInfo getList(QueryDTO queryDTO) {
    PageHelper.startPage(queryDTO.getPageNumber(), queryDTO.getPageSize());
    List<Gps> gpsList = gpsMapper.selectList(queryDTO.getQuery());
    return new PageInfo<>(gpsList);
}
@GetMapping("/page")
public ResponseEntity<?> pageGps(QueryDTO queryDTO) {
    PageHelperTool<QueryDTO, Gps> pageHelperTool =
            PageHelperTool.<QueryDTO, Gps>builder().pageFunction(gpsService::getList).build();
    userService.lambdaQuery().eq(User::getId, "5f09beaa2bbde45f19a0546b").one();
    queryDTO.setQuery(new QueryWrapper<>());
    PageInfo<Gps> gpsPages = pageHelperTool.getPageInfo(queryDTO);
    return CommonResponse.success(gpsPages);
}

注意,上边的QueryDTO实体可以进行复用,里边设置多个属性即可。
Result:

{
    "code": 200,
    "message": "ok",
    "data": {
        "total": 4743,
        "list": [
            {
                "id": "5f09beaa2bbde45f19a0546b",
                "date": "2020-12-05",
                "percentBetween85And92OfHRMaxDuration": "1:0:0",
                "percentOver85OfHRMaxDuration": "1:0:0",
                "percentBetween75And85OfHRMaxDuration": "1:0:0",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a0546b",
                "percentOver92OfHRMaxDuration": "1:0:0",
                "totalDuration": "1:0:0",
                "distanceBetween20And25": 1.0,
                "profileMaxHR": 1,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 1.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-05",
                "playerName": "胡嘉祺",
                "playerNameEn": "Hu Jiaqi"
            },
            {
                "id": "5f09beaa2bbde45f19a05473",
                "date": "2020-12-05",
                "percentBetween85And92OfHRMaxDuration": "0:0:2",
                "percentOver85OfHRMaxDuration": "0:0:2",
                "percentBetween75And85OfHRMaxDuration": "0:0:2",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a05473",
                "percentOver92OfHRMaxDuration": "0:0:2",
                "totalDuration": "0:0:2",
                "distanceBetween20And25": 1.0,
                "profileMaxHR": 1,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 11.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-05",
                "playerName": "孙胥卿",
                "playerNameEn": "Sun Yuqing"
            },
            {
                "id": "5f09beaa2bbde45f19a054cf",
                "date": "2020-12-05",
                "percentBetween85And92OfHRMaxDuration": "0:0:2",
                "percentOver85OfHRMaxDuration": "0:0:2",
                "percentBetween75And85OfHRMaxDuration": "0:0:2",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a054cf",
                "percentOver92OfHRMaxDuration": "0:0:2",
                "totalDuration": "0:0:2",
                "distanceBetween20And25": 1.0,
                "profileMaxHR": 11,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 1.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-05",
                "playerName": "马昆越",
                "playerNameEn": "Ma Kunyue"
            },
            {
                "id": "5f09beaa2bbde45f19a054d4",
                "date": "2020-12-01",
                "percentBetween85And92OfHRMaxDuration": "12:00:00",
                "percentOver85OfHRMaxDuration": "12:00:00",
                "percentBetween75And85OfHRMaxDuration": "12:00:00",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a054d4",
                "percentOver92OfHRMaxDuration": "12:00:00",
                "totalDuration": "12:00:00",
                "distanceBetween20And25": 11.0,
                "profileMaxHR": 1,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 1.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-01",
                "playerName": "王刚",
                "playerNameEn": "Wang Gang"
            },
            {
                "id": "5f09beaa2bbde45f19a054d8",
                "date": "2020-12-05",
                "percentBetween85And92OfHRMaxDuration": "0:0:6",
                "percentOver85OfHRMaxDuration": "0:0:6",
                "percentBetween75And85OfHRMaxDuration": "0:0:6",
                "accelAndDecelPerMin": 1.0,
                "totalDistance": 1.0,
                "distanceOver25": 1.0,
                "playerId": "5f09beaa2bbde45f19a054d8",
                "percentOver92OfHRMaxDuration": "0:0:6",
                "totalDuration": "0:0:6",
                "distanceBetween20And25": 1.0,
                "profileMaxHR": 1,
                "accelerations": 1,
                "sessionMaxHR": 1,
                "decelerations": 1,
                "meanHeartRate": 1.0,
                "weekIndex": 49,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 1.0,
                "sprintMetersOver20": 1.0,
                "createdDate": "2020-12-05",
                "playerName": "李磊",
                "playerNameEn": "Li Lei"
            },
            {
                "id": "5f09beaa2bbde45f19a054d9",
                "date": "2020-12-01",
                "percentBetween85And92OfHRMaxDuration": "Yu",
                "percentOver85OfHRMaxDuration": "Yyyuubbnn",
                "percentBetween75And85OfHRMaxDuration": "Yuy",
                "accelAndDecelPerMin": 22.0,
                "totalDistance": 12.0,
                "distanceOver25": 22.0,
                "playerId": "5f09beaa2bbde45f19a054d9",
                "percentOver92OfHRMaxDuration": "Yu",
                "totalDuration": "Yu",
                "distanceBetween20And25": 22.0,
                "profileMaxHR": 22222,
                "accelerations": 11,
                "sessionMaxHR": 222222222,
                "decelerations": 22,
                "meanHeartRate": 2222222222222.22,
                "weekIndex": 49,
                "sprintCountOver20": 11,
                "sprintDistancePerMin": 11.0,
                "sprintMetersOver20": 11.0,
                "createdDate": "2020-12-04",
                "playerName": "于洋",
                "playerNameEn": "Yu Yang"
            },
            {
                "id": "5f09beaa2bbde45f19a054ec",
                "date": "2020-12-02",
                "percentBetween85And92OfHRMaxDuration": "1:0:0",
                "percentOver85OfHRMaxDuration": "1:0:0",
                "percentBetween75And85OfHRMaxDuration": "1:0:0",
                "accelAndDecelPerMin": 100.0,
                "totalDistance": 100.0,
                "distanceOver25": 100.0,
                "playerId": "5f09beaa2bbde45f19a054ec",
                "percentOver92OfHRMaxDuration": "1:0:0",
                "totalDuration": "1:0:0",
                "distanceBetween20And25": 100.0,
                "profileMaxHR": 100,
                "accelerations": 100,
                "sessionMaxHR": 100,
                "decelerations": 100,
                "meanHeartRate": 100.0,
                "weekIndex": 49,
                "sprintCountOver20": 100,
                "sprintDistancePerMin": 100.0,
                "sprintMetersOver20": 100.0,
                "createdDate": "2020-12-02",
                "playerName": "雷腾龙",
                "playerNameEn": "Lei Tenglong"
            },
            {
                "id": "5f09bee42bbde45f19a05f3e",
                "date": "2020-04-22",
                "percentBetween85And92OfHRMaxDuration": "",
                "percentOver85OfHRMaxDuration": "",
                "percentBetween75And85OfHRMaxDuration": "",
                "accelAndDecelPerMin": 0.05899,
                "totalDistance": 5013.41748,
                "distanceOver25": 0.0,
                "playerId": "5f09beaa2bbde45f19a05482",
                "percentOver92OfHRMaxDuration": "",
                "totalDuration": "5:22:05",
                "distanceBetween20And25": 0.56,
                "profileMaxHR": 0,
                "accelerations": 11,
                "sessionMaxHR": 0,
                "decelerations": 8,
                "seasonId": "5f09beaf2bbde45f19a05805",
                "weekIndex": 17,
                "sprintCountOver20": 0,
                "sprintDistancePerMin": 0.00174,
                "sprintMetersOver20": 0.56,
                "createdDate": "2020-04-22",
                "playerName": "陈怀远",
                "playerNameEn": "Chen Huaiyuan"
            },
            {
                "id": "5f09bee42bbde45f19a05f3f",
                "date": "2020-04-22",
                "percentBetween85And92OfHRMaxDuration": "",
                "percentOver85OfHRMaxDuration": "",
                "percentBetween75And85OfHRMaxDuration": "",
                "accelAndDecelPerMin": 0.04968,
                "totalDistance": 4696.04004,
                "distanceOver25": 0.0,
                "playerId": "5f09beaa2bbde45f19a0547f",
                "percentOver92OfHRMaxDuration": "",
                "totalDuration": "5:22:05",
                "distanceBetween20And25": 2.71,
                "profileMaxHR": 0,
                "accelerations": 11,
                "sessionMaxHR": 0,
                "decelerations": 5,
                "seasonId": "5f09beaf2bbde45f19a05805",
                "weekIndex": 17,
                "sprintCountOver20": 0,
                "sprintDistancePerMin": 0.00841,
                "sprintMetersOver20": 2.71,
                "createdDate": "2020-04-22",
                "playerName": "和玺",
                "playerNameEn": "He Xi"
            },
            {
                "id": "5f09bee42bbde45f19a05f40",
                "date": "2020-04-22",
                "percentBetween85And92OfHRMaxDuration": "",
                "percentOver85OfHRMaxDuration": "",
                "percentBetween75And85OfHRMaxDuration": "",
                "accelAndDecelPerMin": 0.03838,
                "totalDistance": 4701.95801,
                "distanceOver25": 0.0,
                "playerId": "5f09beaa2bbde45f19a05485",
                "percentOver92OfHRMaxDuration": "",
                "totalDuration": "6:04:47",
                "distanceBetween20And25": 9.32,
                "profileMaxHR": 0,
                "accelerations": 10,
                "sessionMaxHR": 0,
                "decelerations": 4,
                "seasonId": "5f09beaf2bbde45f19a05805",
                "weekIndex": 17,
                "sprintCountOver20": 1,
                "sprintDistancePerMin": 0.02555,
                "sprintMetersOver20": 9.32,
                "createdDate": "2020-04-22",
                "playerName": "和晓强",
                "playerNameEn": "He Xiaoqiang"
            }
        ],
        "pageNum": 1,
        "pageSize": 10,
        "size": 10,
        "startRow": 1,
        "endRow": 10,
        "pages": 475,
        "prePage": 0,
        "nextPage": 2,
        "isFirstPage": true,
        "isLastPage": false,
        "hasPreviousPage": false,
        "hasNextPage": true,
        "navigatePages": 8,
        "navigatepageNums": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
        ],
        "navigateFirstPage": 1,
        "navigateLastPage": 8
    }
}

不多不少,刚刚好10条。
这样就可以彻底解决因误用 PageHelper 导致分页失效的问题了。在使用别人封装好的框架时注意认真看文档!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

new_repo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值