最初に独自の実装を示します
サービス:
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){
//这里是转换方法
}
テストダオ:
@Mapper
public interface TestDao{
List<TestVo> getTestVoList();
}
データは正しくクエリできます。しかし、ページネーションのパラメーターは実際には間違っています。
ブレークポイントを確認した後、リストを返しますが、mybaties がページネーション クエリを処理しようとしていることがわかりました。しかし実際には、ArryList を継承し、ページネーション情報を含むのは Page (com.github.pagehelper.Page) です。
List<TestVo> list = testDao.getTestVoList(); //実際に Page オブジェクトを返します
List<TestBean> beanlist = list.stream().map(this::toBean).collector(Collectors.toList()); //ここでの変換後、ページング パラメータは失われ、ゲーム オブジェクトは Page から List に変更されます。pageInfo = new PageInfo<TestBean>(beanlist); //ここでは Page オブジェクトではなく List オブジェクトが渡されるため、問題が発生します。
new PageInfo<TestBean>(List<T> list) では、実際に Page<T> が渡されます。そして、コンストラクターでページング情報を初期化します。次のように:
したがって、 new PageInfo<TestBean>(List<T> list) を使用し、受信リストが元のマッパー メソッドによって返されたオブジェクト (ページ) でない場合、データのページング パラメーターは正しく解析されません。だからページ違反。
パラメーターを Page オブジェクトに強制することによって、対応するページング パラメーターを取得するか、自分で Page オブジェクトを構築し、PageInfo をカスタム ページング オブジェクトに変換することができます。