最近在改一个SSM项目,但是项目中的列表都没有做分页,这怎么能行,果断加上 。
下面就来说一下添加分页的过程。
PageHelper是MyBatis分页插件,在查询数据时,可以自动将结果封装成分页信息,方便我们进行数据展示和操作。本项目后端使用的SSM框架,前端使用的JSP,属于前后端一体的项目。
一、引入Jar包
首先我们在pom.xml配置文件中引入PageHelper Jar包,引入代码如下:
<!--分页工具 https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
二、spring-mybatis.xml文件中引入pagehelper插件
具体代码如下所示:
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<!-- 这里的几个配置主要演示如何使用,如果不理解,一定要去掉下面的配置 -->
<property name="properties">
<value>
helperDialect=oracle
reasonable=true
supportMethodsArguments=true
params=count=countSql
autoRuntimeDialect=true
</value>
</property>
</bean>
</array>
</property>
三、修改Controller代码
此处以StockoutController即出库列表为例,原有代码如下图所示:
3.1 首先要对传参进行修改,增加页码参数pn 具体如下:
@RequestParam(defaultValue = "1",required = true,value = "pn") Integer pn
3.2 startPage是PageHelper的一个重要方法,在使用分页功能时必不可少。
PageHelper.startPage()方法的作用是将接下来的一条SQL查询语句进行分页处理,查询结果会被自动封装成Page类型对象,其中包含了分页需要的全部信息,包括当前页码、每页显示数量、总记录数、总页数等。实际上,PageHelper进行分页处理的原理是使用MyBatis的拦截器技术,在查询语句的前后插入相应的代码,从而实现自动分页。具体代码如下:
PageHelper.startPage(pn,10);
3.3 service获取所有列表数据的方法不变,使用PageInfo进行分页处理
PageInfo<Stockout> pageInfo = new PageInfo<Stockout>(allStockout);
3.4 将pageInfo放到ModelMap中
modelMap.addAttribute("pageInfo", pageInfo);
此时后端的代码即完成,汇总后如下图所示,可以对比前后变化,仅增加了2行代码;
四、JSP中使用pageInfo
4.1 首先在列表循环中使用pageInfo.list
4.2 分页展示
pageInfo属性列表如下:
private List<T> list; //对象记录结果集
private int total = 0; // 总记录数
private int pageSize = 20; // 每页显示记录数
private int pages = 1; // 总页数
private int pageNum = 1; // 当前页
private boolean isFirstPage=false; //是否为第一页
private boolean isLastPage=false; //是否为最后一页
private boolean hasPreviousPage=false; //是否有前一页
private boolean hasNextPage=false; //是否有下一页
有了这个属性列表,我们完全可以根据这几个参数实现以下分页效果:
具体分页代码如下展示:
<table width="100%" border="0" cellpadding="0" cellspacing="2">
<tr>
<td colspan="2" align="right" height="20" nowrap class="textbar3" >
共${pageInfo.total}条 第${pageInfo.pageNum}/${pageInfo.pages}页
<a href="${pageContext.request.contextPath}/stockout/ListStockoutServlet.do?pn=0" style="cursor:hand">首页</a>
<a style="cursor:hand" href="${pageContext.request.contextPath}/stockout/ListStockoutServlet.do?pn=${pageInfo.pageNum-1}">上一页</a>
<a style="cursor:hand" href="${pageContext.request.contextPath}/stockout/ListStockoutServlet.do?pn=${pageInfo.pageNum+1}">下一页</a>
<a style="cursor:hand" href="${pageContext.request.contextPath}/stockout/ListStockoutServlet.do?pn=${pageInfo.pages}">尾页</a>
</td>
</tr>
</table>
至此,分页功能开发完成,是不是超级简单?如果你觉得对你有帮助的话就帮忙点个赞吧。