生活中,要学会沉淀生命,沉淀心情,沉淀自己


模拟百度分页最终实现效果如图:

本篇博客运行环境

JDK8 + IntelliJ IDEA 2018.3 + Tomcat 8.5.31

准备好了我们就开始吧!

首先我们要引入pagehelper 所需的依赖,我们直接在 pom.xml 中增加 jar 包依赖:

1 <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
2 <dependency>
3 <groupId>com.github.pagehelper</groupId>
4 <artifactId>pagehelper</artifactId>
5 <version>5.2.0</version>
6 </dependency>

也可在官网直接搜索复制

  • 第二步,配置相关环境

在 MyBatis 的 SessionFactory 配置中新增加一个属性名 plugins 的配置:

 1 <!--配置mybatisplus 插件-->
2 <property name="plugins">
3 <array>
4 <bean class="com.github.pagehelper.PageInterceptor">
5 <property name="properties">
6 <!-- Dialect: 方言 mysql Oracle SqlServer,
7 helperDialect = mysql:告诉pageHelper是什么数据库
8 reasonable=true : 使得分页信息合理化
9 -->
10 <value>
11 helperDialect=mysql
12 reasonable=true
13 supportMethodsArguments=true
14 params=count=countSql
15 autoRuntimeDialect=true
16 </value>
17 </property>
18 </bean>
19 </array>
20 </property>
  • 以上代码相关参数有注释,
  • 第三,我定义了一个工具类,用来保存分页所需两个参数

  • 定义查询数据的接口以及service

在这之前我们需要在前台完成我们分页条的设计,这里可以直接引入 Bootstrap 来完成:

  • 重点来了,我们要实现百度分页之前要了解的:

分析百度分页的效果及其算法
效果 如何实现
上一页,下一页,中间恒定为10个数字按钮
begin="1" end="10"
当前页码《=6,最后页码数字仍是10    进行判断
当前页码》6,当前页码保持居中前一位
begin="pageInfo.pageNum-5" end="pageInfo.pageNum+4"

第一个按钮的数值为:

num-5

最后一个按钮的数值为:

num+4

总页数少于10时,中间则不能有十个数字按钮   进行判断
尾页数不能超过总页数
pageInfo.pages<=(pageInfo.pageNum+4)

当前是第一页时,隐藏上一页和首页,当前是最后一页时,隐藏尾页和下一页按钮

  进行判断

当我们分析了实现模拟百度分页所需条件后,那么实现也就简简单单了。

下面是实现的算法

  1  <%--分页--%>
2 <div>
3 <nav aria-label="Page navigation example">
4 <ul class="pagination justify-content-center">
5
6
7 <%--当前页码大于1则显示首页以及上一页按钮--%>
8 <c:if test="${pageInfo.pageNum>1}">
9 <li class="page-item">
10 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=1">首页</a>
11 </li>
12 <li class="page-item">
13 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${pageInfo.prePage}" tabindex="-1" aria-disabled="true">上一页</a>
14 </li>
15 </c:if>
16
17
18
19
20
21
22
23
24
25
26
27 <c:choose>
28 <c:when test="${pageInfo.pageNum<=6}">
29 <c:if test="${pageInfo.pages<10}">
30 <c:forEach var="num" begin="1" end="${pageInfo.pages}">
31 <c:choose>
32 <c:when test="${pageInfo.pageNum==num}">
33 <li class="page-item active">
34 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${num}">${num}</a>
35 </li>
36 </c:when>
37 <c:otherwise>
38 <li class="page-item">
39 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${num}" >${num}</a>
40 </li>
41 </c:otherwise>
42 </c:choose>
43
44 </c:forEach>
45 </c:if>
46
47 <%--若总页数大于十页,则显示1~10 的页码--%>
48 <c:if test="${pageInfo.pages>=10}">
49 <c:forEach var="num" begin="1" end="10">
50 <c:choose>
51 <c:when test="${pageInfo.pageNum==num}">
52 <li class="page-item active">
53 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${num}">${num}</a>
54 </li>
55 </c:when>
56 <c:otherwise>
57 <li class="page-item">
58 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${num}" >${num}</a>
59 </li>
60 </c:otherwise>
61 </c:choose>
62
63 </c:forEach>
64 </c:if>
65 </c:when>
66 <c:otherwise>
67 <c:choose>
68 <c:when test="${pageInfo.pages<=(pageInfo.pageNum+4)}">
69 <c:forEach var="num" begin="${pageInfo.pages-9}" end="${pageInfo.pages}">
70 <c:choose>
71 <c:when test="${pageInfo.pageNum==num}">
72 <li class="page-item active">
73 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${num}" >${num}</a>
74 </li>
75 </c:when>
76 <c:otherwise>
77 <li class="page-item">
78 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${num}" >${num}</a>
79 </li>
80 </c:otherwise>
81 </c:choose>
82 </c:forEach>
83 </c:when>
84 <c:otherwise>
85 <c:forEach var="num" begin="${pageInfo.pageNum-5}" end="${pageInfo.pageNum+4}">
86 <c:choose>
87 <c:when test="${pageInfo.pageNum==num}">
88 <li class="page-item active">
89 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${num}" tabindex="-1" aria-disabled="true">${num}</a>
90 </li>
91 </c:when>
92 <c:otherwise>
93 <li class="page-item">
94 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${num}" tabindex="-1" aria-disabled="true">${num}</a>
95 </li>
96 </c:otherwise>
97 </c:choose>
98 </c:forEach>
99 </c:otherwise>
100 </c:choose>
101 </c:otherwise>
102 </c:choose>
103
104
105
106 <%--当前页码小于总页数时才显示下一页--%>
107 <c:if test="${pageInfo.pageNum<pageInfo.pages}">
108 <li class="page-item">
109 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${pageInfo.nextPage}">下一页</a>
110 </li>
111 <li class="page-item">
112 <a class="page-link" href="${pageContext.request.contextPath}/jsp/user/query?pageNum=${pageInfo.pages}">尾页</a>
113 </li>
114 </c:if>
115
116
117
118
119
120 </ul>
121 </nav>
122 </div>
123
124 <%--分页结束--%>
  • 最后实现结果:

  • 总结

博客写完后还是未达到自己的一个预期,效果也有些不尽其意。

前面是我一些自己的思路与步骤,篇幅问题不够详细,

不过最后的算法还是可取的,可以只参考算法。

若要我之前写的SSM项目 - 超市管理系统可以私信我。

 
 

使用Mybatis插件 PageHelper 模拟百度分页(Day_20)的更多相关文章

  1. MySQL高效分页-mybatis插件PageHelper改进

    MySQL分页在表比较大的时候,分页就会出现性能问题,MySQL的分页逻辑如下:比如select * from user limit 100000,10 它是先执行select * from user ...

  2. MyBatis 插件使用-简单的分页插件

    目录 1 分页参数的传递 2 实现 Interceptor 接口 2.1 Interceptor 接口说明 2.1 注解说明 2.3 实现分页接口 PageInterceptor 3. 更改配置 4 ...

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

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

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

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

  5. spring boot+mybatis+mysql增删改查分页

    server: port: servlet: context-path: /springBootMybatis spring: datasource: name: test url: jdbc:mys ...

  6. Mybatis分页插件PageHelper正确的用法(网上有2篇不够科学的文章)

    今天下午在Mybatis项目中.实现分页.由于我是后加入项目中的,Leader用的是PageHelper这个组件.可是我在实际使用的过程中遇到了2个大问题. 1.p=2#comments" ...

  7. Mybatis分页插件PageHelper正确的使用方法(网上有2篇不够科学的文章)

    今天下午在Mybatis项目中,实现分页.因为我是后加入项目中的,Leader用的是PageHelper这个组件,但是我在实际使用的过程中遇到了2个大问题. 1.http://www.oschina. ...

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

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

  9. Springboot集成mybatis通用Mapper与分页插件PageHelper

    插件介绍 通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及 Example 相关的单表操作.通用 Mapper 是为了解决 MyBatis 使用 ...

随机推荐

  1. Python 多线程(一)

    Python多线程(一) 目录 Python多线程(一) 线程 Python线程模型 Python虚拟机按照下面所述方式来切换线程 Threading模块 未引进线程 结果 引入线程 方式一:创建Th ...

  2. JavaCV 视频滤镜(LOGO、滚动字幕、画中画、NxN宫格)

    其实,在JavaCV中除了FFmpegFrameGrabber和FFmpegFrameRecorder之外,还有一个重要的类,那就是FFmpegFrameFilter. FFmpegFrameFilt ...

  3. k8s 安装 rabbitMQ 单机版

    rabbitMQ docker镜像使用rabbitmq:3.8-management service.yaml文件 apiVersion: v1 kind: Service metadata: nam ...

  4. kubernetes集群centos7初始化

    设置系统主机名以及 Host 文件的相互解析 hostnamectl set-hostname k8s-master01 安装依赖包 yum -y install wget net-tools nfs ...

  5. 软件篇-06-SLAM小车Self Navigation

    当SLAM小车能够以较高的精度运动到人为设置的目标点时,下一步就是把SLAM小车放到一个陌生的环境中,让它自己建图了.为什么?因为它已经是一只成熟的SLAM小车了.   我这里写的比较简单,刚写还没几 ...

  6. phpstorm2017 激活方法

    1.license server 在线激活方式 不是很推荐,自己有服务器的话可以考虑搭建 以下地址可以用一下,不保证长期有效 http://idea.goxz.gq http://v2mc.net:1 ...

  7. Sass中连体符(&)的运用

    在CSS中,这种想法是无法实现的,但在Sass中,可以轻松的通过连体符&来实现.这也是我们今天要说的. 我们先来回忆一下,CSS中常见的一组样式: /*页面中链接的颜色*/ a {clolor ...

  8. 浅谈程序设计和C语言

    学前必备知识 程序:一组计算机能识别和执行的指令. 计算机语言:计算机工作基于二进制,计算机只能识别和接受由0和1组成的指令. 计算机能直接识别和接受的二进制代码称为机器指令.机器指令的集合就是该计算 ...

  9. 病毒木马查杀实战第012篇:QQ盗号木马之逆向分析

    前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇250 ...

  10. Nessus扫描器的使用

    目录 Nessus Scans Settings 一个基本扫描的建立 自定义扫描策略 Nessus的高级扫描方法 Nessus Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组 ...