PageInfo的介绍与使用

转载:https://blog.csdn.net/sinat_42338962/article/details/84314428

https://docs.qq.com/doc/DZkhaZWRKc2VGa3l3

1.参考封装PageInfo类

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> implements Serializable {

private static final long serialVersionUID = 1L;

//当前页

private int pageNum;

//每页的数量

private int pageSize;

//当前页的数量

private int size;

 

//由于startRow和endRow不常用,这里说个具体的用法

//可以在页面中"显示startRow到endRow 共size条数据"

 

//当前页面第一个元素在数据库中的行号

private int startRow;

//当前页面最后一个元素在数据库中的行号

private int endRow;

//总记录数

private long total;

//总页数

private int pages;

//结果集

private List<T> list;

 

//前一页

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) {

if (list instanceof Page) {

Page page = (Page) list;

this.pageNum = page.getPageNum();

this.pageSize = page.getPageSize();

 

this.pages = page.getPages();

this.list = page;

this.size = page.size();

this.total = page.getTotal();

//由于结果是>startRow的,所以实际的需要+1

if (this.size == 0) {

this.startRow = 0;

this.endRow = 0;

} else {

this.startRow = page.getStartRow() + 1;

//计算实际的endRow(最后一页的时候特殊)

this.endRow = this.startRow - 1 + this.size;

}

} else if (list instanceof Collection) {

this.pageNum = 1;

this.pageSize = list.size();

 

this.pages = this.pageSize > 0 ? 1 : 0;

this.list = list;

this.size = list.size();

this.total = list.size();

this.startRow = 0;

this.endRow = list.size() > 0 ? list.size() - 1 : 0;

}

if (list instanceof Collection) {

this.navigatePages = navigatePages;

//计算导航页

calcNavigatepageNums();

//计算前后页,第一页,最后一页

calcPage();

//判断页面边界

judgePageBoudary();

}

}

 

/**

* 计算导航页

*/

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;

 

if (startNum < 1) {

startNum = 1;

//(最前navigatePages页

for (int i = 0; i < navigatePages; i++) {

navigatepageNums[i] = startNum++;

}

} else if (endNum > pages) {

endNum = pages;

//最后navigatePages页

for (int i = navigatePages - 1; i >= 0; i--) {

navigatepageNums[i] = endNum--;

}

} else {

//所有中间页

for (int i = 0; i < navigatePages; i++) {

navigatepageNums[i] = startNum++;

}

}

}

}

 

/**

* 计算前后页,第一页,最后一页

*/

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 long getTotal() {

return total;

}

 

public void setTotal(long total) {

this.total = total;

}

 

public int getPages() {

return pages;

}

 

public void setPages(int pages) {

this.pages = pages;

}

 

public List<T> getList() {

return list;

}

 

public void setList(List<T> list) {

this.list = list;

}

 

@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 StringBuffer sb = new StringBuffer("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();

}

}

 

 

2.PageInfo属性表

  1 当前页 
  2 private int pageNum;
  3 每页的数量  
  4 private int pageSize;  
  5 当前页的数量  
  6 private int size;  
  7 //由于startRow和endRow不常用,这里说个具体的用法  
  8 //可以在页面中"显示startRow到endRow 共size条数据"  
  9 
 10 当前页面第一个元素在数据库中的行号  
 11 private int startRow;  
 12 当前页面最后一个元素在数据库中的行号  
 13 private int endRow;  
 14 总记录数  
 15 private long total;  
 16 总页数  
 17 private int pages;  
 18 结果集  
 19 private List<T> list;  
 20 
 21 第一页  
 22 private int firstPage;  
 23 前一页  
 24 private int prePage;  
 25 
 26 是否为第一页  
 27 private boolean isFirstPage = false;  
 28 是否为最后一页  
 29 private boolean isLastPage = false;  
 30 是否有前一页  
 31 private boolean hasPreviousPage = false;  
 32 是否有下一页  
 33 private boolean hasNextPage = false;  
 34 导航页码数  
 35 private int navigatePages;  
 36 所有导航页号  
 37 private int[] navigatepageNums;  
 38 后台分页
 39 
 40 服务器端
 41 service
 42 public PageInfo<T>  methodName(int pageNum, int pageSize) {
 43 //1 设置分页
 44         PageHelper.startPage(pageNum, pageSize);
 45         //2 查询
 46         List<T> list =TMapper.mapperMethod();
 47         //3 返回
 48         return new PageInfo<>(list);
 49     }
 50 Web
 51 public @ResponseBody DataGridResultInfo methodName (Vovo){
 52         //1 查询
 53         PageInfo<T> pageInfo = service. methodName (vo.getPage(), vo.getRows());
 54         //2 封装
 55         return new DataGridBean(pageInfo.getTotal() , pageInfo.getList() );
 56     }
 57 
 58 浏览器端
 59 Datagrid
 60 
 61 $(function(){
 62         //绘制datagrid
 63         //1 准备数据
 64         // 1.1 列列表
 65         var columnArr = [[
 66                           {field:'字段名1',title:'标题1',width:80}, 
 67                           {field:'字段名2',title:'标题2',width:80,
 68                               formatter:function(value,rows,index){
 69                                 //filed匹配值(当前的值),当前行,当前行号
 70                                   return value.info;
 71                               }
 72                           }
 73                           ]];
 74         // 1.2 工具条
 75         var toolbarArr = [
 76                             {
 77                                 iconCls: 'icon-add',//按钮图标
 78                                 text : '添加用户',
 79                                 handler: showadduser//方法名
 80                             }
 81                           ];
 82         // 1.3 请求路径
 83         var url = "……";
 84         
 85         //2 准备参数
 86         var options = {
 87             "columns":columnArr,
 88             "toolbar":toolbarArr,
 89             "striped":true,                //隔行换色
 90             "idField":"id",                //标识字段
 91             "url":url,                    //请求路径
 92             "pagination":true,
 93             "rownumbers":true,
 94             "pageSize":2,
 95             "pageList":[2,4,6,8]
 96         };
 97         
 98         //3 绘制
 99         $("#id值").datagrid( options );
100         
101     });
102 
103 感觉这个很简单,没什么好写的
104 不用工具
105 <c:forEach items="${pageInfo.list}" var="p">
106       <tr>
107           <td>${p.属性1}</td>
108 <td>${p.属性2}</td>
109 <td>${p.属性…}</td>
110 </tr>
111 </c:forEach>

3.MyBatis分页插件-PageHelper的配置与应用

以下转载于:https://www.cnblogs.com/li150dan/p/9706585.html

下载地址:https://github.com/pagehelper/Mybatis-PageHelper

Pagehelper 下载地址:

http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/

jsqlparser 下载地址:

http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/

使用步骤:

pom.xml 引入依赖:

<!-- pagehelper :分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>
<!-- pagehelper的依赖包:jsqlparser -->
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>0.9.5</version>
</dependency>

1、导入相关包 pagehelper-x.x.x.jar 和 jsqlparser-x.x.x.jar。

2、在MyBatis全局配置文件中配置分页插件。 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
 
<!-- 注意 <plugins> 在xml文件中的位置,必须要符合 http://mybatis.org/dtd/mybatis-3-config.dtd 中指定的顺序:-->
<!-- configuration (properties?, settings?, typeAliases?, typeHandlers?,
    objectFactory?, objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers?) -->
<configuration>    
    <!-- 为SQL定义部分的parameterType或resultType属性指定自定义类型的别名 -->
    <typeAliases>        
        <typeAlias alias="ServiceStation" type="com.mybatis.models.ServiceStation" />
        <typeAlias alias="InspectorInfo" type="com.mybatis.models.InspectorInfo" />
        <typeAlias alias="StationInspector" type="com.mybatis.models.StationInspector" />
    </typeAliases>
    <!-- 配置分页拦截器 -->
    <plugins>
        <!-- 配置分页插件  -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
        <!-- com.mybatis.util为PageHelper类所在包名 -->
        <!-- <plugin interceptor="com.mybatis.util.PagePlugin"> -->
            <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->       
            <!-- <property name="dialect" value="SQLite" /> -->
            <!-- <property name="pageSqlId" value=".*Page.*" /> -->
        <!-- </plugin> -->
    </plugins>  
    <!-- 设置数据库连接参数 -->
    <!-- 与spring 集成之后,这些可以完全删除,数据库连接的管理交给 spring 去管理 -->
    <environments default="development">
        <environment id="development">
        <transactionManager type="JDBC" />
            <dataSource type="POOLED"> 
                <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
                <property name="url" value="jdbc:sqlserver://mssql-rw-cyp-coopbusiness.vip.test.suixinhuan.com;DatabaseName=CYP_CoopBusiness" />
                <property name="username" value="Umanager" />
                <property name="password" value="ASD123asd!1" />
           </dataSource>
        </environment>
    </environments>  
    <!-- 加载SQL定义文件 -->
    <!-- 这里交给sqlSessionFactory 的 mapperLocations属性去得到所有配置信息 -->
    <mappers>          
         <mapper resource="com/mybatis/sql/ServiceStation.xml" />
         <mapper resource="com/mybatis/sql/InspectorInfo.xml" />
         <mapper resource="com/mybatis/sql/StationInspector.xml" />
    </mappers>
</configuration>

3、使用PageHelper提供的方法进行分页

 1 package com.mybatis;
 2  
 3 import java.util.List;
 4  
 5 import org.apache.ibatis.session.SqlSession;
 6  
 7 import com.github.pagehelper.Page;
 8 import com.github.pagehelper.PageHelper;
 9 import com.github.pagehelper.PageInfo;
10 import com.mybatis.dao.InspectorInfoMapper;
11 import com.mybatis.dao.MyBatisUtil;
12 import com.mybatis.dao.ServiceStationMapper;
13 import com.mybatis.dao.StationInspectorMapper;
14 import com.mybatis.models.ServiceStation;
15 import com.mybatis.models.InspectorInfo;
16 import com.mybatis.models.StationInspector;
17 //import com.mybatis.util.Page;
18  
19 /*
20  * 测试类
21  */
22 public class HelloMyBatisProgram {
23      public static void main(String[] args) {
24           SqlSession session = MyBatisUtil.getSession();
25           //由框架生成ServiceStationMapper接口实现对象
26           ServiceStationMapper ssDaoMaper = session.getMapper(ServiceStationMapper.class);
27           InspectorInfoMapper iiDaoMaper = session.getMapper(InspectorInfoMapper.class);
28           StationInspectorMapper siDaoMaper = session.getMapper(StationInspectorMapper.class);
29           //System.out.println(ssDaoMaper.getClass().getName());       
30           System.out.println("===========分页获取所有服务站列表============");    
31         
32           //分页设置放在查询之前           
33           Page<Object> page = PageHelper.startPage(1, 5, "StationName");
34           List<ServiceStation> listPage = ssDaoMaper.findAllPage("110100");      
35           for(ServiceStation item:listPage) {
36               System.out.println(item.getStationName()+"  "+item.getCityCode()+"  "+item.getCityName());
37           }    
38           System.out.println("当前页码:"+page.getPageNum());
39           System.out.println("每页的记录数:"+page.getPageSize());
40           System.out.println("总记录数:"+page.getTotal());
41           System.out.println("总页码:"+page.getPages());              
42      }    
43 }

 4、可以使用更强大的PageInfo封装返回结果

 1 package com.mybatis;
 2  
 3 import java.util.List;
 4  
 5 import org.apache.ibatis.session.SqlSession;
 6  
 7 import com.github.pagehelper.Page;
 8 import com.github.pagehelper.PageHelper;
 9 import com.github.pagehelper.PageInfo;
10 import com.mybatis.dao.InspectorInfoMapper;
11 import com.mybatis.dao.MyBatisUtil;
12 import com.mybatis.dao.ServiceStationMapper;
13 import com.mybatis.dao.StationInspectorMapper;
14 import com.mybatis.models.ServiceStation;
15 import com.mybatis.models.InspectorInfo;
16 import com.mybatis.models.StationInspector;
17 //import com.mybatis.util.Page;
18  
19 /*
20  * 测试类
21  */
22 public class HelloMyBatisProgram {
23      public static void main(String[] args) {
24           SqlSession session = MyBatisUtil.getSession();
25           //由框架生成ServiceStationMapper接口实现对象
26           ServiceStationMapper ssDaoMaper = session.getMapper(ServiceStationMapper.class);
27           InspectorInfoMapper iiDaoMaper = session.getMapper(InspectorInfoMapper.class);
28           StationInspectorMapper siDaoMaper = session.getMapper(StationInspectorMapper.class);
29           //System.out.println(ssDaoMaper.getClass().getName());       
30           System.out.println("===========分页获取所有服务站列表============");    
31              
32           //分页设置放在查询之前           
33           page = PageHelper.startPage(1, 3, "StationName desc");
34           List<ServiceStation> list = ssDaoMaper.findAll();
35           for(ServiceStation item:list) {
36                System.out.println(item.getStationName()+"  "+item.getCityCode()+"  "+item.getCityName());
37           }         
38           PageInfo<ServiceStation> info = new PageInfo<ServiceStation>(list, 3);                   
39           System.out.println("当前页码:"+info.getPageNum());
40           System.out.println("每页的记录数:"+info.getPageSize());
41           System.out.println("总记录数:"+info.getTotal());
42           System.out.println("总页码:"+info.getPages());
43           System.out.println("是否第一页:"+info.isIsFirstPage());
44           System.out.println("连续显示的页码:");
45           int[] nums = info.getNavigatepageNums();
46           for (int i = 0; i < nums.length; i++) {
47                System.out.println(nums[i]);
48           }      
49      }    
50 }

猜你喜欢

转载自www.cnblogs.com/fulong133/p/12711698.html