PageHelper分页插件及通用分页js

 分页概述

1.物理分页

物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果。建议使用。

2.逻辑分页

逻辑分页依赖的是程序员编写的代码。数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合有序,再根据索引获取指定范围的数据。

MyBatis 分页插件 - PageHelper

该插件目前支持以下数据库的物理分页:

  1. Oracle
  2. Mysql
  3. MariaDB
  4. SQLite
  5. Hsqldb
  6. PostgreSQL
  7. DB2
  8. SqlServer(2005,2008)
  9. Informix
  10. H2
  11. SqlServer2012
  12. Derby
  13. Phoenix

分页插件 5.0

由于分页插件 5.0 版本和 4.2.x 实现完全不同,所以 master 分支为 5.x 版本,4.2 作为一个分支存在,如果有针对 4.2 的 PR,请注意提交到分支版本。

集成

使用 PageHelper 你只需要在 classpath 中包含 pagehelper-x.x.x.jar 和 jsqlparser-0.9.5.jar

如果你使用 Maven,你只需要在 pom.xml 中添加下面的依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>最新版本</version>
</dependency>

本次开发环境:JDK1.8+MySql5.0+Mybatis-pagehelper4.2.1+maven

注意maven中的其他依赖的版本可能会影响该插件,导致引入失败

使用步骤

1.在maven pom.xml中添加依赖

2.在Mybatis-config.xml中sqlSessionFactory中添加插件配置

<!--分页插件-->
<property name="plugins">
    <array>
        <bean class="com.github.pagehelper.PageHelper">
            <property name="properties">
                <value>
                    dialect=mysql
                </value>
            </property>
        </bean>
    </array>
</property>

3.写sql、service

  public PageInfo<Student> selectByUnitId(Integer id,Integer currPage,Integer pageSize) {
        PageHelper.startPage(currPage,pageSize);//当前页面编号+(从第0页开始),每页的大小
        PageInfo<Student> pageInfo  = new PageInfo<Student>(studentDao.selectByUnitId(id));
        return pageInfo;
    }
建议sql不要这样简单粗暴的查询
sql:select * from student;
即使如此pageHelper插件也会自动的查询指定的条数
PageInfo:大致包含以下信息:{pageNum=1, pageSize=5, size=5, startRow=1, endRow=5, total=10, pages=2, list{...}}
每次查询之后将指定条数的数据放在PageInfo中。
在Controller层 把pageInfo放在requestScope中,命名student(与下文同)

 这样就可以根据pageNum输出指定的信息

jsp:分页标签

     这是一个完整的分页标签,只要更改参数即可
                          <div class="text-center">
                                    <nav>
                                        <ul class="pagination">
                                            <li>
                                                <a href="<c:url value="/student?unitId=${param.unitId}&currPage=1&unitName=${param.unitName}"/>">首页</a>
                                            </li>
                                            <li>
                                                <a href="<c:url value="/student?unitId=${param.unitId}&currPage=${student.pageNum-1>1?student.pageNum-1:1}&unitName=${param.unitName}   "/>">&laquo;</a>
                                            </li>

                                            <c:forEach begin="1" end="${student.pages}" varStatus="loop">
                                                <c:set var="active" value="${loop.index==student.pageNum?'active':''}"/>
                                                <li class="${active}"><a
                                                        href="<c:url value="/student?unitId=${param.unitId}&currPage=${loop.index}&unitName=${param.unitName}"/>">${loop.index}</a>
                                                </li>
                                            </c:forEach>
                                            <li>
                                                <a href="<c:url value="/student?unitId=${param.unitId}&currPage=${student.pageNum+1<student.pages?student.pageNum+1:student.pages}&unitName=${param.unitName}"/>">&raquo;</a>
                                            </li>
                                            <li>
                                                <a href="<c:url value="/student?unitId=${param.unitId}&currPage=${student.pages}&unitName=${param.unitName}"/>">尾页</a>
                                            </li>
                                        </ul>
                                    </nav>
                                </div>

js:分页代码

function createPaginationNav(e, t, a, n, p, o, i, s) {
    null == e && (e = ""), e = e.replace(/\&currPage=\d+\&/, "&"), e = e.replace(/\&?currPage=\d+\&?/, "");
    var r = e.length;
    r > 0 && "?" == e.charAt(r - 1) && (e = e.replace("?", "")), null == i && (i = ""), "undefined" == typeof s && (s = 10);
    var g = s,
        l = e,
        f = l.indexOf("?");
    if (l += f > 0 ? "&currPage=" : "?currPage  =", document.write('<span style="font-size:12px;">第' + t + "页&nbsp;</span>"), document.write('<span style="font-size:12px;">共' + p + "页&nbsp;</span>"), p > 1) {
        1 == t ? (document.write('<a href="#">首页</a>'), document.write('<a href="#" title="上一页"><span style="font-size:12px;">&lt;&lt;</span></a>')) : (document.write('<a href="' + l + '1">首页</a>'), document.write('<a href="' + l + a + '" title="上一页"><span style="font-size:12px;">&lt;&lt;</span></a>'));
        var d = 1;
        if (p > g) {
            var u = 0,
                c = 0,
                m = Math.round(g / 2);
            for (d = p / g + 1, t > m && p - m >= t ? (u = t - m, c = t + m - 1) : m >= t ? (u = 1, c = g) : (u = p - g + 1, c = p), c > p && (c = p), ipage = u; c >= ipage; ipage++) p >= ipage && document.write(t == ipage ? '<a href="' + l + ipage + '" ><span style="font-size:18px;color:red;">' + ipage + "</span></a>" : '<a href="' + l + ipage + '" ><span style="font-size:12px;">' + ipage + "</span></a>")
        } else
            for (ipage = 1; p >= ipage; ipage++) document.write(t == ipage ? '<a href="' + l + ipage + '" ><span style="font-size:18px;color:red;">' + ipage + "</span></a>" : '<a href="' + l + ipage + '" ><span style="font-size:12px;">' + ipage + "</span></a>");
        t == p ? (document.write('<a href="#" title="下一页"><span style="font-size:12px;">&gt;&gt;</span></a>'), document.write('<a href="#">尾页</a>')) : (document.write('<a href="' + l + n + '" title="下一页"><span style="font-size:12px;">&gt;&gt;</span></a>'), document.write('<a href="' + l + p + '">尾页</a>')), document.write('<input type="text" id="gotopage' + i + '" size="2" onkeypress="if (event.keyCode == 13)goto_page(\'' + l + "','" + i + '\')">&nbsp;&nbsp;<a href="#" onclick="goto_page(\'' + l + "','" + i + '\')"><span style="font-size:12px;">GOTO</span></a>')
    }
}

function goto_page(e, t) {
    var a = /^[0-9]+$/;
    return gotoInputId = "gotopage" + t, a.test(document.getElementById(gotoInputId).value) ? void(location.href = e + document.getElementById(gotoInputId).value) : (alert("请输入数字!"), document.getElementById(gotoInputId).value = "", !1)
}

//在jsp中调用此函数

MyBatis plus通用Mapper实现分页

使用Mybatisplus插件中的PageIntercepter插件可以实现物理分页

安装:https://www.cnblogs.com/jin-nuo/p/9734599.html

private ApplicationContext ioc =
                new ClassPathXmlApplicationContext("applicationContext.xml");
    private EmployeeMapper employeeMapper=
            ioc.getBean("employeeMapper", EmployeeMapper.class);
    //5. 分页查询page集成rowBounds  Page(currPage,Pagesize);(内存分页)
    List<Employee> emps = employeeMapper.selectPage(new Page<>(3, 2), null);
    System.out.println(emps);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

SpringBoot ( 十二 ) :SpringBoot 如何测试打包部署

有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发、调试...

11320
来自专栏依乐祝

Net Core集成Exceptionless分布式日志功能以及全局异常过滤

这篇文章有一部分内容翻译自官方文档,[点我阅读][https://github.com/exceptionless/Exceptionless.Net/wiki...

12120
来自专栏cmazxiaoma的架构师之路

FastDFS蛋疼的集群和负载均衡(七)之Nginx高可用集群应用到FastDFS集群

15820
来自专栏魏艾斯博客www.vpsss.net

如何创建.htaccess 文件

关于.htaccess 文件,一般用于虚拟主机中,使用 VPS 建站的可以忽略了。对于使用虚拟主机建站的朋友来说.htaccess 文件可以用作伪静态化设置和 ...

48580
来自专栏张善友的专栏

在 Windows 上安装Rabbit MQ 指南

rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。他遵循Mozilla Public License开源协议。采用 Erlang 实现...

23890
来自专栏NetCore

Identity Service - 解析微软微服务架构eShopOnContainers(二)

接上一篇,众所周知一个网站的用户登录是非常重要,一站式的登录(SSO)也成了大家讨论的热点。微软在这个Demo中,把登录单独拉了出来,形成了一个Service,...

29150
来自专栏Seebug漏洞平台

使用 XML 内部实体绕过 Chrome 和 IE 的 XSS 过滤器

来源:BypassingXSSFiltersusingXMLInternalEntities 原作者:DavidLitchfield (david@davidl...

435100
来自专栏WindCoder

自用插件整理之表格bootstrap-table

本插件基于bootstrap,网上各种例子也比较多,本文就不详细列api一类的了,只将自己常用的记录一下。多数代码中存在的注释,就不再重写。

1.3K10
来自专栏Felix的技术分享

《一个操作系统的实现》笔记(2)--保护模式

42080
来自专栏Python小屋

Python使用扩展库progressbar显示进度条

首先https://pypi.python.org/pypi/progressbar2/3.20.0下载whl文件,然后使用pip进行本地安装。 导入后面代码所...

48370

扫码关注云+社区

领取腾讯云代金券