spring boot学习 ---- 使用pageHelper实现分页功能

目录

  1. 介绍 pageHelper

  2.pageHelper 的基本配置

  3. 使用 pageHelper 实现分页功能

一、介绍 pageHelper

  pageHelper 是一款分页插件,它能很好的集成在 spring boot 中在它是一个基于 mybatis 的一款插件。它是的底层实现技术则是使用动态代理实现的。所以我们在使用它时,我们需要使用 mybatis 作为持久层框架。如果有需要请参照《spring boot 集成 mybatis》

二、pageHelper 的基本配置

  如果我们需要使用 pageHelper 的话,我们需要在 spring boot 项目中引入 pageHelper 的依赖。以下是 PageHelper 的 GitHub 地址https://github.com/pagehelper/Mybatis-PageHelper

  在这里我们导入以下依赖:

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

  同样,我们在 spring boot 的 application.properties 中可以配置 pageHelper 的基本信息,

# 指定数据库,不指定的话会默认自动检测数据库类型
pagehelper.helperDialect=mysql
# 是否启用分页合理化。
# 如果启用,当 pagenum<1时,会自动查询第一页的数据,当 pagenum>pages 时,自动查询最后一页数据;
# 不启用的,以上两种情况都会返回空数据
pagehelper.reasonable=true
# 默认值 false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
pagehelper.supportMethodsArguments=true
# 用于从对象中根据属性名取值,
# 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,
# 默认值为 pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
pagehelper.params=count=countSql

  在 1.2.5 这个版本中我们可以不用配置,使用默认的就够用了。

三、使用 pageHelper 实现分页功能

  在上一步中,我们已近知道 pageHelper 的基本配置了。在这,我们使用 pageHelper 实现分页功能。

我们使用《mysql 必知必会》中给出的数据库进行分页查询。

  1. 创建 City 实体类

package com.springboot.pagehelper;

public class City {
// id
private int id;
// 国家名
private String name;
// 国家代码
private String countryCode;
// 地区
private String district;
// 人口
private int population;

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">int</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> getId() {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">return</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> id;
}

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">void</span> setId(<span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">int</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> id) {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.id =<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> id;
}

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> String getName() {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">return</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> name;
}

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">void</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> setName(String name) {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.name =<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> name;
}

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> String getCountryCode() {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">return</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> countryCode;
}

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">void</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> setCountryCode(String countryCode) {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.countryCode =<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> countryCode;
}

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> String getDistrict() {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">return</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> district;
}

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">void</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> setDistrict(String district) {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.district =<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> district;
}

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">int</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> getPopulation() {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">return</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> population;
}

</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">void</span> setPopulation(<span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">int</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> population) {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.population =<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> population;
}

}

City

  2. 数据操作层查询出所有数据

package com.springboot.pagehelper.mapper;

import com.springboot.pagehelper.City;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface CityMapper {
// 获取所有城市
@Select("select * from city")
@Results({
@Result(property
= "id",column = "ID"),
@Result(property
= "name",column = "Name"),
@Result(property
= "countryCode",column = "CountryCode"),
@Result(property
= "district",column = "District"),
@Result(property
= "population",column = "Population")
})
List
<City> selectCity();
}

CityMapper

  3. 创建业务接口

  这里我们使用两种实现

package com.springboot.pagehelper.service;

import com.github.pagehelper.Page;
import com.springboot.pagehelper.City;

import java.util.List;

public interface CityService {
List
<City> getcity();
Page
<City> pageCity();
}

CityService

  4. 实现业务接口

package com.springboot.pagehelper.service;

import com.github.pagehelper.Page;
import com.springboot.pagehelper.City;
import com.springboot.pagehelper.mapper.CityMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CityServiceImpl implements CityService {

@Autowired
</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">private</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> CityMapper mapper;

@Override
</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> List&lt;City&gt;<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> getcity() {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">return</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> mapper.selectCity();
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> Page&lt;City&gt;<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> pageCity() {
    </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">return</span> (Page&lt;City&gt;<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">)mapper.selectCity();
}

}

CityServiceImpl

  5. 控制层实现分页

package com.springboot.pagehelper.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.springboot.pagehelper.City;
import com.springboot.pagehelper.service.CityService;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class DataController {
@Autowired
private CityService service;
@GetMapping(
"/citys/{page}")
public PageInfo<City> lists(@PathVariable int page){
// 设置分页规则
PageHelper.startPage(page,10);
// 返回所有分页信息参数为查询所有记录的信息
PageInfo<City> pageInfo = new PageInfo<>(service.pageCity());
return pageInfo;
}

@GetMapping(</span>"/city"<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">)
</span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">public</span> List&lt;City&gt; paraList(@RequestParam(defaultValue = "1") <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">int</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> p,
                           @RequestParam(defaultValue </span>= "10") <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">int</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> size){

// 设置分页规则
PageHelper.startPage(p,size);
// 取数据,插件会自动按照规则分页显示数据
return service.getcity();
}
}

DataController

  实现分页功能在使用时,PageInfo 源码如下:

/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2014-2017 abel533@gmail.com
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package com.github.pagehelper;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**

  • 对 Page<E> 结果进行包装

  • <p/>

  • 新增分页的多项属性,主要参考:http://bbs.csdn.net/topics/360010907

  • @author liuzh/abel533/isea533

  • @version 3.3.0

  • @since 3.2.2

  • 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper
    */
    @SuppressWarnings({
    "rawtypes", "unchecked"})
    public class PageInfo<T> extends PageSerializable<T> {
    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;

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

    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总页数
    private int pages;

    //前一页
    private int prePage;
    //下一页
    private int nextPage;

    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;
    //导航条上的第一页
    private int navigateFirstPage;
    //导航条上的最后一页
    private int navigateLastPage;

    public PageInfo() {
    }

    /**

    • 包装 Page 对象
    • @param list
      */
      public PageInfo(List<T> list) {
      this(list, 8);
      }

    /**

    • 包装 Page 对象

    • @param list page 结果

    • @param navigatePages 页码数量
      */
      public PageInfo(List<T> list, int navigatePages) {
      super(list);
      if (list instanceof Page) {
      Page page
      = (Page) list;
      this.pageNum = page.getPageNum();
      this.pageSize = page.getPageSize();

       </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.pages =<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> page.getPages();
       </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.size =<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> page.size();
       </span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">//</span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">由于结果是&gt;startRow的,所以实际的需要+1</span>
       <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">if</span> (<span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.size == 0<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">) {
           </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.startRow = 0<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
           </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.endRow = 0<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
       } </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">else</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> {
           </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.startRow = page.getStartRow() + 1<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
           </span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">//</span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">计算实际的endRow(最后一页的时候特殊)</span>
           <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.endRow = <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.startRow - 1 + <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">.size;
       }
      

      } else if (list instanceof Collection) {
      this.pageNum = 1;
      this.pageSize = list.size();

       </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.pages = <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.pageSize &gt; 0 ? 1 : 0<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
       </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.size =<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> list.size();
       </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.startRow = 0<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
       </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">this</span>.endRow = list.size() &gt; 0 ? list.size() - 1 : 0<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
      

      }
      if (list instanceof Collection) {
      this.navigatePages = navigatePages;
      //计算导航页
      calcNavigatepageNums();
      //计算前后页,第一页,最后一页
      calcPage();
      //判断页面边界
      judgePageBoudary();
      }
      }

    public static <T> PageInfo<T> of(List<T> list){
    return new PageInfo<T>(list);
    }

    public static <T> PageInfo<T> of(List<T> list, int navigatePages){
    return new PageInfo<T>(list, navigatePages);
    }

    /**

    • 计算导航页
      */
      private void calcNavigatepageNums() {
      //当总页数小于或等于导航页码数时
      if (pages <= navigatePages) {
      navigatepageNums
      = new int[pages];
      for (int i = 0; i < pages; i++) {
      navigatepageNums[i]
      = i + 1;
      }
      }
      else { //当总页数大于导航页码数时
      navigatepageNums = new int[navigatePages];
      int startNum = pageNum - navigatePages / 2;
      int endNum = pageNum + navigatePages / 2;

       </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">if</span> (startNum &lt; 1<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">) {
           startNum </span>= 1<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
           </span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">//</span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">(最前navigatePages页</span>
           <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">for</span> (<span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">int</span> i = 0; i &lt; navigatePages; i++<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">) {
               navigatepageNums[i] </span>= startNum++<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
           }
       } </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">else</span> <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">if</span> (endNum &gt;<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> pages) {
           endNum </span>=<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> pages;
           </span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">//</span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">最后navigatePages页</span>
           <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">for</span> (<span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">int</span> i = navigatePages - 1; i &gt;= 0; i--<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">) {
               navigatepageNums[i] </span>= endNum--<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
           }
       } </span><span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">else</span><span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color=""> {
           </span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">//</span><span style="color: rgba(0, 128, 0, 1)" data-darkreader-inline-color="">所有中间页</span>
           <span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">for</span> (<span style="color: rgba(0, 0, 255, 1)" data-darkreader-inline-color="">int</span> i = 0; i &lt; navigatePages; i++<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">) {
               navigatepageNums[i] </span>= startNum++<span style="color: rgba(0, 0, 0, 1)" data-darkreader-inline-color="">;
           }
       }
      

      }
      }

    /**

    • 计算前后页,第一页,最后一页
      */
      private void calcPage() {
      if (navigatepageNums != null && navigatepageNums.length > 0) {
      navigateFirstPage
      = navigatepageNums[0];
      navigateLastPage
      = navigatepageNums[navigatepageNums.length - 1];
      if (pageNum > 1) {
      prePage
      = pageNum - 1;
      }
      if (pageNum < pages) {
      nextPage
      = pageNum + 1;
      }
      }
      }

    /**

    • 判定页面边界
      */
      private void judgePageBoudary() {
      isFirstPage
      = pageNum == 1;
      isLastPage
      = pageNum == pages || pages == 0;;
      hasPreviousPage
      = pageNum > 1;
      hasNextPage
      = pageNum < pages;
      }

    public int getPageNum() {
    return pageNum;
    }

    public void setPageNum(int pageNum) {
    this.pageNum = pageNum;
    }

    public int getPageSize() {
    return pageSize;
    }

    public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
    }

    public int getSize() {
    return size;
    }

    public void setSize(int size) {
    this.size = size;
    }

    public int getStartRow() {
    return startRow;
    }

    public void setStartRow(int startRow) {
    this.startRow = startRow;
    }

    public int getEndRow() {
    return endRow;
    }

    public void setEndRow(int endRow) {
    this.endRow = endRow;
    }

    public int getPages() {
    return pages;
    }

    public void setPages(int pages) {
    this.pages = pages;
    }

    @Deprecated
    // firstPage 就是 1, 此函数获取的是导航条上的第一页, 容易产生歧义
    public int getFirstPage() {
    return navigateFirstPage;
    }

    @Deprecated
    public void setFirstPage(int firstPage) {
    this.navigateFirstPage = firstPage;
    }

    public int getPrePage() {
    return prePage;
    }

    public void setPrePage(int prePage) {
    this.prePage = prePage;
    }

    public int getNextPage() {
    return nextPage;
    }

    public void setNextPage(int nextPage) {
    this.nextPage = nextPage;
    }

    @Deprecated
    // 请用 getPages() 来获取最后一页, 此函数获取的是导航条上的最后一页, 容易产生歧义.
    public int getLastPage() {
    return navigateLastPage;
    }

    @Deprecated
    public void setLastPage(int lastPage) {
    this.navigateLastPage = lastPage;
    }

    public boolean isIsFirstPage() {
    return isFirstPage;
    }

    public void setIsFirstPage(boolean isFirstPage) {
    this.isFirstPage = isFirstPage;
    }

    public boolean isIsLastPage() {
    return isLastPage;
    }

    public void setIsLastPage(boolean isLastPage) {
    this.isLastPage = isLastPage;
    }

    public boolean isHasPreviousPage() {
    return hasPreviousPage;
    }

    public void setHasPreviousPage(boolean hasPreviousPage) {
    this.hasPreviousPage = hasPreviousPage;
    }

    public boolean isHasNextPage() {
    return hasNextPage;
    }

    public void setHasNextPage(boolean hasNextPage) {
    this.hasNextPage = hasNextPage;
    }

    public int getNavigatePages() {
    return navigatePages;
    }

    public void setNavigatePages(int navigatePages) {
    this.navigatePages = navigatePages;
    }

    public int[] getNavigatepageNums() {
    return navigatepageNums;
    }

    public void setNavigatepageNums(int[] navigatepageNums) {
    this.navigatepageNums = navigatepageNums;
    }

    public int getNavigateFirstPage() {
    return navigateFirstPage;
    }

    public int getNavigateLastPage() {
    return navigateLastPage;
    }

    public void setNavigateFirstPage(int navigateFirstPage) {
    this.navigateFirstPage = navigateFirstPage;
    }

    public void setNavigateLastPage(int navigateLastPage) {
    this.navigateLastPage = navigateLastPage;
    }

    @Override
    public String toString() {
    final StringBuilder sb = new StringBuilder("PageInfo{");
    sb.append(
    "pageNum=").append(pageNum);
    sb.append(
    ", pageSize=").append(pageSize);
    sb.append(
    ", size=").append(size);
    sb.append(
    ", startRow=").append(startRow);
    sb.append(
    ", endRow=").append(endRow);
    sb.append(
    ", total=").append(total);
    sb.append(
    ", pages=").append(pages);
    sb.append(
    ", list=").append(list);
    sb.append(
    ", prePage=").append(prePage);
    sb.append(
    ", nextPage=").append(nextPage);
    sb.append(
    ", isFirstPage=").append(isFirstPage);
    sb.append(
    ", isLastPage=").append(isLastPage);
    sb.append(
    ", hasPreviousPage=").append(hasPreviousPage);
    sb.append(
    ", hasNextPage=").append(hasNextPage);
    sb.append(
    ", navigatePages=").append(navigatePages);
    sb.append(
    ", navigateFirstPage=").append(navigateFirstPage);
    sb.append(
    ", navigateLastPage=").append(navigateLastPage);
    sb.append(
    ", navigatepageNums=");
    if (navigatepageNums == null) {
    sb.append(
    "null");
    }
    else {
    sb.append(
    '[');
    for (int i = 0; i < navigatepageNums.length; ++i) {
    sb.append(i
    == 0 ? "" :", ").append(navigatepageNums[i]);
    }
    sb.append(
    ']');
    }
    sb.append(
    '}');
    return sb.toString();
    }
    }

PageInfo

  它包括了许多分页信息,我们可以获取所有分页信息,发到前端,最后渲染到页面上。

  之后我们可以通过浏览器来获取到我们的数据了。

第一个版本(传参方式):

 

第二个版本(改变地址栏):

  到这就完成了分页的功能。