PageHelper分页插件及通用分页js

 分页概述javascript

1.物理分页

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

2.逻辑分页

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

MyBatis 分页插件 - PageHelper

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

  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,请注意提交到分支版本。git

集成

使用 PageHelper 你只须要在 classpath 中包含 pagehelper-x.x.x.jar 和 jsqlparser-0.9.5.jar程序员

若是你使用 Maven,你只须要在 pom.xml 中添加下面的依赖:github

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

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

注意maven中的其余依赖的版本可能会影响该插件,致使引入失败数据库

使用步骤mybatis

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中调用此函数
<div class="page right">
<script language="javascript">
createPaginationNav('${pageContext.request.contextPath}/student?unitId=${param.unitId}&currPage=0',
${student.pageNum},
${student.prePage},
${student.nextPage},
${student.pages},
${student.pageSize},
'');
</script>
</div>
 

 

MyBatis plus通用Mapper实现分页

安装:http://www.javashuo.com/article/p-vhhbfmcg-ba.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);

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

 

   <property name="plugins">
            <!--分页插件注册-->
           <list>
               <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></bean>
           </list>
        </property>
//测试分页
public void testPaginationInterceptor(){
IPage<Employee> pages =employeeMapper.selectPage(new Page<>(1,5),null);//便可实现分页
System.out.println(pages.getRecords());
}
sql执行:说明这是一个实实在在的物理分页
DEBUG 10-02 11:37:07,239 ==>  Preparing: SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee
LIMIT 0,5 

IPage对象的方法:
default IPage<T> setPages(long pages) {
 return this;
}
List<T> getRecords();
IPage<T> setRecords(List<T> var1);
long getTotal();
IPage<T> setTotal(long var1);
long getSize();
IPage<T> setSize(long var1);
long getCurrent();
IPage<T> setCurrent(long var1);
相关文章
相关标签/搜索