从零搭建SpringBoot后台框架(六)——集成分页PageHelper

164 阅读2分钟

第七节直接引入mabatis-plus,本节可不导入

一、什么是PageHelper

PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件

二、添加PageHelper依赖

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

三、添加PageHelper配置

application.yml中添加

pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql
  page-size-zero: true

四、使用方法

UserInfoMapper.xml

<select id="selectAll" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List"/>
    from user_info
</select>

UserInfoMapper

List<UserInfo> selectAll();

UserInfoService

PageInfo<UserInfo> selectAll(Integer pageNum, Integer pageSize);

UserInfoServiceImpl

@Override
public PageInfo<UserInfo> selectAll(Integer pageNum, Integer pageSize) {
    //开启分页查询,写在查询语句上方
    //只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询(Select)方法会被分页。
    PageHelper.startPage(pageNum, pageSize);
    List<UserInfo> userInfoList = userInfoMapper.selectAll();
    PageInfo<UserInfo> pageInfo = new PageInfo<>(userInfoList);
    return pageInfo;
}

UserInfoController

@PostMapping("/selectAll")
@ApiOperation(value = "查询所有用户信息")
@ApiImplicitParams({
        @ApiImplicitParam(name = "pageNum", value = "当前页码", dataType = "Integer", paramType = "query"),
        @ApiImplicitParam(name = "pageSize", value = "每页显示条数", dataType = "Integer", paramType = "query")
})
public RestResult<PageInfo<UserInfo>> selectAll(@RequestParam(defaultValue = "0") Integer pageNum,
                                                @RequestParam(defaultValue = "0") Integer pageSize) {
    PageInfo<UserInfo> pageInfo = userInfoService.selectAll(pageNum, pageSize);
    return RestResult.getSuccessResult(pageInfo);
}

五、PageHelper中默认PageInfo的成员变量介绍

//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;
//第一页
private int firstPage;
//前一页
private int prePage;
//是否为第一页
private boolean isFirstPage;
//是否为最后一页
private boolean isLastPage;
//是否有前一页
private boolean hasPreviousPage;
//是否有下一页
private boolean hasNextPage;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums; 

六、功能测试

地址:http://192.168.1.104:8080/userInfo/selectAll

情况一:不传参数,默认为全查询

{
    "code": "000000",
    "msg": "操作成功",
    "data": {
        "total": 2,
        "list": [
            {
                "id": 1,
                "userName": "2",
                "password": "3"
            },
            {
                "id": 2,
                "userName": "2",
                "password": null
            }
        ],
        "pageNum": 1,
        "pageSize": 0,
        "size": 2,
        "startRow": 1,
        "endRow": 2,
        "pages": 0,
        "prePage": 0,
        "nextPage": 0,
        "isFirstPage": true,
        "isLastPage": true,
        "hasPreviousPage": false,
        "hasNextPage": false,
        "navigatePages": 8,
        "navigatepageNums": [],
        "navigateFirstPage": 0,
        "navigateLastPage": 0
    }
}

地址:http://localhost:8080/userInfo/selectAll?pageSize=2&pageNum=1

情况二:参数 page=2&size=1

{
    "code": "000000",
    "msg": "操作成功",
    "data": {
        "total": 2,
        "list": [
            {
                "id": 1,
                "userName": "2",
                "password": "3"
            },
            {
                "id": 2,
                "userName": "2",
                "password": null
            }
        ],
        "pageNum": 1,
        "pageSize": 2,
        "size": 2,
        "startRow": 1,
        "endRow": 2,
        "pages": 1,
        "prePage": 0,
        "nextPage": 0,
        "isFirstPage": true,
        "isLastPage": true,
        "hasPreviousPage": false,
        "hasNextPage": false,
        "navigatePages": 8,
        "navigatepageNums": [
            1
        ],
        "navigateFirstPage": 1,
        "navigateLastPage": 1
    }
}

七、项目地址

gitee

PS:可以通过tag下载本文对应的代码版本

八、结尾

pageHelper集成已完成,有问题可以联系chenzhenlindx@qq.com

九、参考文章

  1. 从零搭建自己的SpringBoot后台框架(七)