使用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 使用 ...
随机推荐
- linux 查看cpu型号、memory
查看CPU信息(型号) [root@TX-220-60-211 supdev]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 40 In ...
- JAVAEE_Servlet_24_HttpSession实现原理
关于JavaWeb中的HttpSession (一) * Session表示会话,不止存在于JavaWeb之中,只要是Web开发都会存在这种机制 * Session包:javax.servlet.ht ...
- OO Unit3 总结
OO Unit3 总结 OO课Unit3人际关系网JML应用技术回顾 BUAA.1823.邓新宇 2020/5/23 梳理JML语言的理论基础.应用工具链情况 方法规格 JML中,同一个方法在不同的条 ...
- Hyperledger Fabric2.3环境搭建
采用Ubuntu系统下搭建 HyperledgerFabric2.3 环境 安装GoLang 下载golang安装包 https://studygolang.com/dl 下载完成后解压,移到/usr ...
- 【Springboot】Springboot自动装配原理
1.核心注解就是 EnableAutoConfiguration 该注解会激活SpringBoot的自动装配功能: 代码如下: @Target(ElementType.TYPE) @Retentio ...
- php 二维数组排序详解: array_multisort
定义和用法 array_multisort() 函数返回一个排序数组.您可以输入一个或多个数组.函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序. 注释: ...
- 【运维--系统】nacos介绍和安装
目录: 简介 安装java 安装mysql 安装nacos 附录 简介 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服 ...
- POJ2186 强联通
题意: 有一群老牛,给你一些关系,a b表示牛a仰慕牛b,最后问你有多少个牛是被所有牛仰慕的. 思路: 假如这些仰慕关系不会出现环,那么当且仅当只有一只牛的出度为0的时候答案才 ...
- hdu4454 三分 求点到圆,然后在到矩形的最短路
题意: 求点到圆,然后在到矩形的最短路. 思路: 把圆切成两半,然后对于每一半这个答案都是凸性的,最后输出两半中小的那个就行了,其中有一点,就是求点到矩形的距离,点到矩形的距离 ...
- Python小游戏 -- 猜单词
Python初学者小游戏:猜单词 游戏逻辑:就像我们曾经英语学习机上的小游戏一样,电脑会从事先预置的词库中抽取单词,然后给出单词的字母数量,给定猜解次数,然后让玩家进行猜测,并给出每次猜测的正确字母与 ...