yulichang / mybatis-plus-join

支持连表查询的mybatis-plus,mybatis-plus风格的连表操作提供wrapper.leftJoin(),wrapper.rightJoin()等操作
https://yulichang.github.io/mybatis-plus-join-doc/
Apache License 2.0
971 stars 113 forks source link

使用selectJoinPage获得的结果records数比total数少 #109

Closed Greenjiao closed 3 months ago

Greenjiao commented 3 months ago

当前使用版本(必填,否则不予处理)

1.4.10

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用selectJoinPage分页数据records和total不一致

重现步骤(如果有就写完整)

default PageResult<RoomRespVO> selectRespPage(RoomPageReqVO reqVO) {
    MPJLambdaWrapper<RoomDO> mpjLambdaWrapper = new MPJLambdaWrapper<RoomDO>()
            .selectAll(RoomDO.class)
            //  联表:标签、时间段
            .selectCollection(RoomTagDO.class, RoomRespVO::getRoomTagList)
            .selectCollection(RoomTimeDO.class, RoomRespVO::getRoomTimeList)
            .leftJoin(RoomTagDO.class, RoomTagDO::getRoomId, RoomDO::getId)
            .leftJoin(RoomTimeDO.class, RoomTimeDO::getRoomId, RoomDO::getId)
            //  基本条件
            .eq(ObjectUtil.isNotNull(reqVO.getId()), RoomDO::getId, reqVO.getId())
            .like(ObjectUtil.isNotNull(reqVO.getName()), RoomDO::getName, reqVO.getName())
            //  标签
            .in(ObjectUtil.isNotEmpty(reqVO.getTags()), RoomTagDO::getTag, reqVO.getTags())
            //  时间段
            .in(ObjectUtil.isNotEmpty(reqVO.getPeriods()) && !reqVO.getPeriods().contains(6), RoomTimeDO::getPeriod, reqVO.getPeriods());
    Page<RoomRespVO> roomDOPage = selectJoinPage(
            new Page<>(reqVO.getPageNo(), reqVO.getPageSize()),
            RoomRespVO.class,
            mpjLambdaWrapper
    );
    return new PageResult<>(roomDOPage.getRecords(), roomDOPage.getTotal());
}

2024-01-29_132545 烦请大佬们赐教,在pageNo为1,size为10的时候就少数据,调大size就能正常,请问可能是什么原因导致呢

报错信息

无报错,获得的结果records数比total数少

Greenjiao commented 3 months ago

仔细看了看直接执行sql,是因为转换成sql的时候,那个limit有问题,丢失了部分数据,那这样分页似乎就是必然会丢失数据呀。

Greenjiao commented 3 months ago

一对多分页查询保证分页数据准确性大家有什么好的方案嘛

Greenjiao commented 3 months ago

一对多分页查询保证分页数据准确性大家有什么好的方案嘛

我现在想的是全表查手动分页...

Umenezumi commented 2 months ago

一对多分页查询保证分页数据准确性大家有什么好的方案嘛

我现在想的是全表查手动分页...

最后怎么解决的?