使用Mybatis插件 PageHelper 模拟百度分页(Day_20)
生活中,要学会沉淀生命,沉淀心情,沉淀自己
模拟百度分页最终实现效果如图:

本篇博客运行环境
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)的更多相关文章
- MySQL高效分页-mybatis插件PageHelper改进
MySQL分页在表比较大的时候,分页就会出现性能问题,MySQL的分页逻辑如下:比如select * from user limit 100000,10 它是先执行select * from user ...
- MyBatis 插件使用-简单的分页插件
目录 1 分页参数的传递 2 实现 Interceptor 接口 2.1 Interceptor 接口说明 2.1 注解说明 2.3 实现分页接口 PageInterceptor 3. 更改配置 4 ...
- (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示
http://blog.csdn.net/yerenyuan_pku/article/details/72774381 上文我们实现了展示后台页面的功能,而本文我们实现的主要功能是展示商品列表,大家要 ...
- MyBatis 分页插件PageHelper 后台报错
今天遇到一个问题,使用MyBatis 分页插件PageHelper 进行排序分页后,能正常返回正确的结果,但后台却一直在报错 net.sf.jsqlparser.parser.ParseExcepti ...
- spring boot+mybatis+mysql增删改查分页
server: port: servlet: context-path: /springBootMybatis spring: datasource: name: test url: jdbc:mys ...
- Mybatis分页插件PageHelper正确的用法(网上有2篇不够科学的文章)
今天下午在Mybatis项目中.实现分页.由于我是后加入项目中的,Leader用的是PageHelper这个组件.可是我在实际使用的过程中遇到了2个大问题. 1.p=2#comments" ...
- Mybatis分页插件PageHelper正确的使用方法(网上有2篇不够科学的文章)
今天下午在Mybatis项目中,实现分页.因为我是后加入项目中的,Leader用的是PageHelper这个组件,但是我在实际使用的过程中遇到了2个大问题. 1.http://www.oschina. ...
- Mybatis分页插件-PageHelper的使用
转载:http://blog.csdn.net/u012728960/article/details/50791343 Mybatis分页插件-PageHelper的使用 怎样配置mybatis这里就 ...
- Springboot集成mybatis通用Mapper与分页插件PageHelper
插件介绍 通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及 Example 相关的单表操作.通用 Mapper 是为了解决 MyBatis 使用 ...
随机推荐
- house_of_storm 详解
house_of_storm 漏洞危害 House_of_storm 可以在任意地址写出chunk地址,进而把这个地址的高位当作size,可以进行任意地址分配chunk,也就是可以造成任意地址写的后果 ...
- Git简单操作及原理
设置签名: 用户名:tom Email地址:goodMorning@atguigu.com git config user.name tom_pro git config user.e ...
- rpm 和 yum 软件管理
软件安装总结: 安装软件方式有如下几种: 方式1:编译安装 将源码程序按照需求进行先编译,后安装 缺点: 安装过程复杂,而且很慢 优点: 安装过程可控,真正的按需求进行安装(安装位置.安装的模块都可以 ...
- 07- Linux常用命令
cat命令 作用:将文件内容作为标准输出打印到终端. 格式:cat 文件名1 文件名2 例如: cat more命令: 作用:分页显示文本文件的内容 格式:more 文件名 实例:more he ...
- Windows下反(反)调试技术汇总
反调试技术,恶意代码用它识别是否被调试,或者让调试器失效.恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间.为了阻止调试器的分析,当 ...
- POJ 1201 差分约束(集合最小元素个数)
题意: 给你一个集合,然后有如下输入,a ,b ,c表示在范围[a,b]里面有至少有c个元素,最后问你整个集合最少多少个元素. 思路: 和HDU1384一模一样,首先这个题目可 ...
- POJ2983 查分约束系统
题意: 给你n个点,然后给你两种情况,P a b c,表明a在b的北边c那么远,V a b 表明a在b的北边(距离最少是1),问你这些条件是否冲突. 思路: 一开始想用带权并 ...
- UVA10340子序列
题意: 给你两个串,问你第二个第一个串是否是第一个串删除0个或多个字母得到的? 思路: 直接模拟就行了,在第二个串中去按顺序更新第一个串的下标,好像没说明白啊,不管了,水题,不 ...
- 如何在C或C++代码中嵌入ARM汇编代码
转载自:http://blog.csdn.net/roland_sun/article/details/42921131 大家知道,用C或者C++等高级语言编写的程序,会被编译器编译成最终的机器指令. ...
- XCTF-shrine
shrine 直接看题 进来给了个python代码 import flask import os app = flask.Flask(__name__) app.config['FLAG'] = os ...