PageHelper插件导致返回的数据不准确

当使用PageHelper在Java中进行数据库分页查询时,遇到一个奇怪的现象:请求11条数据,分页参数为1和10,实际返回的总条数却只有10。问题可能源于PageHelper在处理多个查询时无法正确识别应返回的分页数据,以及数据从entity层复制到vo层时可能出现的数据丢失。解决方案有待进一步研究。

情况:

        数据库11条数据,使用pagehelper分页后,传入参数1,10,返回的总条数只返回了10

原代码:

 PageHelper.startPage(elderQueryVo.getPageNum(), elderQueryVo.getPageSize());
		List<ElderInfo> list = elderInfoMapper.getElderInfoList(elderQueryVo);
        HashMap<String,String>  map = new HashMap<>();
        if(list!=null){
            Set<String>  set  = new  HashSet<>();
            list.forEach(s->{
                set.add(s.getProvince());
                set.add(s.getCity());
                set.add(s.getCounty());
            });
            if(!set.isEmpty()){
                List<SysRegion> byParentId = sysRegionMapper.getByParentId(set);
                byParentId.forEach(sysRegion ->{
                    map.put(sysRegion.getRegionId(),sysRegion.getRegionName());
                });

            }
        }
        
        //list
        Set<String> orgCodeS = list.stream().map(s -> s.getOrgCode()).collect(Collectors.toSet());
        //批量查询机构信息
        List<OrgInfo> byOrgName = orgInfoService.queryOrgInfoByOrgCodes(orgCodeS);
        Map<String, String> collect = byOrgName.stream().collect(Collectors.toMap(OrgInfo::getOrgCode, OrgInfo::getOrgName));
        List<ElderInfoVo> tmpList =  JsonUtils.copyList(ElderInfoVo.class, list);
        for(ElderInfoVo e :tmpList){
            if(collect.containsKey(e.getOrgCode())) {
                e.setOrgName(collect.get(e.getOrgCode()));
                e.setProvince(map.get(e.getProvince()));
                e.setCity(map.get(e.getCity()));
                e.setCounty(map.get(e.getCounty()));
            }
        }

现代码:

 PageHelper.startPage(elderQueryVo.getPageNum(), elderQueryVo.getPageSize());
		List<ElderInfo> list = elderInfoMapper.getElderInfoList(elderQueryVo);
        HashMap<String,String>  map = new HashMap<>();
        if(list!=null){
            Set<String>  set  = new  HashSet<>();
            list.forEach(s->{
                set.add(s.getProvince());
                set.add(s.getCity());
                set.add(s.getCounty());
            });
            if(!set.isEmpty()){
                List<SysRegion> byParentId = sysRegionMapper.getByParentId(set);
                byParentId.forEach(sysRegion ->{
                    map.put(sysRegion.getRegionId(),sysRegion.getRegionName());
                });

            }
        }
        
        //list
        Set<String> orgCodeS = list.stream().map(s -> s.getOrgCode()).collect(Collectors.toSet());
        //批量查询机构信息
        List<OrgInfo> byOrgName = orgInfoService.queryOrgInfoByOrgCodes(orgCodeS);
        Map<String, String> collect = byOrgName.stream().collect(Collectors.toMap(OrgInfo::getOrgCode, OrgInfo::getOrgName));
        List<ElderInfoVo> tmpList =  JsonUtils.copyList(ElderInfoVo.class, list);
        for(ElderInfoVo e :tmpList){
            if(collect.containsKey(e.getOrgCode())) {
                e.setOrgName(collect.get(e.getOrgCode()));
                e.setProvince(map.get(e.getProvince()));
                e.setCity(map.get(e.getCity()));
                e.setCounty(map.get(e.getCounty()));
            }
        }
        PageInfo<ElderInfoVo> pageInfo = new PageInfo(list);
        pageInfo.setList(tmpList);
        return pageInfo;

不同点:

 PageInfo<ElderInfoVo> pageInfo = new PageInfo(list);
 pageInfo.setList(tmpList);

原因:

1、因为PageHelper在面对多个查询的时候不清楚我到底返回谁分页的数据

2、可能也是因为entity层的数据copy到vo层导致数据丢失(待考证)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值