SSM项目如何使用PageHelper添加分页功能

最近在改一个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" >
				&nbsp;&nbsp; 共${pageInfo.total}条 &nbsp;&nbsp; 第${pageInfo.pageNum}/${pageInfo.pages}页 &nbsp;&nbsp;
				<a  href="${pageContext.request.contextPath}/stockout/ListStockoutServlet.do?pn=0" style="cursor:hand">首页</a>&nbsp;&nbsp;
				<a  style="cursor:hand" href="${pageContext.request.contextPath}/stockout/ListStockoutServlet.do?pn=${pageInfo.pageNum-1}">上一页</a>&nbsp;&nbsp;
				<a  style="cursor:hand" href="${pageContext.request.contextPath}/stockout/ListStockoutServlet.do?pn=${pageInfo.pageNum+1}">下一页</a>&nbsp;&nbsp;
				<a  style="cursor:hand" href="${pageContext.request.contextPath}/stockout/ListStockoutServlet.do?pn=${pageInfo.pages}">尾页</a>
			</td>
		</tr>
	</table>

 至此,分页功能开发完成,是不是超级简单?如果你觉得对你有帮助的话就帮忙点个赞吧。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜未央5788

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值