话不多说,直接导入、部署流程。

1. 引入插件依赖包:

  maven工程中,pom.xml文件下,添加插件配置项:

  

2. 配置插件拦截器:

  webapp -> WEB-INF 下添加 .xml配置文件

<?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">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
       <!-- 方言 -->
<property name="dialect" value="sqlserver"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样-->
<property name="offsetAsPageNum" value="true"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true"/>
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
<property name="pageSizeZero" value="true"/>
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="false"/>
<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
<!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
<!-- 不理解该含义的前提下,不要随便复制该配置 -->
<property name="params" value="pageNum=start;pageSize=limit;"/>
<!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
<property name="returnPageInfo" value="check"/>
</plugin>
</plugins>
</configuration>

3.使用方式:  

  

4.源码:

  

import com.github.pagehelper.Page;

import java.io.Serializable;
import java.util.Collection;
import java.util.List; /**
* 2018/6/8
* @author pp
*/
public class PageInfoUtils<T> implements Serializable {
private static final long serialVersionUID = 1L;
/** 当前页 */
private int pageNum;
/** 每页的数量 */
private int pageSize;
/** 当前页的数量 */
private int size;
/** 排序 */
private String orderBy;
/** 当前页面第一个元素在数据库中的行号 */
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;
/** 是否为最后一页 */
private boolean isLastPage;
/** 是否有前一页 */
private boolean hasPreviousPage;
/** 是否有下一页 */
private boolean hasNextPage;
/** 导航页码数 */
private int navigatePages;
/** 所有导航页号 */
private int[] navigatepageNums; public PageInfoUtils() {
this.isFirstPage = false;
this.isLastPage = false;
this.hasPreviousPage = false;
this.hasNextPage = false;
}
/**
* 包装Page对象
*
* @param list
*/
public PageInfoUtils(List<T> list) {
this(list, 8);
}
/**
* 包装Page对象
*
* @param list page结果
* @param navigatePages 页码数量
*/
public PageInfoUtils(List<T> list, int navigatePages) {
this.isFirstPage = false;
this.isLastPage = false;
this.hasPreviousPage = false;
this.hasNextPage = false;
if (list instanceof Page) {
Page page = (Page)list;
this.pageNum = page.getPageNum();
this.pageSize = page.getPageSize();
this.orderBy = page.getOrderBy();
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 = 1;
this.list = list;
this.size = list.size();
this.total = (long)list.size();
this.startRow = 0;
this.endRow = list.size() > 0 ? list.size() - 1 : 0;
} if (list instanceof Collection) {
this.navigatePages = navigatePages;
//计算导航页
this.calcNavigatepageNums();
//计算前后页,第一页,最后一页
this.calcPage();
//判断页面边界
this.judgePageBoudary();
} } public PageInfoUtils(List<T> list, int pageNum, int pageSize,int navigatePages) {
if (0 == navigatePages) {
navigatePages = 8;
}
this.isFirstPage = false;
this.isLastPage = false;
this.hasPreviousPage = false;
this.hasNextPage = false;
if (list instanceof Page) {
Page page = (Page)list;
this.pageNum = page.getPageNum();
this.pageSize = page.getPageSize();
this.orderBy = page.getOrderBy();
this.pages = page.getPages();
this.list = page;
this.size = page.size();
this.total = page.getTotal();
if (this.size == 0) {
this.startRow = 0;
this.endRow = 0;
} else {
this.startRow = page.getStartRow() + 1;
this.endRow = this.startRow - 1 + this.size;
}
} else if (list instanceof Collection) {
this.pageNum = pageNum;
this.pageSize = pageSize;
if (list.size() > 0) {
int listSize = list.size();
this.pages = (listSize / pageSize) + 1;
this.list = list.subList(pageNum * pageSize, (pageNum + 1) * pageSize);
} else {
this.pages = list.size();
this.list = list;
} this.size = pageSize;
this.total = (long) list.size();
this.startRow = list.size() > 0 ? (pageNum - 1) * pageSize + 1 : 0;
this.endRow = list.size() > 0 ? pageNum * pageSize : 0;
} if (list instanceof Collection) {
this.navigatePages = navigatePages;
this.calcNavigatepageNums();
this.calcPage();
this.judgePageBoudary();
} }
/**
* 计算导航页
*/
private void calcNavigatepageNums() {
//当总页数小于或等于导航页码数时
if (this.pages <= this.navigatePages) {
this.navigatepageNums = new int[this.pages];
for(int i = 0; i < this.pages; ++i) {
this.navigatepageNums[i] = i + 1;
}
} else {//当总页数大于导航页码数时
this.navigatepageNums = new int[this.navigatePages];
int startNum = this.pageNum - this.navigatePages / 2;
int endNum = this.pageNum + this.navigatePages / 2;
if (startNum < 1) {
startNum = 1;
//(最前navigatePages页
for(int i = 0; i < this.navigatePages; ++i) {
this.navigatepageNums[i] = startNum++;
}
} else if (endNum > this.pages) {
endNum = this.pages;
//最后navigatePages页
for(int i = this.navigatePages - 1; i >= 0; --i) {
this.navigatepageNums[i] = endNum--;
}
} else {
//所有中间页
for(int i = 0; i < this.navigatePages; ++i) {
this.navigatepageNums[i] = startNum++;
}
}
} }
/**
* 计算前后页,第一页,最后一页
*/
private void calcPage() {
if (this.navigatepageNums != null && this.navigatepageNums.length > 0) {
this.firstPage = this.navigatepageNums[0];
this.lastPage = this.navigatepageNums[this.navigatepageNums.length - 1];
if (this.pageNum > 1) {
this.prePage = this.pageNum - 1;
} if (this.pageNum < this.pages) {
this.nextPage = this.pageNum + 1;
}
} }
/**
* 判定页面边界
*/
private void judgePageBoudary() {
this.isFirstPage = this.pageNum == 1;
this.isLastPage = this.pageNum == this.pages;
this.hasPreviousPage = this.pageNum > 1;
this.hasNextPage = this.pageNum < this.pages;
} public int getPageNum() {
return this.pageNum;
} public void setPageNum(int pageNum) {
this.pageNum = pageNum;
} public int getPageSize() {
return this.pageSize;
} public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} public int getSize() {
return this.size;
} public void setSize(int size) {
this.size = size;
} public String getOrderBy() {
return this.orderBy;
} public void setOrderBy(String orderBy) {
this.orderBy = orderBy;
} public int getStartRow() {
return this.startRow;
} public void setStartRow(int startRow) {
this.startRow = startRow;
} public int getEndRow() {
return this.endRow;
} public void setEndRow(int endRow) {
this.endRow = endRow;
} public long getTotal() {
return this.total;
} public void setTotal(long total) {
this.total = total;
} public int getPages() {
return this.pages;
} public void setPages(int pages) {
this.pages = pages;
} public List<T> getList() {
return this.list;
} public void setList(List<T> list) {
this.list = list;
} public int getFirstPage() {
return this.firstPage;
} public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
} public int getPrePage() {
return this.prePage;
} public void setPrePage(int prePage) {
this.prePage = prePage;
} public int getNextPage() {
return this.nextPage;
} public void setNextPage(int nextPage) {
this.nextPage = nextPage;
} public int getLastPage() {
return this.lastPage;
} public void setLastPage(int lastPage) {
this.lastPage = lastPage;
} public boolean isIsFirstPage() {
return this.isFirstPage;
} public void setIsFirstPage(boolean isFirstPage) {
this.isFirstPage = isFirstPage;
} public boolean isIsLastPage() {
return this.isLastPage;
} public void setIsLastPage(boolean isLastPage) {
this.isLastPage = isLastPage;
} public boolean isHasPreviousPage() {
return this.hasPreviousPage;
} public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
} public boolean isHasNextPage() {
return this.hasNextPage;
} public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
} public int getNavigatePages() {
return this.navigatePages;
} public void setNavigatePages(int navigatePages) {
this.navigatePages = navigatePages;
} public int[] getNavigatepageNums() {
return this.navigatepageNums;
} public void setNavigatepageNums(int[] navigatepageNums) {
this.navigatepageNums = navigatepageNums;
} public String toString() {
StringBuffer sb = new StringBuffer("PageInfoUtils{");
sb.append("pageNum=").append(this.pageNum);
sb.append(", pageSize=").append(this.pageSize);
sb.append(", size=").append(this.size);
sb.append(", startRow=").append(this.startRow);
sb.append(", endRow=").append(this.endRow);
sb.append(", total=").append(this.total);
sb.append(", pages=").append(this.pages);
sb.append(", list=").append(this.list);
sb.append(", firstPage=").append(this.firstPage);
sb.append(", prePage=").append(this.prePage);
sb.append(", nextPage=").append(this.nextPage);
sb.append(", lastPage=").append(this.lastPage);
sb.append(", isFirstPage=").append(this.isFirstPage);
sb.append(", isLastPage=").append(this.isLastPage);
sb.append(", hasPreviousPage=").append(this.hasPreviousPage);
sb.append(", hasNextPage=").append(this.hasNextPage);
sb.append(", navigatePages=").append(this.navigatePages);
sb.append(", navigatepageNums=");
if (this.navigatepageNums == null) {
sb.append("null");
} else {
sb.append('['); for(int i = 0; i < this.navigatepageNums.length; ++i) {
sb.append(i == 0 ? "" : ", ").append(this.navigatepageNums[i]);
} sb.append(']');
} sb.append('}');
return sb.toString();
}
}

  

Mybatis 分页插件 PageHelper的更多相关文章

  1. Mybatis分页插件PageHelper的配置和使用方法

     Mybatis分页插件PageHelper的配置和使用方法 前言 在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分 ...

  2. Mybatis分页插件PageHelper使用

    一. Mybatis分页插件PageHelper使用  1.不使用插件如何分页: 使用mybatis实现: 1)接口: List<Student> selectStudent(Map< ...

  3. Java SSM框架之MyBatis3(三)Mybatis分页插件PageHelper

    引言 对于使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写count和select ...

  4. Mybatis学习---Mybatis分页插件 - PageHelper

    1. Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,S ...

  5. Mybatis分页插件PageHelper的实现

    Mybatis分页插件PageHelper的实现 前言 分页这个概念在做web网站的时候很多都会碰到 说它简单吧 其实也简单 小型的网站,完全可以自己写一个,首先查出数据库总条数,然后按照分页大小分为 ...

  6. 基于Mybatis分页插件PageHelper

    基于Mybatis分页插件PageHelper 1.分页插件使用 1.POM依赖 PageHelper的依赖如下.需要新的版本可以去maven上自行选择 <!-- PageHelper 插件分页 ...

  7. Mybatis分页插件-PageHelper的使用

    转载:http://blog.csdn.net/u012728960/article/details/50791343 Mybatis分页插件-PageHelper的使用 怎样配置mybatis这里就 ...

  8. (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示

    http://blog.csdn.net/yerenyuan_pku/article/details/72774381 上文我们实现了展示后台页面的功能,而本文我们实现的主要功能是展示商品列表,大家要 ...

  9. springmvc mybatis 分页插件 pagehelper

    springmvc mybatis 分页插件 pagehelper 下载地址:pagehelper 4.2.1 , jsqlparser 0.9.5 https://github.com/pagehe ...

  10. MyBatis 分页插件PageHelper 后台报错

    今天遇到一个问题,使用MyBatis 分页插件PageHelper 进行排序分页后,能正常返回正确的结果,但后台却一直在报错 net.sf.jsqlparser.parser.ParseExcepti ...

随机推荐

  1. create python project steps

    Setting Up Your First Project You don't have to manually create the structure above, many tools will ...

  2. mondb08---导入导出

    //Mongodb数据的导入导出 : 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的. 所以,都有如下通用选项:(本地机就不用这个了) -h host 主机 --port port ...

  3. Uvalive 4043 Ants —— 二分图最大权匹配 KM算法

    题目链接:https://vjudge.net/problem/UVALive-4043 题意: 给出n个白点和n个黑点的坐标, 要求用n条不相交的线段把他们连接起来,其中每条线段恰好连接一个白点和黑 ...

  4. POJ3694 Network —— 边双联通分量 + 缩点 + LCA + 并查集

    题目链接:https://vjudge.net/problem/POJ-3694 A network administrator manages a large network. The networ ...

  5. 五.OC基础--1.多态,2.类对象,3.点语法,4.@property&@synthesize,5.动态类型,内省(判断对象是否遵循特定的协议,以及是否可以响应特定的消息)

    五.OC基础--1.多态, 1. 多态概念,定义:多态就是某一类事物的多种形态: 表现形式: Animal *ani = [Dog new]; 多态条件:1.有继承关系 2.有方法的重写 2.多态代码 ...

  6. JSP+MySQL实例

    转自:https://www.yiibai.com/jsp/jsp_mysql.html 在本章中,我们将讨论如何使用JSP访问数据库(这里以MySQL数据库为例).并假设您对JDBC应用程序的工作方 ...

  7. supervisor - Python进程管理工具

    经常会碰到要写一些守护进程,简单做法放入后台: shell> nohup python xxx.py & 偶尔这么做还可以接受,如果一堆这样的呢? 当然还有一个问题,就是各种服务,对应的 ...

  8. Ajax 异步查询 ,刷新页面的一部分

    调用的过程是,通过Jquery注册单击事件,当单击分部视图中的按钮,就取得分部视图中文本框的值,然后调用$.Get()函数以Get形式调用控制器SearchPeople方法,参数为searchText ...

  9. bzoj 4320: ShangHai2006 Homework【分块】

    按根号300000=m分情况讨论 查询是,当x小于等于m,那么可以暴力记录直接出解:否则,用分块维护区间值,查询的时候以x为步长跳根号m次取最小值即可 还有一种并查集方法,来自https://www. ...

  10. bzoj 1632: [Usaco2007 Feb]Lilypad Pond【bfs】

    直接bfs,在过程中更新方案数即可 #include<iostream> #include<cstdio> #include<queue> using namesp ...