首先展示自己的实现
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转换为我们的自定义分页对象。