利用pagehelper在ssm框架中完成分页查询
一、pagehelper属性解释
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//排序
private String orderBy;
//当前页面第一个元素在数据库中的行号
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;
二、配置分页插件
2.1 导入pagehelper依赖
在pom.xml文件中导入pagehelper依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
2.2 配置分页插件
在applicationContext.xml中,配置sqlSessionFactoryBean的标签中配置分页插件。
<!--配置pageHelper 分页插件-->
<property name="plugins">
<set>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<!--配置数据库-->
<prop key="helperDialect">mysql</prop>
<!--当pageNum<1时,默认查询第一页,当pageNum>totalPage时,默认查询最后一页-->
<prop key="reasonable">true</prop>
<!-- 支持接口传参-->
<prop key="supportMethodsArguments">true</prop>
</props>
</property>
</bean>
</set>
</property>
三、编写查询方法
普通的查询sql即可,sql语句无需添加分页语句。
四、编写controller
@RequestMapping("list")
public String selectAllVideo
/*@RequestParam:把请求中的指定名称的参数传递给控制器中的形参赋值。
value:请求参数中的名称
required:请求参数中是否必须提供此参数,默认值是true,必须提供
defaultValue:默认值
*/
//页码默认值选为1,表示第一次访问页面,在前端没有给出页码数据时,默认访问第一页。
(@RequestParam(value = "pageNum", required = false, defaultValue = "1")
Integer pageNum,
@RequestParam(value = "pageSize", required = false, defaultValue = "默认页容量")
Integer pageSize,
//提交方式为model
Model model){
//启动分页
PageHelper.startPage(pageNum, pageSize);
//查出数据
List<Video> videos = videoService.selectAllVideo();
//创建分页工具对象,并储存集合,这一步不能分开写
PageInfo<Video> pageInfo = new PageInfo<>(videos);
//在model对象中添加分页数据
model.addAttribute("pageInfo", pageInfo);
//此时输出的是:查询sql查出的,第一页的数据,共“默认页容量”条。
System.out.println(videos);
return "/WEB-INF/jsp/behind/videoList.jsp";
}
五、编写jsp页面
5.1 遍历数据
<table>
<tr>
<th>id</th>
<th>title</th>
<th>detail</th>
<th>time</th>
<th>speaker_id</th>
<th>play_num</th>
</tr>
<c:forEach items="${pageInfo.list}" var="video">
<tr>
<td>${video.id}</td>
<td>${video.title}</td>
<td>${video.detail}</td>
<td>${video.time}</td>
<td>${video.speaker}</td>
<td>${video.playNum}</td>
</tr>
</c:forEach>
</table>
5.2 制作翻页按钮
在标签中添加按钮,注意:三段代码的顺序不可改变!
<%--如果 当前页=总页数 --%>
<c:if test="${pageInfo.pageNum == pageInfo.pages}">
<a href="/video/list?pageNum=1" >首页</a>
<a href="/video/list?pageNum=${pageInfo.pageNum - 1}" >上一页</a>
</c:if>
<%--如果 当前页<总页数 && 当前页>1 --%>
<c:if test="${pageInfo.pageNum < pageInfo.pages && pageInfo.pageNum > 1}">
<a href="/video/list?pageNum=1">首页</a>
<a href="/video/list?pageNum=${pageInfo.pageNum - 1}">上一页</a>
<a href="/video/list?pageNum=${pageInfo.pageNum + 1}">下一页</a>
<a href="/video/list?pageNum=${pageInfo.pages}">末页</a>
</c:if>
<%--如果 当前页=1 --%>
<c:if test="${pageInfo.pageNum == 1}">
<a href="/video/list?pageNum=${pageInfo.pageNum + 1}">下一页</a>
<a href="/video/list?pageNum=${pageInfo.pages}">末页</a>
</c:if>