分页方案二:PageHelper插件

说明:该方法区别于自定义分页Util的优势是,在数据库查询层面直接进行了分页处理,自定义的Util是取出全部数据后进行统计、计算、截取等操作,如果查询结果集数据量很大,会造成内存溢出问题,不推荐使用,最好还是用此插件的解决方案

一. 引入 Maven 依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>

二. 添加 application.properties 分页配置

# page 指定数据库,不指定的话会默认自动检测数据库类型
pagehelper.helperDialect=mysql
# page 是否启用分页合理化。
# 如果启用,当pagenum<1时,自动查询第一页的数据,当pagenum>pages时,自动查询最后一页数据;
# 不启用的,以上两种情况都会返回空数据
pagehelper.reasonable=true
# page 是否启用自动分页(默认false)
# 尽量不要设置为true,原因如下
# 第一:如果设置为true,某些接口的实体中如果存在pageSize,pageNum属性且没有分页时也会被自动分页
# 第二:如果设置为true,带有Limit 的 SQL都默认在后边继续拼接了 limit ?,? 导致SQL语法报错
pagehelper.supportMethodsArguments=false
# page 映射参数配置,默认值如下:pageNum=pageNum;pageSize=pageSize;
# count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
pagehelper.params=count=countSql

三. 实战

3.1 BankController

@GetMapping("getBankAll")
public ResponseResult getBankAll(@RequestParam Integer page,@RequestParam Integer size){
    PageInfo<Bank> pageEntity = bankService.getBankByLimit(page,size);
    return ResponseResult.success(pageEntity);
}

3.2 BankServiceImpl

public PageInfo<Bank> getBankByLimit(Integer page, Integer size) {
    // 设置页码及展示数据长度
    PageHelper.startPage(page,size);
    // 查询数据,不需要传分页需要的任何参数
    List<Bank> bankList = bankDao.getAll();
    PageInfo<Bank> pageInfo = new PageInfo<>(bankList);
    return pageInfo;
}

3.3 XML

3.4 执行结果

{
    "code": 200, //状态码
    "message": "OK", //状态描述
    "data": { //结果集
        "total": 3001, //总数据条数
        "list": [ //当前页展示内容集合
            {
                "id": 46,
                "accountNumber": "1324161060585680878",
                "balance": 0.00,
                "userName": "赖瞂偎",
                "age": 39,
                "gender": 0,
                "phone": "13676052538",
                "email": "nqfg2547@3721.net",
                "city": "澳门澳门",
                "address": "不详",
                "state": 1
            },
            ...
        ],
        "pageNum": 10, //当前页(传入参数)
        "pageSize": 5, //每页数据个数(传入参数)
        "size": 5, //当前数据集长度
        "startRow": 46, //从第46个开始
        "endRow": 50, //到第50个结束
        "pages": 601, //总页数
        "prePage": 9, //当前页的上一页页码
        "nextPage": 11, //当前页的下一页页码
        "isFirstPage": false, //是否为第一页
        "isLastPage": false, //是否为最后一页
        "hasPreviousPage": true, //是否存在上一页
        "hasNextPage": true, //是否存在下一页
        "navigatePages": 8, //导航页码集合长度
        "navigatepageNums": [ //导航页码集合
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13
        ],
        "navigateFirstPage": 6, //浏览第一页
        "navigateLastPage": 13, //浏览最后一页
        "lastPage": 13, //导航页码结束页
        "firstPage": 6 //导航页码开始页
    }
}

参考网址

https://blog.csdn.net/qq_38011415/article/details/99696476
https://www.cnblogs.com/liran123/p/12889093.html
https://www.cnblogs.com/bananafish/p/10481798.html
*** https://blog.csdn.net/qq_38375620/article/details/79467545 ***