话不多说,直接导入、部署流程。
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(); } }