专栏首页专注研发PageHelper分页插件及通用分页js

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 条评论
登录 后参与评论

相关文章

  • POJ1331 Multiply(strtol函数练习)

    瑾诺学长
  • poj-1005-l tanink i need a houseboat

    Fred Mapper is considering purchasing some land in Louisiana to build his house ...

    瑾诺学长
  • MyBatis Generator的使用

    对于自动生成这件事吧,我本人中立,一直没用过,主要是因为浅尝辄止,它生成的东西有些懒得看,用一下还是挺舒服的

    瑾诺学长
  • JavaScript中的数据类型

    在ECMAScript中,变量是松散类型的。所谓松散类型就是指变量可以用来保存任何类型的数据。  // 下面的操作是完全合法的 var message = "h...

    就只是小茗
  • MVC项目开发中那些用到的知识点(js css优化-- 合并和压缩)

    在项目框架中,首先要引用很多css和js文件,80%的用户响应时间都是浪费在前端。而这些时间主要又是因为下载图片、样式表、JavaScript脚本、flash等...

    aehyok
  • Linux 下发送邮件

    由于种种原因,需要由我这个兼职运维每天发送对账单文件给运营同学,故研究下 Linux 发送邮件,希望对大家有所帮助。

    叨叨软件测试
  • VMware vRealize 修复服务器端请求伪造和任意文件写入漏洞

    3月30日,VMware发布了关于vRealize Operations的安全更新,本次安全更新修复了一处服务器端请求伪造漏洞(CVE-2021-21975),...

    用户6477171
  • 使用TensorFlow 2.0的简单BERT

    这篇文章展示了使用TensorFlow 2.0的BERT [1]嵌入的简单用法。由于TensorFlow 2.0最近已发布,该模块旨在使用基于高级Keras A...

    代码医生工作室
  • Kuberentes 1.20.5搭建eck

    https://cloud.tencent.com/act/season?from=14065

    对你无可奈何
  • # flutter之channel详解

    channel是无状态通信,一次send/reply后调用就结束了,类似http的无状态通信

    用户1175783

扫码关注云+社区

领取腾讯云代金券