mybaties的分页查询问题记录

首先展示自己的实现

service:

public PageInfo<TestBean> getTestBeanList(Integer pageSize, Integer pageNo){
        PageHelper.startPage(pageNo, pageSize);
        PageInfo<TestVo> pageInfo = null;
        List<TestVo> list = testDao.getTestVoList();
        List<TestBean> beanlist = list.stream().map(this::toBean).collector(Collectors.toList()); //这里转换了会有问题
        pageInfo = new PageInfo<TestBean>(beanlist);
        return pageInfo;
    }

public TestBean toBean(TestVo testVo){
    //这里是转换方法
}

testDao:

@Mapper
public interface TestDao{

    List<TestVo> getTestVoList();
}

数据能正确查询出来。但是分页参数确实不对的。

经过断点查看发现,mybaties在处理分页查询试,虽然我们返回的是List。但是实际上是Page(com.github.pagehelper.Page),这个Page类继承了ArryList且其中中包含了分页的信息。

List<TestVo> list = testDao.getTestVoList();   //这里实际上是返回 Page对象
 List<TestBean> beanlist = list.stream().map(this::toBean).collector(Collectors.toList()); //这里转换后会导致分页参数丢失,对局对象从Page变成了List。

 pageInfo = new PageInfo<TestBean>(beanlist);  //这里传入的是List对象,而不是Page对象,所以会有问题

在 new PageInfo<TestBean>(List<T> list) 中其实传入的是Page<T>。并在构造函数中初始化出分页信息。如下:

所以,如果我们在 使用  new PageInfo<TestBean>(List<T> list) 时,传入的list不是原始mapper方法返回的对象(Page)就会导致数据的分页参数没有正确的解析出来。所以分页错误。

可以通过将参数强转为Page对象获取到对应的分页参数,或者自行构建Page对象, 将PageInfo转换为我们的自定义分页对象。

扫描二维码关注公众号,回复: 14805543 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_34484062/article/details/126741593