自定义标题

  • 1.PageHelper的引用
  • 2.封装PageInfo类
  • 3.实例

1.PageHelper的引用

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>
<!--  Springboot的PageHelper的启动器 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.3</version>
</dependency>

2.封装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> 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的,所以实际的需要+1if (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;}@Deprecatedpublic 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;}@Deprecatedpublic 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;}@Overridepublic 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();}
}

3.实例

 public PageResult<Brand> queryBrandsByPage(String key, Integer page, Integer rows, String sortBy, boolean desc) {//根据name模糊查询,或者首字母查询Example example = new Example(Brand.class);Example.Criteria criteria = example.createCriteria();if (StringUtils.isEmpty(key)){//模糊查询名字,或者按首字母查询criteria.andLike("name", "%" + key + "%").orEqualTo("letter",key);}//添加分页条件PageHelper.startPage(page,rows);//添加排序条件//首先判断有没有排序字段if (StringUtils.isNotBlank(sortBy)){example.setOrderByClause(sortBy+ " " + (desc ? "desc" : "asc"));}List<Brand> brands = this.brandMapper.selectByExample(example);//先包装成pageInfo对象PageInfo<Brand> pageInfo = new PageInfo<>(brands);//包装成分页结果集返回//pageInfo//总记录数//private long total;//结果集//private List<T> list;return new PageResult<>(pageInfo.getTotal(),pageInfo.getList());}

pageInfo.getTotal() 总记录数
在真正使用时, 会发现total的值并不等于数据库中记录总数, 并且该值永远等于查询页的记录数, 即getTotal和getSize()效果相同. 读者若自行查看SQL日志, 可发现startPage()方法成功执行, 返回的List是符合查询条件的。
pageInfo.getList()返回的是一个结果集

PageHelper的PageInfo使用方法相关推荐

  1. PageHelper 与 PageInfo 的坑

    PageHelper 与 PageInfo PageHelper pageHelper的常用方法: Page<Object> page = PageHelper.startPage(cp, ...

  2. Mybatis的插件 PageHelper 分页查询使用方法

    Mybatis的一个插件,PageHelper,非常方便mybatis分页查询.国内牛人的一个开源项目,有兴趣的可以去看源码,都有中文注释(ps:某些源码一大堆英文,痛哭流涕!) 在github上仓库 ...

  3. 分页的使用(PageHelper与PageInfo)

    一,准备工作: 1)导包: <dependency><groupId>com.github.pagehelper</groupId><artifactId&g ...

  4. pagehelper,pageinfo用法

    pagehelper,从pageinfo 中取到的total不正确的处理. 最近在使用pagehelper时遇到一些问题.2个类似的查询都用的PageHelper.startPage进行分页,A方法p ...

  5. pageHelper与PageInfo联合进行分页查询原理

    示例代码 : 此条查询语句会被分页处理, 返回对应的结果集数据, 即users集合 question : 既然进行了分页处理, 那怎么获取数据的总条数呢? 其实users集合其实是Page对象, Pa ...

  6. PageHelper和PageInfo的使用

    Controller写法 import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; service ...

  7. Mybatis 分页插件 Pagehelper 的 PageInfo 字段属性解释

    示例,使用了分页插件返回的结果数据: {"pageNum":1,"pageSize":50,"size":1,"startRow& ...

  8. mybatis pagehelper实现分页

    jar包的版本一定要对应,不然会出现一系列的问题 下载jar包 <properties>           <!-- spring版本号 -->           < ...

  9. mybatis 分页查询_MyBatis之分页查询:MyBatis PageHelper

    MyBatis,作为目前流行的ORM框架,大大方便了日常开发.而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐.而MyBatis PageHelper的出现,则解决了这一痛点.这里 ...

最新文章

  1. 数据处理过程放在oracle,Oracle存储过程语法及常用函数总结
  2. 由于市场判断失误 希捷降低收入预期
  3. linux增加php进程数,linux - 调整php-fpm进程数之后,为什么负载飙升的厉害
  4. 数据库规范设计说明书(参考阿里开发规范)
  5. 24点游戏java_24点游戏动态规划解法(java)
  6. 大数据时代,怎么做全渠道的营销
  7. java bean转map
  8. Spring—使用类加载从配置文件中读取配置
  9. 神经网络入门之CNN(二)
  10. CodeMirror自动提醒配置
  11. Facebook KeyHash生成方法
  12. 批量导入手机通讯录_怎么批量导出联系人通讯录,华为手机通讯录转移如何操作?...
  13. c语言贪吃蛇实训报告文档,C语言实现贪吃蛇.docx
  14. 自旋锁学习系列(2):TAS锁
  15. c语言求布尔矩阵的乘积,离散数学 关系矩阵的布尔乘法的简便方法
  16. Hadoop HA架构图
  17. Windows鼠标右键添加cmd
  18. mysql查询字段最大的一条数据类型_SQL查询一个表中类别字段中Max()最大值对应的记录...
  19. 微信小程序实现单选、全选、反选、取消全选功能
  20. mysql的group语句_MySQL中distinct与group by语句的一些比较及用法讲解

热门文章

  1. html 晃动图标动画,SVG+CSS3 摇晃的铃铛动画图标
  2. 全站仪,激光跟踪仪,激光干涉仪,激光测距仪
  3. java 中的poi_Java中使用POI操作ExceL的读与
  4. Brendan Gregg 性能分析的方法
  5. 51nod 1607 卷积和(枚举搜索)
  6. vscode配置备忘录
  7. Delphi FMX正确设计和加载图片满足分布式跨平台App的性能需求-分布式跨平台App中美工图片的处理、上传下载、并发及客户端显示技术架构
  8. 如何无线接收服务器封包,大大通|如何抓取802.11a/b/g/n/ac 的无线网络封包
  9. 3亿美元换0.003秒,但时间一直这么贵!
  10. prometheus-adapter自定义hpa