文章目录
前言
PageHelper是一款基于mybatis的分页插件,可以快速帮你实现对数据库查询的分页处理
一、引入方式
1.maven导入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>
2.手动下载jar包
地址:https://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
由于使用里sql解析工具,还需要下载jsqlparser.jar
地址:https://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/
二、配置
1.PageHelper的参数介绍
1.helperDialect:用来指定分页插件使用哪种方言,例如oracle、mysql。
2.reasonable:默认值为false,当设置为true时,分页查询就有上限和下限,也就是说不会查询到-1页或者超出的页数,pageNum<=0时会查询第一页,pageNum>pages时(超出总数),会查询最后一页。
3.offsetAsPageNum:默认值为 false ,该参数对使用RowBounds作为分页参数时有效。 当该参数设置为true时,会将中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。
4.rowBoundsWithCount::默认值为 false ,该参数对使用 作为分页参数时有效。 当该参数设置为 true 时,使用RowBounds分页会进行 count 查询。
true 时,会将页
2.项目中仅使用到mybatis时
在mybatis的配置文件中
<plugins>
<!--引入pageheper插件-->
<plugin interceptor = "com.github.pagehelper.PageInterceptor">
<!--配置pageheper的参数值-->
<property name="helperDialect" value="mysql"/>
<property reasonable="helperDialect" value=true/>
</plugin>
</plugins>
2.项目中使用spring整合了mybatis时
在spring的配置文件中,在配置SqlSessionFactoryBean的地方,添加plugins属性并配置参数
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--pageHelpe-->
<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>
三、使用方式(其一)
1、html页面请求,传递两个参数pageNum=1&pageSize=5,分别代表着查询第一页,每个条数5条
<li id="system-setting">
<a href="${pageContext.request.contextPath}/orders/findAll.do?pageNum=1&pageSize=5">
<i class="fa fa-circle-o"></i> 订单管理
</a></li>
2、处理请求
@Controller
@RequestMapping("/orders")
public class OrderController {
@Autowired
private OrderServiceImpl orderService;
@RequestMapping("/findAll.do")
//1.获取请求的参数
public ModelAndView findAllOrders(@RequestParam(name = "pageNum")int pageNum,@RequestParam(name = "pageSize")int pageSize) throws MyException {
ModelAndView mv = new ModelAndView();
try{
//2.调用查询的方法,并将分页参数传递
List<Order> orders = orderService.findAllOrders(pageNum,pageSize);
//3.封装查询的结果
PageInfo pageInfo = new PageInfo(orders);
mv.addObject("ordersList",pageInfo);
mv.setViewName("orders-list");
}catch (Exception e){
e.printStackTrace();
throw new MyException("查询订单信息失败");
}
return mv;
}
findAllOrders方法
@Service("orderService")
public class OrderServiceImpl {
@Autowired
private OrderDao orderDao;
public List<Order> findAllOrders(int pageNum,int pageSize)throws MyException {
//调用分页方法
PageHelper.startPage(pageNum,pageSize);
return orderDao.findAllOrders();
}
四、PageInfo
PageInfo 的属性包括如下这些,介绍一下几个常用的属性
public class PageInfo <T> implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private int pageNum; //数据按查询数分页后,指定查询的第几页
private int pageSize; //分页的每页条数
private int size;
private int startRow;
private int endRow;
private long total;
private int pages; //总页数
private java.util.List<T> list; //数据库查询的结果值
private int prePage;
private int nextPage;
private boolean isFirstPage;
private boolean isLastPage;
private boolean hasPreviousPage;
private boolean hasNextPage;
private int navigatePages;
private int[] navigatepageNums;
private int navigateFirstPage;
private int navigateLastPage;