PageHelper分页插件及通用分页js
分页概述
1.物理分页
物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果。建议使用。
2.逻辑分页
逻辑分页依赖的是程序员编写的代码。数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合有序,再根据索引获取指定范围的数据。
MyBatis 分页插件 - PageHelper
该插件目前支持以下数据库的物理分页:
Oracle
Mysql
MariaDB
SQLite
Hsqldb
PostgreSQL
DB2
SqlServer(2005,2008)
Informix
H2
SqlServer2012
Derby
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} "/>">«</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}"/>">»</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 + "页 </span>"), document.write('<span style="font-size:12px;">共' + p + "页 </span>"), p > 1) {
1 == t ? (document.write('<a href="#">首页</a>'), document.write('<a href="#" title="上一页"><span style="font-size:12px;"><<</span></a>')) : (document.write('<a href="' + l + '1">首页</a>'), document.write('<a href="' + l + a + '" title="上一页"><span style="font-size:12px;"><<</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;">>></span></a>'), document.write('<a href="#">尾页</a>')) : (document.write('<a href="' + l + n + '" title="下一页"><span style="font-size:12px;">>></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 + '\')"> <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实现分页
安装: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);
使用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);
PageHelper分页插件及通用分页js的更多相关文章
- SSM 使用 mybatis 分页插件 pagehepler 实现分页
使用分页插件的原因,简化了sql代码的写法,实现较好的物理分页,比写一段完整的分页sql代码,也能减少了误差性. Mybatis分页插件 demo 项目地址:https://gitee.com/fre ...
- JSP分页之结合Bootstrap分页插件进行简单分页
结合Bootstrap的分页插件实现分页,其中策略是每次显示5个按钮,然后根据当前页的不同来进行不同的显示: 1. 当前页<3,如果当前页大于5页就显示前五页,不然就显示1~totalPage. ...
- 整合mybatis分页插件及通用接口测试出现问题
严重: Servlet.service() for servlet [springmvc] in context with path [/mavenprj] threw exception [Requ ...
- Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件
前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...
- (转)淘淘商城系列——MyBatis分页插件(PageHelper)的使用以及商品列表展示
http://blog.csdn.net/yerenyuan_pku/article/details/72774381 上文我们实现了展示后台页面的功能,而本文我们实现的主要功能是展示商品列表,大家要 ...
- 单纯用JS做的分页插件
最近公司需要用到分页插件,由于市面上大多都是jQuery的分页插件,而且项目中有自己的工具类,所以说我在工具类中又添加了不依赖jQuery的分页插件,而且分页插件来说对DOM的操作也不是很多,就是用J ...
- Jquery 分页插件 Jquery Pagination
Jquery 分页插件 Jquery Pagination 分页插件来说,我觉得适用就行,尽量简单然后能够根据不同的应用场景能够换肤.展现形式等. 对于初学者想写分页插件的同学,也可以看下源码,代码也 ...
- Flask学习之旅--分页功能:分别使用 flask--pagination 和分页插件 layPage
一.前言 现在开发一个网站,分页是一个很常见的功能了,尤其是当数据达到一定量的时候,如果都显示在页面上,会造成页面过长而影响用户体验,除此之外,还可能出现加载过慢等问题.因此,分页就很有必要了. 分页 ...
- Mybatis分页插件的使用流程
如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件.该插件支持任何复杂的单表.多表分页. 1.引入PageHelper的jar包 在pom.xml中添加如下依赖: 12345 ...
随机推荐
- oracle参数MEMORY_TARGET太小无法启动的解决过程
环境: windows server datacenter 4G,4x2=8处理器 oracle 11g 错误如下 ORA-: Specified value of MEMORY_TARGET is ...
- patchwork.ffmpeg.org 里面未被选中的优秀代码
很多程序员为 FFMpeg 增加新功能写出代码, 把写好的代码 git send-email 邮件方式提交 patch 文件 发送给 patchwork.ffmpeg.org; 一直认为 FFMpeg ...
- iptables系列
详情请参考:http://www.zsythink.net/archives/tag/iptables/page/2/
- springboot idea 代码更改自己编译设置
第一步:在pom.xml文件中添加springboot 编译依赖 <dependency> <groupId>org.springframework.boot</grou ...
- 绘图和可视化---matplotlib包的学习
matplotlib API函数都位于matplotlib.pyplot模块,通常引入约定为:import matplotlib.pyplot as plt 1.Figure和Subplot 图像都位 ...
- JS监听浏览器的返回、后退、上一页按钮的事件方法
在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包等 ...
- Redis在Linux中安装使用
一.安装$ wget http://download.redis.io/releases/redis-x.x.x.tar.gz $ tar xzf redis-x.x.x.tar.gz $ cd re ...
- jQuery概念
- mysql的if用法解决同一张数据表里面两个字段是否相等统计数据量。
MySQL的使用用法如下所示:格式:if(Condition,A,B)意义:当Condition为true时,返回A:当Condition为false时,返回B.作用:作为条件语句使用.mysql的i ...
- 【Linux】日志分析工具grep sed sort
遇到一个问题,在查询日志时发现,服务器上打印的文件有很多个,每个都存储了一部分日志, 需要将日志按照时间排序,并显示所有日志. 原命令: grep -h searchContent */*log 搜 ...