PageHelperページングpageSizeとtotal異常問題

3830 ワード

ページングオープン文は、クエリー文の前に置く必要があります.そうしないと無効です.
//  
PageHelper.startPage(pageNum, pageSize);
//  
List<Course> courseList = baseMapper.selectByCondition();

PageSizeがtotalに等しいという問題は、PageInfoのカプセル化値を与える前に複数のsqlクエリーを行いすぎたため、PageInfoは最後のクエリー結果をデフォルトでカプセル化するため、最初のデータが失われることがあります.この場合、クエリーのデータは複数のテーブルから来ていると同時にページングも行われます.一般的には、主なデータを先に調べてから、主なデータに基づいて他のテーブルの副次データをクエリーします.私たちは必ず主なデータをPageInfoにカプセル化するので、すべての文のクエリーが終わった後、PageInfoに値を割り当てると、主なデータが失われ、解決策は、主なデータをクエリーした後、すぐにPageInfoにデータを保存することです.
保存されたPageInfoデータの汎用性は、返される汎用性ではないため、最後に戻り値として2番目の汎用性を持つPageInfoオブジェクトを作成します.
public PageInfo<CourseVO> getCourseVOList(CourseQuery courseQuery,Integer pageNum,Integer pageSize) 
//  
List<Course> courseList = baseMapper.selectByCondition();
PageInfo<Course> page = new PageInfo<>(courseList);

ツールクラスでコピーする前に保存したデータを使えばいいのですが、設定するのはリストセットだけです
PageInfo<CourseVO> page2 = new PageInfo<>();
BeanUtils.copyProperties(page, page2);
page2.setList(voList);
return page2;