一.项目地址
- 在 github 的项目地址:https://github.com/pagehelper/Mybatis-PageHelper
- 在 gitosc 的项目地址:http://git.oschina.net/free/Mybatis_PageHelper
二.导入maven依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
三.配置拦截器插件
1.在mybatis中配置(此时并没有spring来管理mybatis)
<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>
2.使用spring容器管理(此时mybatis已交由spring容器管理)
1.helperDialect :分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。
2.reasonable :分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第一页, pageNum>pages (超过总数时),会查询最后一页。默认 false 时,直接根据参数进行查询。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注意其他配置 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
四.使用方式
- 使用基本使用方式有6中,此处使用PageHelper.startPage 静态方法调用
- 这种方式是我们要掌握的 在你需要进行分页的 MyBatis 查询方法前调用PageHelper.startPage 静态方法即可,紧
- 跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
//获取第1页,10条内容,默认查询总数count PageHelper.startPage(1, 10); //紧跟着的第一个select方法会被分页 List<Country> list = countryMapper.selectIf(1);
五.PageInfo类
- 一般查询结果是绑定PageInfo类来进行处理的
ModelAndView mv = new ModelAndView(); List<Orders> ordersList = ordersService.findAllByPage(page,pageSize); PageInfo info = new PageInfo(ordersList); mv.addObject("pageInfo",info); mv.setViewName("orders-page-list");
其中PageInfo类中的一些属性需要了解
list:我们查询出的数据结果集(重点)
pageNum:当前页
pageSize:每页数量
size:当前页数量
startRow:当前页面地一个元素在数据库中的行号
endRow:当前页面在最后一个元素在数据库中的行号
total:总记录数
pages:总页数
isFirstPage:是否为第一页
isLastPage:是否为最后一页
prePage:前一页
nextPage:下一页
六.jsp代码分页代码(菜鸟傻瓜代码,请各大佬指正 ('' ..''))
<%-- 总页数小于5--%>
<c:if test="${pageInfo.pages<=5}">
<c:forEach begin="1" end = "${pageInfo.pages}" var="page" >
<%-- 如果下标为当前页则显示为红色start--%>
<c:if test="${page==pageInfo.pageNum}">
<li><a href="${pageContext.request.contextPath}/orders/findAllByPage.do?page=${page}&pageSize=${pageInfo.pageSize}" style="background-color: #00a7d0">${page}</a></li>
</c:if>
<c:if test="${page!=pageInfo.pageNum}">
<li><a href="${pageContext.request.contextPath}/orders/findAllByPage.do?page=${page}&pageSize=${pageInfo.pageSize}">${page}</a></li>
</c:if>
<%-- 如果下标为当前页则显示为红色end--%>
</c:forEach>
</c:if>
<%-- 总页数大于5页--%>
<c:if test="${pageInfo.pages>5}">
<%-- 当前页小于3--%>
<c:if test="${pageInfo.pageNum<3}">
<c:forEach begin="1" end = "5" var="page" >
<%-- 如果下标为当前页则显示为红色start--%>
<c:if test="${page==pageInfo.pageNum}">
<li><a href="${pageContext.request.contextPath}/orders/findAllByPage.do?page=${page}&pageSize=${pageInfo.pageSize}" style="background-color: #00a7d0">${page}</a></li>
</c:if>
<c:if test="${page!=pageInfo.pageNum}">
<li><a href="${pageContext.request.contextPath}/orders/findAllByPage.do?page=${page}&pageSize=${pageInfo.pageSize}">${page}</a></li>
</c:if>
<%-- 如果下标为当前页则显示为红色end--%>
</c:forEach>
</c:if>
<%-- 当前页>=3且总页减当前页>=3--%>
<c:if test="${pageInfo.pageNum>=3&&(pageInfo.pages-pageInfo.pageNum)>=3}">
<c:forEach begin="${pageInfo.pageNum-2}" end = "${pageInfo.pageNum+2}" var="page" >
<%-- 如果下标为当前页则显示为红色start--%>
<c:if test="${page==pageInfo.pageNum}">
<li ><a href="${pageContext.request.contextPath}/orders/findAllByPage.do?page=${page}&pageSize=${pageInfo.pageSize}" style="background-color: #00a7d0">${page}</a></li>
</c:if>
<c:if test="${page!=pageInfo.pageNum}">
<li><a href="${pageContext.request.contextPath}/orders/findAllByPage.do?page=${page}&pageSize=${pageInfo.pageSize}">${page}</a></li>
</c:if>
<%-- 如果下标为当前页则显示为红色end--%>
</c:forEach>
</c:if>
<%-- 总页减当前页<3--%>
<c:if test="${(pageInfo.pages-pageInfo.pageNum)<3}">
<c:forEach begin="${pageInfo.pages-4}" end = "${pageInfo.pages}" var="page" >
<%-- 如果下标为当前页则显示为红色start--%>
<c:if test="${page==pageInfo.pageNum}">
<li ><a href="${pageContext.request.contextPath}/orders/findAllByPage.do?page=${page}&pageSize=${pageInfo.pageSize}" style="background-color: #00a7d0">${page}</a></li>
</c:if>
<c:if test="${page!=pageInfo.pageNum}">
<li><a href="${pageContext.request.contextPath}/orders/findAllByPage.do?page=${page}&pageSize=${pageInfo.pageSize}">${page}</a></li>
</c:if>
<%-- 如果下标为当前页则显示为红色end--%>
</c:forEach>
</c:if>
</c:if>