1.什么是PageHelper
PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。
- 本项目在 github
的项目地址:https://github.com/pagehelper/Mybatis-PageHelper - 本项目在 gitosc
的项目地址:http://git.oschina.net/free/Mybatis_PageHelper
2.使用步骤
- 在pom.xml文件导入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
- 在spring配置文件中配置SqlSessionFactory时加入配置
<!-- 把交给IOC管理 SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 传入PageHelper的插件 -->
<property name="plugins">
<array>
<!-- 传入插件的对象 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">oracle</prop>
<prop key="reasonable">true</prop> <!--逻辑判断使得页码不会越界-->
</props>
</property>
</bean>
</array>
</property>
</bean>
- 在真正执行sql之前使用PageHelper完成分页
@Override
public List<Orders> findAll(int page, int size) throws Exception {
//参数pageNum是页码,pageSize代表每页显示条数
PageHelper.startPage(page, size);
return odersDao.findAll();
}
- 在前台发起请求的时候发送请求参数
<li id="system-setting"><a
href="${pageContext.request.contextPath}/orders/findAll.do?page=1&size=4"> <i
class="fa fa-circle-o"></i> 订单管理
</a></li>
- 在Controller使用@RequestParam将请求参数绑定到你控制器的方法参数上,并把查询结果传进PageInfo 对象
@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(name="page", required = true, defaultValue = "1") int page, @RequestParam(name = "size",required = true, defaultValue = "4") int size) throws Exception {
ModelAndView mv = new ModelAndView();
List<Orders> ordersList = orderService.findAll(page, size);
//PageInfo就是一个分页bean
PageInfo pageInfo = new PageInfo(ordersList);
mv.addObject("pageInfo",pageInfo);
mv.setViewName("orders-page-list");
return mv;
}
- 在展示页面获取要迭代的集合,pageInfo处理的结果集是list
<c:forEach items="${pageInfo.list}" var="orders">
- 使用 pageInfo配置页码
<div class="box-tools pull-right">
<ul class="pagination">
<li>
<a href="${pageContext.request.contextPath}/orders/findAll.do?page=1&size=${pageInfo.pageSize}" aria-label="Previous">首页</a>
</li>
<li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum-1}&size=${pageInfo.pageSize}">上一页</a></li>
<c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
<li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageNum}&size=${pageInfo.pageSize}">${pageNum}</a></li>
</c:forEach>
<li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum+1}&size=${pageInfo.pageSize}">下一页</a></li>
<li>
<a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pages}&size=${pageInfo.pageSize}" aria-label="Next">尾页</a>
</li>
</ul>
</div>
- 配置自主选择显示条数,在select标签加入onchange调用changePageSize()方法
<select class="form-control" id="changePageSize" onchange="changePageSize()">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select> 条
- changePageSize()方法
function changePageSize() {
//获取下拉框的值
var pageSize = $("#changePageSize").val();
//向服务器发送请求,改变没页显示条数
location.href = "${pageContext.request.contextPath}/orders/findAll.do?page=1&size="
+ pageSize;
}
注: 此文章只为记录开发过程中的错误,学习,如发现侵权请私信删除