前次课刚好讲到PageHelper 简单整理一下吧
有时候页面数据多的话 一个页面显示不下 下方会有页码按钮可供切换
实现方式有好几种 可以直接在数据表中按要求查询 但太麻烦 不推荐
此时可以用PageHelper,一个简单易用且功能强大的分页插件
使用方式:
1、当然是导入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2、配置配置文件
在SqlSessionFactoryBean的bean里添加一段配置
<!-- 分页插件配置 -->
<property name="plugins">
<array>
<!-- PageInterceptor页面拦截器 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<!-- 配置方言 根据自己db的类型进行设置 -->
<prop key="helperDialect">mysql</prop>
<!-- 分页参数合理化 超过页数上线会查询最后一页数据 -->
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
3、在需要分页的Service实现类中开启分页
往PageHelper的startPage()方法里传入页码和每页显示的数量即可
废话不多说 直接贴代码
@Override
public List<UserInfo> findAll(Integer page,Integer size)
{
// 开启分页
PageHelper.startPage(page,size);
return userInfoDao.findAll();
}
4、将得到的数据存放到PageInfo中
// 全部查询
@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(defaultValue="1")Integer page,
@RequestParam(defaultValue="5")Integer size)
{
// 调用service中的方法得到查询结果
List<UserInfo> list = userInfoService.findAll(page,size);
// 将得到的数据存放到PageInfo中
PageInfo<UserInfo> pageInfo=new PageInfo<UserInfo>(list);
return new ModelAndView("user-list","USERINFOLIST",pageInfo);
}
PageInfo类中包含了很多分页相关信息
简单罗列一下:
// 当前页
private int pageNum;
// 每页的数量
private int pageSize;
// 当前页的数量
private int size;
// 当前页面第一个元素在数据库中的行号
private int startRow;
// 当前页面最后一个元素在数据库中的行号
private int endRow;
// 总记录数
private long total;
// 总页数
private int pages;
// 结果集
private List<T> list;
// 第一页
private int firstPage;
// 前一页
private int prePage;
// 是否为第一页
private boolean isFirstPage = false;
// 是否为最后一页
private boolean isLastPage = false;
// 是否有前一页
private boolean hasPreviousPage = false;
// 是否有下一页
private boolean hasNextPage = false;
// 导航页码数
private int navigatePages;
// 所有导航页号
private int[] navigatepageNums;