7 PageHelper 分页

PageHelper 分页

1 简介

  在开发过程中,我们经常会遇到分页的问题,我们可以手写一个分页,也可以使用分页框架。但为何要进行分页呢?

  当数据量少的时候,我们可全量数据返回给客户端即可。然而,对于企业信息系统来说数据量不会限制在一个小范围内。如果不顾一切的 Select * from 某个表,再将返回的数据一古脑的扔给客户,客户岂能忍受成千上万足够让人眼花缭乱的表格式数据。

  即使客户能忍受,当数据量内容过多而超过程序能承载的内存,也会造成数据丢失。因此接下来介绍一下分页框架 PageHelper 。

2 pom.xml
<!-- 分页 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.10</version>
</dependency>
3 TbUserController
package com.pky.hello.springboot.controller;

import com.github.pagehelper.PageInfo;
import com.pky.hello.springboot.commons.domain.TbUser;
import com.pky.hello.springboot.commons.dto.AbstractBaseResult;
import com.pky.hello.springboot.commons.service.TbUserService;
import com.pky.hello.springboot.controller.base.AbstractBaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 用户控制器
 */
@RestController
@RequestMapping(value = "tb_users")
public class TbUserController extends AbstractBaseController<TbUser> {

    @Autowired
    TbUserService tbUserService;

    /**
     * 获取所有用户
     * @return
     */
    @GetMapping(value = "all")
    public AbstractBaseResult getAllTbUsers() {
        List<TbUser> tbUsers = tbUserService.getAll();
        // 有数据
        if(tbUsers.size() > 0) {
            return success(request.getRequestURI(),1,tbUsers.size(), tbUsers);
        }

        // 无数据
        return success(request.getRequestURI());
    }

    /**
     * 分页获取用户信息
     * @param num 当前页
     * @param size 一页总条数
     * @return
     */
    @GetMapping(value = "page/{num}/{size}")
    public AbstractBaseResult page(@PathVariable int num, @PathVariable int size) {
        PageInfo<TbUser> pageInfo = tbUserService.page(num, size);

        return success(request.getRequestURI(), pageInfo.getNextPage(), pageInfo.getPages(), pageInfo.getList());
    }
}
4 TbUserServiceImpl
package com.pky.hello.springboot.commons.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pky.hello.springboot.commons.domain.TbUser;
import com.pky.hello.springboot.commons.mapper.TbUserMapper;
import com.pky.hello.springboot.commons.service.TbUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * 用户业务逻辑
 */
@Service
public class TbUserServiceImpl implements TbUserService {

    @Autowired
    TbUserMapper tbUserMapper;

    /**
     * 获取全部用户
     * @return
     */
    @Override
    public List<TbUser> getAll() {
        List<TbUser> tbUsers = tbUserMapper.selectAll();
        return tbUsers;
    }

    /**
     * 分页获取用户信息
     * @param pageNum 当前页数
     * @param pageSize 当前数据条数
     * @return
     */
    @Override
    public PageInfo<TbUser> page(int pageNum, int pageSize) {
        // 根据 “created” 字段倒序分页
        PageHelper.startPage(pageNum, pageSize, "created desc");

        PageInfo<TbUser> pageInfo = new PageInfo<>(tbUserMapper.selectAll());
        return pageInfo;
    }
}
5 测试

  浏览器输入:http://localhost:8082/v1/hello_springboot/tb_users/page/1/3 , 会出现已经分好页的 JSON 响应数据,如下为第一页,每页有 3 条数据:

{
    "links": {
        "self": "/v1/hello_springboot/tb_users/page/1/3",
        "next": "/v1/hello_springboot/tb_users/page/1/3?page=2",
        "last": "/v1/hello_springboot/tb_users/page/1/3?page=8"
    },
    "data": [
        {
            "type": "TbUser",
            "id": 73,
            "attributes": {
                "id": 73,
                "username": "pky11",
                "phone": "22",
                "email": "1689988@qq.com",
                "created": "2019-01-02T12:06:37.000+0000",
                "updated": "2019-01-02T12:06:37.000+0000"
            },
            "links": {
                "self": "/v1/hello_springboot/tb_users/page/1/3/73"
            }
        },
        {
            "type": "TbUser",
            "id": 72,
            "attributes": {
                "id": 72,
                "username": "pkya",
                "phone": "13531021568",
                "email": "wer@qq.com",
                "created": "2018-12-11T04:13:25.000+0000",
                "updated": "2018-12-11T04:13:25.000+0000"
            },
            "links": {
                "self": "/v1/hello_springboot/tb_users/page/1/3/72"
            }
        },
        {
            "type": "TbUser",
            "id": 71,
            "attributes": {
                "id": 71,
                "username": "pky3",
                "phone": "13531021145",
                "email": "dasffw@qq.com",
                "created": "2018-12-11T04:09:29.000+0000",
                "updated": "2018-12-11T04:09:29.000+0000"
            },
            "links": {
                "self": "/v1/hello_springboot/tb_users/page/1/3/71"
            }
        }
    ]
}
6 PageHelper 中 PageInfo 的成员属性
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//排序
private String orderBy;

//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"

//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;

//第一页
private int firstPage;
//前一页
private int prePage;
//下一页
private int nextPage;
//最后一页
private int lastPage;

//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值