PageHelper是一个分页插件,能够简单快速的帮助开发人员完成常见的分页功能,你只需要简单的使用两行代码就可以完成一个分页效果…

最近做一个科创项目,使用Maven+SSM的环境,有分页的功能,于是使用了PageHelper的分页工具来完成分页功能,体验非常不错。

1. 数据库准备

t_diy是用户自己写个性文章的的一个表,t_categories是文章的分类表,t_user用户表;要分页显示的就是根据分类ID查找对应类别的diy信息并显示。

2. PageHelper引入

1. 在pom.xml中引入依赖

1
2
3
4
5
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>

(官方推荐使用最新版本,当前最新是5.1.10)
虽然官方说明要引入pagehelper.jar和jsqlparser.jar,但实际上引入pagehelper.jar时会自动引入jsqlparser.jar

2. 配置Mybatis插件
可以选择在spring配置文件中配置,也可以在mybatis全局配置文件中配置插件。我是在mybatis全局文件中配置的。

1
2
3
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

这里要说明一点(本人踩过的坑):

注意plugins的书写位置

开始使用PageHelper

使用非常简单,调用PageHelper.startPage(pageNum,pageSize);第一个参数是第几页,第二个参数是页大小,紧跟其后的第一个查询方法就是一个分页查询了。

为了更方便的显示和处理分页的结果,可以使用PageInfo对查询结果进行封装:PageInfo pageInfo=new PageInfo(data,navigatePages);第一个参数是查询出来的数据集,一般可以是一个List,第二个参数是页面上需要连续显示多少页(可以省略)。

以下是我的代码:

1
2
3
4
5
6
7
8
9
10
@RequestMapping(value = "/showCategory")
public String getCategories(@RequestParam("cId")Integer cId,@RequestParam(value = "pageNum",defaultValue = "1")Integer pn,ModelMap map){
PageHelper.startPage(pn,14); //每页显示14条信息
List<Diy> diys=diyService.getCategories(cId); //获得分类id为cid的所有diy信息
PageInfo pageInfo=new PageInfo(diys,5); //封装为PageInfo
map.addAttribute("pageInfo",pageInfo); //PageInfo传给页面,可以直接使用EL表达式获取
map.addAttribute("cols", XBookUtil.getDiyCategoriesCols(pageInfo.getSize()));//这个是我为了较均为的排序数据所设计的方法(不需要关心)
map.addAttribute("curCategory",new Integer(cId));
return "html/bookDIY/categoryView"; //分类页面视图:categoryView.jsp
}

至于SQL语句,不需要做任何与分页相关的事情,我的SQL语句就是一个简单的查询:

以上就完成了最简单当然也是最常用的分页功能,是不是非常简单。

使用Bootstrap美化分页栏

分页数据得到了,当然也需要对页面进行优化,Bootstrap是一个容易上手的前端库,提供 大专栏  如何在实际项目中使用PageHelper分页插件了非常多的样式,地址:https://v4.bootcss.com

Bootstrap提供了分页栏样式,具体的使用就不都说了,可以参考官网。想要的效果应该是这样的:

其实包含了很多小的逻辑:

  • 第一页时首页不能点,前一页不显示
  • 最后一页时末页不能点,后一页不显示
  • 当前页高亮
  • 用户点击更新显示的页码

这就是为什么要将结果封装为PageInfo的好处,使用PageInfo可以方便的控制这些逻辑:

  1. PageInfo有一个属性navigatepageNums存放的是当前应该显示的页码,这和之前PageInfo构造的第二个参数有关。(循环显示页码)
  2. PageInfo有属性list,存放分页的数据(获取数据)
  3. PageInfo有属性pageNum,表示当前页码 (判断是否高亮显示)
  4. PageInfo有属性isFirstPage,isLastPage,表示是否是第一页和最后一页(控制首末页按钮,前后页的显示和隐藏)

我的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<c:if test="${pageInfo.list.size()>0}">
<div class="container mb-5">
<ul class="pagination justify-content-center">
<c:if test="${pageInfo.isFirstPage}">
<li class="page-item disabled"><a class="page-link" href="#">首页</a></li>
</c:if>
<c:if test="${pageInfo.isFirstPage != true}">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}">首页</a></li>
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}&pageNum=${pageInfo.pageNum-1}"><<</a></li>
</c:if>
<c:forEach items="${pageInfo.navigatepageNums}" var="pn">
<c:if test="${pageInfo.pageNum == pn}">
<li class="page-item active"><a class="page-link" href="#">${pn}</a></li>
</c:if>
<c:if test="${pageInfo.pageNum != pn}">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}&pageNum=${pn}">${pn}</a></li>
</c:if>
</c:forEach>
<c:if test="${pageInfo.isLastPage}">
<li class="page-item disabled"><a class="page-link" href="#">末页</a></li>
</c:if>
<c:if test="${pageInfo.isLastPage != true}">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}&pageNum=${pageInfo.pageNum+1}">>></a></li>
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath}/html/bookDIY/showCategory?cId=${curCategory}&pageNum=${pageInfo.pages}">末页</a></li>
</c:if>
</ul>
</div>
</c:if>
最后的效果如下所示:
![](如何在实际项目中使用PageHelper分页插件/result.PNG) (数据有限,只有两页...)

如何在实际项目中使用PageHelper分页插件的更多相关文章

  1. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-5.PageHelper分页插件使用

    笔记 5.PageHelper分页插件使用     简介:讲解开源组件,mybaits分页插件的使用 1.引入依赖             <!-- 分页插件依赖 -->          ...

  2. 17-SSM中通过pagehelper分页的实现

    SSM中通过pagehelper分页的实现 1. 在SSM框架的基础上实现,导包 <!-- 分页 --> <dependency> <groupId>com.git ...

  3. 项目中的一个分页功能pagination

    项目中的一个分页功能pagination <script> //总页数 ; ; //分页总数量 $(function () { // $("#pagination"). ...

  4. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

  5. PageHelper分页插件的使用

    大家好!今天写ssm项目实现分页的时候用到pageHelper分页插件,在使用过程中出现了一些错误,因此写篇随笔记录下整个过程 1.背景:在项目的开发的过程中,为了实现所有的功能. 2.目标:实现分页 ...

  6. SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页

    SpringBoot+Mybatis配置Pagehelper分页插件实现自动分页 **SpringBoot+Mybatis使用Pagehelper分页插件自动分页,非常好用,不用在自己去计算和组装了. ...

  7. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  8. 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  9. Mybatis的PageHelper分页插件的PageInfo的属性参数,成员变量的解释,以及页面模板

    作者:个人微信公众号:程序猿的月光宝盒 //当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 private int si ...

随机推荐

  1. Python opencv计算批量图片的BGR各自的均值

    #coding:utf-8 #第一种方式 很慢很慢 自己写的如何计算均值 ''' import cv2 import os def access_pixels(frame): print(frame. ...

  2. [CTSC2008]祭祀(二分图匹配)

    没有SPJ时显然是不需要输出方案的.不需要输出方案很好做,先把边扩展(因为会往下流),然后求最大独立集,最大独立集=n-最小点覆盖,因为其是最大独立集的补集.如何求最小点覆盖呢?毕竟我写过最大权闭合子 ...

  3. spring自定义aop

    package com.dhht.config.articleAdvice; import com.dhht.util.UUIDUtil;import lombok.extern.slf4j.Slf4 ...

  4. 天融信(NAT)地址转换端口映射配置

    目的地址为公司的公网地址 服务:选择或者自己定义一个端口号,就是要映射到服务器上的那个端口号 目的地址转换为:服务器ip 目的端口转换为:选择定义的服务(端口号) 规则描述:随便写

  5. hdu2222 (AC自动机模板)

    题:http://acm.hdu.edu.cn/showproblem.php?pid=2222 学习出:https://bestsort.cn/2019/04/28/402/ 主要是fail的建立. ...

  6. random mating

    随机交配种群 孟德尔分离(基于diploid and sexual)和随机交配(1.不因突变而改变的规律2.可计算的)是群体遗传学的基础. 随机交配(random mating)指群体中每一个成员与另 ...

  7. java threadlocal 背景 本质

    背景 JAVA中有全局变量(静态变量,不论在哪个函数 都能访问).局部变量(函数中定义的变量,在栈中,只能在本函数内访问),主要这2种类型. threadlocal变量 是一种线程级全局的变量(普通的 ...

  8. 32)PHP,遍历对象的属性或者属性值

    首先是遍历属性: <?php class A{ ; ; ; function fetchAllProp(){ //遍历时,key取得属性名,value取得对应值 foreach($this as ...

  9. 系统学习Javaweb6----JavaScript2

    感想:感觉自己还是只是学到皮毛,仍需继续努力,明天开始需要学习Android和阅读感想的书写. 学习笔记: 2.3.运算符 JavaScript运算符与java运算符基本一致. 这里我们来寻找不同点进 ...

  10. Django+Ajax+Mysql实现数据库数据的展示

    最近老师让搞一个系统,仅仅展示一下数据库的数据 在做海底捞时,是交接的师兄的项目,用的语言是java,框架是SSM(Spring.SpringMVC.MyBatis),这次我准备用Python写,前端 ...