pagehelper的使用
使用方法:
1.引入Maven依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.8</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.5</version>
</dependency>
2.在Mybatis的配置文件中配置或在spring-mybatis.xml配置文件中配置(后者更方便)
在SqlConfig.xml中配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--集成MyBatis的分页插件PageHelper-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 当前所使用的数据库 -->
<property name="helperDialect" value="mysql"/>
<!--合理化分页参数-->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
</configuration>
spring-mybatis.xml中: 在创建SqlSessionFactoryBean时顺便创建PageInterceptor(5.0以上为PageInterceptor,5.0以下为PageHelper)
<!--
3.创建SqlSessionFactoryBean
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--指定数据源-->
<property name="dataSource" ref="dataSource" />
<!-- 注意其他配置 -->
<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.使用方法:
1. 在Mybatis代理的接口方法执行前使用PageHelper.startPage(pageNum,size)方 法即可;第一个参数为第几页,第二个参数为每页数据的条数
2. 这两个参数通常由页面传入,并由Controller接收
3.在Controller中创建PageInfo对象并返回此对象给网页即可: PageInfo info = new PageInfo<>(list); (需注入查询的数据集合)
4.在网页中通过获取PageInfo对象可获取到关于分页的所有信息
//Controller中
@RequestMapping(value = "/list")
public ModelAndView list(@RequestParam(defaultValue = "1",required = false) Integer pageNum, @RequestParam(defaultValue = "2",required = false) Integer size) throws JsonProcessingException, ParseException { //通过@RequestParam注解给两个参数设置属性:默认值,非必要
List<Product> list = service.list(pageNum,size); //由网页传入两个参数
PageInfo<Product> info = new PageInfo<>(list); //将查询结果集合注入到PageInfo中,并返回此对象给网页即可
return new ModelAndView("product-list","pageInfo",info);
}
//Service中
@Override
public List<Product> list(Integer pageNum, Integer size) {
PageHelper.startPage(pageNum,size);
return productMapper.list();
}
在jsp中获取PageInfo的属性即可,PageInfo的属性:
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//排序
private String orderBy;
//由于startRow和endRow不常用,这里说个具体的用法
//可以在页面中"显示startRow到endRow 共size条数据"
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List<T> list;
//第一页
private int firstPage;
//前一页
private int prePage;
//下一页
private int nextPage;
//最后一页
private int lastPage;
//是否为第一页
private boolean isFirstPage = false;
//是否为最后一页
private boolean isLastPage = false;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;