zoukankan      html  css  js  c++  java
  • 使用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项目 - 超市管理系统可以私信我。

     
  • 相关阅读:
    在shell脚本中执行shell脚本
    通过shell脚本批处理es数据
    JOIN a table with a subquery
    学习率 测试
    步长为float
    解决pycharm问题:module 'pip' has no attribute 'main'
    段错误 “段错误(segment fault)”、“非法操作,该内存地址不能read/write” 非法指针解引用造成的错误。
    快速删除指定目录的指定条件的文件
    包依赖管理 项目的分布式迁移
    判断操作系统
  • 原文地址:https://www.cnblogs.com/papercy/p/14142847.html
Copyright © 2011-2022 走看看