pageHelper查询不到总数的原因

在使用PageHelper进行分页查询时,遇到总数查询不到的问题。经过排查,问题出现在Service层,原本的代码中,PageHelper的查询结果被转换为另一种对象,导致数据丢失。修正方法是直接使用PageHelper的原始查询结果创建PageInfo对象,确保所有分页信息正确。通过调整Service层的处理方式,成功解决了查询总数缺失的bug。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

controller层的代码如下:

@GetMapping("/list")
public ModelAndView list(@RequestParam(value = "page",defaultValue = "1") Integer page,
                         @RequestParam(value = "pageSize",defaultValue = "1") Integer pageSize,
                         Map<String,Object> map){
    PageHelper.startPage(page,pageSize);

    PageInfo pageInfo = orderService.findList();
	System.out.println(pageInfo);
}

打印出来的pageInfo如下:
在这里插入图片描述

但我的数据不止1条,为什么size=1,查询不到总数呢?
后来我参考了这篇文章:关于pageHelper无法查到总数踩到的坑

发现了是我Service层里的问题:
原代码:

@Override
public PageInfo findList() {
	List<OrderMaster> orderMasterList = orderMasterMapper.findAll();

   /*根据订单信息转化为OrderDTO的List*/
   List<OrderDTO> orderDTOList = OrderMaster2OrderDTOConverter.convert(orderMasterList);

   PageInfo pageInfo = new PageInfo(orderDTOList);

   return pageInfo;
}

改过后的代码:
Controller层:

@GetMapping("/list")
public ModelAndView list(@RequestParam(value = "page",defaultValue = "1") Integer page,
                         @RequestParam(value = "pageSize",defaultValue = "1") Integer pageSize,
                         Map<String,Object> map){
    PageHelper.startPage(page,pageSize);
    PageInfo pageInfo = orderService.findList();

    List<OrderDTO> orderDTOList = OrderMaster2OrderDTOConverter.convert(pageInfo.getList());
	pageInfo.setList(orderDTOList);
}

Service层:

@Override
public PageInfo findList() {
    List<OrderMaster> orderMasterList = orderMasterMapper.findAll();
        
    PageInfo pageInfo = new PageInfo(orderMasterList);
	return pageInfo;
}

在原来的代码中,service里PageHelper会对orderService.findList()起一个分页的作用,然后返回一个Page的相关信息。
也就是说,在Service的findList中,第一次的查询语句:

List<OrderMaster> orderMasterList = orderMasterMapper.findAll();

就是返回的一个page的相关信息,必须得用PageInfo来接收才能获取里面的数据。不可直接处理。
我原来的代码就是直接把它又转化为另一种对象了,所以造成了数据的缺失。改动后的代码是直接把转化前的对象当作创建PageInfo对象的参数(结果集合为orderDTOList

PageInfo pageInfo = new PageInfo(orderMasterList);

这样pageInfo里面除了所需集合之外的数据都为正确的,此时再进行转换,将orderMasterList替换为orderDTOList,再赋值给pageInfo

List<OrderDTO> orderDTOList = OrderMaster2OrderDTOConverter.convert(pageInfo.getList());
pageInfo.setList(orderDTOList);

555真的找这个问题找了好久twt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值