SSM+PageHelper实现分页——及解决PageHelper失效问题
PageHelper简述:一款好用的开源免费的Mybatis第三方物理分页插件,用起来非常方便,减少了很多代码量。
官方文档:https://pagehelper.github.io/docs/howtouse/,官方文档是最靠谱的,多看几眼,少踩几个坑!
一.SSM项目整合PageHelper
1.添加坐标或者导入jar包
springboot项目的坐标最好不要使用下面的,PageHelper会失效。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
</dependency>
2.配置文件中添加对PageHelper的配置,即配置拦截器插件。
<!--mybatis-config.xml文件-->
<!--注意这里要写成PageInterceptor, 5.0之前的版本都是写PageHelper, 5.0之后要换成PageInterceptor->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--分页参数合理化 -->
<property name="reasonable" value="true"/>
</plugin>
</plugins>
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?-
注意:很多博客在关于这个地方的介绍时,普遍缺少在spring配置文件中配置的步骤,这一点在官网文档中有所体现,强烈推荐大家遇到不熟的东西时,先去查看官方文档。
<!--Spring 配置文件-->
<!-- 配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--关于其他不相关的配置,不加以赘述了-->
<!--配置PageHelper-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
<!--配置PageHelper-->
offsetAsPageNum=true
reasonable=true
rowBoundsWithCount=true
pageSizeZero=true
</value>
</property>
</bean>
</array>
</property>
</bean>
’value‘里是PageHelper的参数,可以有选择地进行添加
3.后端代码:controller层
Result类封装了返回前端的数据,其中 result.setData(list)中list是进行分页处理后的数据。
service层
PageInfo<OwnAppointModel> appointShow(long number, int page, int size);
serviceImpl层
//我的预约显示
@Override
public PageInfo<OwnAppointModel> appointShow(long number, int page , int size){
//startPage(1,10)第一个数表示第几页,第二个数表示每页有多少个
PageHelper.startPage(page, size,true);
List<OwnAppointModel> list =tConferenceRoomAppointmentMapper.selectByNumber2(number);
PageInfo<OwnAppointModel> pageInfo = new PageInfo<OwnAppointModel>(list);
if(list != null && list.size() > 0) {
return pageInfo;
}
else {
return null;
}
}
注意: PageHelper.startPage(page, size,true);只对下面第一个查询生效。注意上下顺序,先执行PageHelper,即先启动分页插件。
如果是在controller中对使用PageHelper.startPage,如果下面语句自身包含多个查询,那么分页是不起作用的。
4.前端使用了layui分页,ajax传输数据(layui的分页功能也很多,这里只挑选了最简单的一种)
js书写的时候,不小心写了个闭环,直接死循环了,所以采用了下面的方式,写了两个一样的请求,感觉不是一个很好的办法,但也能解决问题。
//显示数据的AJAX(封装过的)
var pageIndex = 1;
var total;
function getdata(pageIndex){
var url=Config.host+"/front/myAppointShow";
var data={ "page":pageIndex}
var func=function(returndata){
viewdata(returndata.data);//显示的js方法,这里就不列举了
}
AJAX.get(url,data,func);
}
function getdata2(){
var url2=Config.host+"/front/myAppointShow";
var data2={ "page":pageIndex};
var func2=function(returndata){
total = returndata.data.total;
//layui实现分页
layui.use(['laypage', 'layer'], function(){
var laypage = layui.laypage,layer = layui.layer;
laypage.render({
elem: 'demo1'
,count: total //数据总数
,jump: function(){
pageIndex=$(".layui-laypage-curr .layui-laypage-em+em").html();
getdata(pageIndex);
}
});
});
}
AJAX.get(url2,data2,func2);
}
二.PageHelper失效问题——total等于pageSize,总数一直等于每页的数量,也就是分页没有成功
分析的时候,一直用debug查看是不是代码有问题,排除了自身代码的问题后,确定是PageHelper没有起作用。
最先考虑的是配置文件是不是配置错了或者缺少参数,上网查了一堆,也没找到问题所在.
然后开始考虑版本的问题,换4.1.7后也不行,最后查了下官方文档,发现少配置了spring文件。
在配置过spring文件后(上面有提到),问题解决。( ̄▽ ̄)”
还没有评论,来说两句吧...