SSM+PageHelper实现分页——及解决PageHelper失效问题

女爷i 2023-03-02 07:40 18阅读 0赞

PageHelper简述:一款好用的开源免费的Mybatis第三方物理分页插件,用起来非常方便,减少了很多代码量。
官方文档:https://pagehelper.github.io/docs/howtouse/,官方文档是最靠谱的,多看几眼,少踩几个坑!

一.SSM项目整合PageHelper
1.添加坐标或者导入jar包
springboot项目的坐标最好不要使用下面的,PageHelper会失效。

  1. <dependency>
  2. <groupId>com.github.pagehelper</groupId>
  3. <artifactId>pagehelper</artifactId>
  4. <version>5.1.4</version>
  5. </dependency>

2.配置文件中添加对PageHelper的配置,即配置拦截器插件。

  1. <!--mybatis-config.xml文件-->
  2. <!--注意这里要写成PageInterceptor, 5.0之前的版本都是写PageHelper, 5.0之后要换成PageInterceptor->
  3. <plugins>
  4. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  5. <!--分页参数合理化 -->
  6. <property name="reasonable" value="true"/>
  7. </plugin>
  8. </plugins>
  9. plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
  10. properties?, settings?,
  11. typeAliases?, typeHandlers?,
  12. objectFactory?,objectWrapperFactory?,
  13. plugins?,
  14. environments?, databaseIdProvider?, mappers?-

注意:很多博客在关于这个地方的介绍时,普遍缺少在spring配置文件中配置的步骤,这一点在官网文档中有所体现,强烈推荐大家遇到不熟的东西时,先去查看官方文档。

  1. <!--Spring 配置文件-->
  2. <!-- 配置SqlSessionFactory对象 -->
  3. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  4. <!--关于其他不相关的配置,不加以赘述了-->
  5. <!--配置PageHelper-->
  6. <property name="plugins">
  7. <array>
  8. <bean class="com.github.pagehelper.PageInterceptor">
  9. <property name="properties">
  10. <value>
  11. <!--配置PageHelper-->
  12. offsetAsPageNum=true
  13. reasonable=true
  14. rowBoundsWithCount=true
  15. pageSizeZero=true
  16. </value>
  17. </property>
  18. </bean>
  19. </array>
  20. </property>
  21. </bean>

’value‘里是PageHelper的参数,可以有选择地进行添加

3.后端代码:controller层
Result类封装了返回前端的数据,其中 result.setData(list)中list是进行分页处理后的数据。
lst会议室预约
service层

  1. PageInfo<OwnAppointModel> appointShow(long number, int page, int size);

serviceImpl层

  1. //我的预约显示
  2. @Override
  3. public PageInfo<OwnAppointModel> appointShow(long number, int page , int size){
  4. //startPage(1,10)第一个数表示第几页,第二个数表示每页有多少个
  5. PageHelper.startPage(page, size,true);
  6. List<OwnAppointModel> list =tConferenceRoomAppointmentMapper.selectByNumber2(number);
  7. PageInfo<OwnAppointModel> pageInfo = new PageInfo<OwnAppointModel>(list);
  8. if(list != null && list.size() > 0) {
  9. return pageInfo;
  10. }
  11. else {
  12. return null;
  13. }
  14. }

注意: PageHelper.startPage(page, size,true);只对下面第一个查询生效。注意上下顺序,先执行PageHelper,即先启动分页插件。
如果是在controller中对使用PageHelper.startPage,如果下面语句自身包含多个查询,那么分页是不起作用的。

4.前端使用了layui分页,ajax传输数据(layui的分页功能也很多,这里只挑选了最简单的一种)
js书写的时候,不小心写了个闭环,直接死循环了,所以采用了下面的方式,写了两个一样的请求,感觉不是一个很好的办法,但也能解决问题。

  1. //显示数据的AJAX(封装过的)
  2. var pageIndex = 1;
  3. var total;
  4. function getdata(pageIndex){
  5. var url=Config.host+"/front/myAppointShow";
  6. var data={ "page":pageIndex}
  7. var func=function(returndata){
  8. viewdata(returndata.data);//显示的js方法,这里就不列举了
  9. }
  10. AJAX.get(url,data,func);
  11. }
  12. function getdata2(){
  13. var url2=Config.host+"/front/myAppointShow";
  14. var data2={ "page":pageIndex};
  15. var func2=function(returndata){
  16. total = returndata.data.total;
  17. //layui实现分页
  18. layui.use(['laypage', 'layer'], function(){
  19. var laypage = layui.laypage,layer = layui.layer;
  20. laypage.render({
  21. elem: 'demo1'
  22. ,count: total //数据总数
  23. ,jump: function(){
  24. pageIndex=$(".layui-laypage-curr .layui-laypage-em+em").html();
  25. getdata(pageIndex);
  26. }
  27. });
  28. });
  29. }
  30. AJAX.get(url2,data2,func2);
  31. }

二.PageHelper失效问题——total等于pageSize,总数一直等于每页的数量,也就是分页没有成功

分析的时候,一直用debug查看是不是代码有问题,排除了自身代码的问题后,确定是PageHelper没有起作用。

最先考虑的是配置文件是不是配置错了或者缺少参数,上网查了一堆,也没找到问题所在.

然后开始考虑版本的问题,换4.1.7后也不行,最后查了下官方文档,发现少配置了spring文件。

在配置过spring文件后(上面有提到),问题解决。( ̄▽ ̄)”

发表评论

表情:
评论列表 (有 0 条评论,18人围观)

还没有评论,来说两句吧...

相关阅读