分页操作total值返回的是每一页的条数不是总条数问题

    在进行查询数据的时候,由于数据的数量太多,我们通常需要进行分页操作,但是却发现返回结果中total返回的是每一页的数据量而不是全部的数据量,很是困惑,因为我没有进行任何的操作,只是从数据库将所需要的数据查出来,封装成vo对象进行返回。这个问题的出现就是由于将返回对象封装成vo对象返回导致的,如果直接将查出来数据返回是不会出现这个问题

 //pagehelper所需的依赖
<dependency>
            <artifactId>pagehelper</artifactId>
            <groupId>com.github.pagehelper</groupId>
            <version>5.3.1</version>
</dependency>

代码:

   PageHelper.startPage(page,size);
   ArrayList<RecordVersion> list=versionConfigService.selectVersion(type,upgrade,entNum);
   ArrayList<RecordVersionVo> voList=new ArrayList<>();
   if(list.size()>0 && list !=null){
   for (RecordVersion recordVersion : list) {
        RecordVersionVo vo=new RecordVersionVo();
        //封装成vo对象返回给前端
        BeanUtils.copyProperties(recordVersion,vo);
        voList.add(vo);
     }
 }
 PageInfo<RecordVersionVo>  listVo=new PageInfo<RecordVersionVo>(voList);
  return ResultUtils.ok(listVo);

在这里,对查出来的RecordVersion对象进行一层封装,返回的是RecordVersionVo对象。

查看源码,PageInfo类的构造方法,参数是list集合。我们可知,在这个方法中进行pageNum和pageSize等的赋值,但是并没有看见关于total的赋值,我们点进super(list)查看。

点进super(list)中,看到total的赋值,是根据if条件进行判断的

点击Page,我们可知他继承了ArrayList类,意思就是,当执行分页后,我们从数据库查出来的数据的数据类型其实是Page根据上面的if条件判断可知,若是我们将多条数据(list<RecordVersion>)查出来后直接返回,那么total值是总条数,但是我在这里将查出来的数据封装成list<RecordVersionVo>对象,所以它会走else,返回的就是每页的条数。

解决办法:手动total值赋值

    //设置数据总数
    listVo.setTotal(((Page)list).getTotal());
    return ResultUtils.ok(listVo);

这样运行后,完美解决问题!!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在前端页面上,你可以使用以下元素来实现分页查询: 1. 页码数:可以使用一个数字列表来示页码数,用户点击不同的数字可以跳转到对应的页面。 2. 总条数:可以在页面顶部或底部显示总条数,让用户了解当前查询结果的总数。 3. 每页显示数:可以使用一个下拉列表或单选框来让用户选择每页显示的条数。 4. 分页查询:可以在页面下方显示分页器,让用户可以翻页查看不同的结果页。 在实现分页查询的过程中,需要注意以下几点: 1. 查询结果需要进行分页处理,只返回当前页的数据。 2. 当用户进行翻页操作时,需要重新向后端发送请求获取对应页的数据。 3. 当用户改变每页显示数时,需要重新请求获取对应页的数据,并重新渲染分页器。 4. 分页器需要根据当前页和总页数进行动态渲染,让用户可以清晰地了解当前所在的页面位置。 比如,可以使用HTML、CSS、JavaScript等技术实现一个分页查询的前端页面,代码示例如下: ```html <!-- 分页查询的HTML代码 --> <div id="page-wrapper"> <!-- 显示总条数 --> <div id="total-count">共有<span id="count"></span>条记录</div> <!-- 每页显示数 --> <div id="page-size"> <label>每页显示:</label> <select id="pageSize"> <option value="10">10</option> <option value="20">20</option> <option value="50">50</option> </select> </div> <!-- 分页器 --> <div id="pagination"> <ul id="page-list"></ul> </div> </div> <!-- JavaScript代码 --> <script> var totalCount = 100; // 总条数 var pageSize = 10; // 每页显示数 var pageCount = Math.ceil(totalCount / pageSize); // 总页数 var currentPage = 1; // 当前页码 // 显示总条数 document.getElementById("count").innerText = totalCount; // 显示页码列表 var pageList = ""; for (var i = 1; i <= pageCount; i++) { pageList += "<li><a href='#' onclick='goToPage(" + i + ")'>" + i + "</a></li>"; } document.getElementById("page-list").innerHTML = pageList; // 跳转到指定页码 function goToPage(page) { currentPage = page; // TODO: 发送请求获取对应页码的数据 } // 改变每页显示数 document.getElementById("pageSize").onchange = function() { pageSize = this.value; pageCount = Math.ceil(totalCount / pageSize); // TODO: 发送请求获取对应页码的数据,并重新渲染分页器 }; </script> ``` 在上面的代码中,我们使用了一个`div`元素作为分页查询的容器,其中包含了显示总条数、每页显示数和分页器等元素。在JavaScript代码中,我们定义了一些变量来存储总条数、每页显示数、总页数和当前页码等信息,并使用循环语句生成了页码列表。在用户点击不同的页码或改变每页显示数时,可以通过调用对应的JavaScript函数来实现跳转到指定页码和重新渲染分页器等功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值