mybatiesのページングクエリ問題記録

最初に独自の実装を示します

サービス:

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 をカスタム ページング オブジェクトに変換することができます。

おすすめ

転載: blog.csdn.net/qq_34484062/article/details/126741593