【随手记】一个好用的分页工具——PageHelper

前言

最近在捣拾一个后台管理系统,由于涉及到数据,肯定少不了分页,想起web学习阶段,老师带我们做分页的时候,我学的那个头疼,幸好遇见了它——一个非常优秀的分页mybatis插件,PageHelper,它不仅支持基本主流与常用的数据库,例如mysql、
oracle、mariaDB、DB2、SQLite、Hsqldb等,更重要的是国人写的,学习起来也是相当方便。

环境

老规矩,还是先介绍环境:
版本:JDK1.8
数据库:MySQL
框架:SSM
前端模板工具:AdminLTE

使用步骤

第一步导入jar包或者引入依赖,我用的maven,所以如下
在这里插入图片描述
第二步:修改配置

在mybatis中的配置如下:
在这里插入图片描述
这里说一下, com.github.pagehelper.PageInterceptor 是是分页插件的默认实现类,由于这个项目中spring整合了mybatis,所以我在applicationContext.xml中的配置如下:
在这里插入图片描述
这里说一下配置的两个参数:
helperDialect:是说明使用的是哪种数据库,它会自动检测数据库的连接,以便使用合适的分页方式
reasonable:这个就神奇了,众所周知,网页下面的分页栏,当我们处于第一页,再按前一页的时候是没有反应的,同理,当我们处于尾页,再按下一页也是没有反应的,我记得当时在学web时,老师带着我们在前端代码是一顿修改啊,整的我头蒙,现在只要这个参数配置为true,jsp页面的“首页”“上一页”会少很多代码
还有一些参数,像params,根据对象的属性名获取值啥的,大家有兴趣的可以去瞅瞅哦~~
第三步:在service实现类中调PageHelper的startPage方法
在service的实现类中,调用dao方法之前调用PageHelper的startPage方法,查看startPage这个方法源码可以发现作者在PageMethod类中对这个方法实现了重载,这样我们就可以根据需求传入合适参数,我这里传入了页码和每页显示的条数。这里需要注意,务必在需要使用分页查询的方法之前调用PageHelper的startPage方法,且中间不能再插入其他代码,否则分页功能会失效
看一下代码:
在这里插入图片描述
第四步:Controller中创建PageInfo对象
在Controller中创建PageInfo对象,并把PageInfo对象传入页面。这里来看一下PageInfo的源码,写的非常棒
在这里插入图片描述
当时学习web自己做分页时,也是定义了一堆变量,什么总页数,当前页,页码,总记录数,还要计算每页显示的条数,现在有了这个小工具真的省了很多代码,源码中还定义了上一页,下一页,导航页等等,很是详细,当我们在jsp页面用的时候就可以直接pageInfo.属性就好了,这里有个list属性,就是我们查询的结果,这个结果要封装到PageInfo里面,这样在jsp页面通过pageInfo.XXXList,就可以展示数据
这是我在controller中的代码
在这里插入图片描述
第五步:修改jsp页面的代码

 <div class="box-tools pull-right">
                        <ul class="pagination">
                            <li>
                                <a href="${pageContext.request.contextPath}/orders/findAll.do?page=1&size=${pageInfo.pageSize}" aria-label="Previous">首页</a>
                            </li>
                            <li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.prePage}&size=${pageInfo.pageSize}">上一页</a></li>
                            <c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
								<li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageNum}&size=${pageInfo.pageSize}">${pageNum}</a></li>
							</c:forEach>
                            <li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.nextPage}&size=${pageInfo.pageSize}">下一页</a></li>
                            <li>
                                <a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pages}&size=${pageInfo.pageSize}" aria-label="Next">尾页</a>
                            </li>
                        </ul>
                    </div>

再看一下数据展示的代码:

<c:forEach items="${pageInfo.list}" var="orders">

										<tr>
											<td><input name="ids" type="checkbox"></td>
											<td>${orders.id }</td>
											<td>${orders.orderNum }</td>
											<td>${orders.product.productName }</td>
											<td>${orders.product.productPrice }</td>
											<td>${orders.orderTimeStr }</td>
											<td class="text-center">${orders.orderStatusStr }</td>
											<td class="text-center">
												<button type="button" class="btn bg-olive btn-xs">订单</button>
												<button type="button" class="btn bg-olive btn-xs" onclick="location.href='${pageContext.request.contextPath}/orders/findById.do?id=${orders.id}'">详情</button>
												<button type="button" class="btn bg-olive btn-xs">编辑</button>
											</td>
										</tr>
									</c:forEach>

总结

由于web学的时间比较长了,有的东西有点遗忘,加之我前端学的并不好,这个小工具简直就是对于我这种前端小白的救星,用起来非常顺手。其实我们某个方面做的不好,我们可以多看优秀的源码,看看别人怎么写的,然后学习借鉴,当然要看有注释的源码,不然还是蒙圈,由此可见,注释的重要性。
不说了,抓紧时间练项目,菜鸟需要在练项目中成长,加油!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值