PageHelper使用
1、在 pom.xml 中添加如下依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2、在applicationContext.xml里面配置插件
<!--配置sqlsessionfactorybean-->
<bean id="sqlSessionFactoryBean" 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">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
3、在分页方法调用之前调用方法
package com.itheima.ssm.service.impl;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.OrderDao;
import com.itheima.ssm.domain.Orders;
import com.itheima.ssm.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
//@Transactional
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Override
public List<Orders> findAll( int page,int size) {
/*分页操作:
* 参数: pageNum 是页码值
* 参数: pageSize 代表是每页显示条数
* 必须真正调用分页方法之前!!!(紧挨着)*/
PageHelper.startPage(page,size);
return orderDao.findAll();
}
@Override
public Orders findById(Integer id) {
return orderDao.findById(id);
}
}
控制器代码:
//分页
@RequestMapping("/findAll")
public ModelAndView findAll(int page,int size){
ModelAndView mv=new ModelAndView();
List<Orders> orders = orderService.findAll(page,size);
/*ordes集合里面不知有查到的数据,还有一些关于分页的数据,
构建PageInfo对象,将它传递过去,pageinfo会自己处理这些数据
PageInfo就是一个分页Bean*/
PageInfo pageInfo=new PageInfo(orders);
mv.addObject("pageInfo",pageInfo);
mv.setViewName("orders-page-list");
return mv;
}
orders-page-list.jsp
<!-- .box-footer-->
<div class="box-footer">
<div class="pull-left">
<div class="form-group form-inline">
总共2 页,共14 条数据。 每页
<select class="form-control" id="changePageSize" οnchange="changePageSize()">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select> 条
</div>
</div>
<div class="box-tools pull-right">
<ul class="pagination">
<li>
<a href="${pageContext.request.contextPath}/orders/findAll?page=1&size=${pageInfo.pageSize}" aria-label="Previous">首页</a>
</li>
<li><a href="${pageContext.request.contextPath}/orders/findAll?page=${pageInfo.pageNum-1}&size=${pageInfo.pageSize}">上一页</a></li>
<%--中间页码用循环实现,从1开始,到总页数,每次加1--%>
<c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
<li><a href="${pageContext.request.contextPath}/orders/findAll?page=${pageNum}&size=${pageInfo.pageSize}">${pageNum}</a></li>
</c:forEach>
<li><a href="${pageContext.request.contextPath}/orders/findAll?page=${pageInfo.pageNum+1}&size=${pageInfo.pageSize}">下一页</a></li>
<li>
<a href="${pageContext.request.contextPath}/orders/findAll?page=${pageInfo.pages}&size=${pageInfo.pageSize}" aria-label="Next">尾页</a>
</li>
</ul>
</div>
</div>
<!-- /.box-footer-->
知识点:
pageNum: 当前页
pageSize:每页的数量
size:当前页的数量
pages:总页数
pageInfo.pageSize:每页的条数
分页插件参数介绍:
1、 PageHelper.startPage 静态方法调用(重点)
这种方式是我们要掌握的 在你需要进行分页的 MyBatis 查询方法前调用PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
@Override
public List<Orders> findAll( int page,int size) {
/*分页操作:
* 参数: pageNum 是页码值
* 参数: pageSize 代表是每页显示条数
* 必须真正调用分页方法之前!!!(紧挨着)*/
PageHelper.startPage(page,size);
return orderDao.findAll();
}