1. 程式人生 > 其它 >PageHelper.startPage分頁的使用和pageSize的值和list相同導致迴圈出來的total總數不對

PageHelper.startPage分頁的使用和pageSize的值和list相同導致迴圈出來的total總數不對

PageHelper.startPage分頁的使用和pageSize的值和list相同導致迴圈出來的total總數不對

	/**
	CommonQo 是我自己定義的一個類 來存放pageNum和PageSize
	**/
    @Override
    public PageInfo<FleetData> selectMarkAndSelfIdOne(CommonQo commonQo) {
		PageHelper.startPage(commonQo.getPageNum(),commonQo.getPageSize());

        List<FleetData>
fleetData = fleetDataMapper.selectMarkAndSelfIdOne(); //debug斷點 PageInfo<FleetData> pageInfo = new PageInfo<>(fleetData); List<FleetData> fleetDataList = new ArrayList<>(); System.out.println(fleetData.size()); //for迴圈就迴圈5 for (FleetData fleetData2:
fleetData) { Long userId= fleetData2.getId();//獲得使用者id //System.out.println("使用者id======="+ userId ); List<FleetBill> fleetBills = fleetBillMapper.selectBySelfId(userId); if (fleetBills.size()>0){ for (FleetBill fleet:fleetBills)
{ Long userId1= fleet.getFleetId();//獲得使用者id //System.out.println("客戶id======="+ userId1); } } else { fleetDataList.add(fleetData2); } } // PageInfo<FleetData> page= new PageInfo<>(fleetDataList); // BeanUtils.copyProperties(pageInfo,page); pageInfo.setList(fleetDataList); return pageInfo; }

1.PageHelper 是一個分頁外掛。需要傳入引數,pageNum,pageSize如果你傳入的引數分別是10,5,表示第10頁,每頁5條資料。那麼 fleetDataMapper.selectMarkAndSelfIdOne();的sql 末尾會預設加上limit 50,5,也就是查詢結果最多返回5條資料。

//未分頁
select * from marker
//分頁後
select * from marker limit 50,5

2.那麼問題就來了
我需要的是把所有的東西查出來之後進行for迴圈處理把我需要的資料存放到一個新的list集合裡然後再去分頁


PageHelper.startPage(commonQo.getPageNum(),commonQo.getPageSize());

List<FleetData> fleetData = fleetDataMapper.selectMarkAndSelfIdOne();

應為PageHelper.startPage是直接操作資料庫的,所以他在這裡提前做了分頁 如果pageSize是5 那麼他就會直接去資料庫查5條資料 然後返回給你 最後導致for迴圈的次數不對 然後影響下邊的資料處理 導致最後返回的資料total總數不對

3.解決方法
定義一個list分頁工具
等所有的東西處理完之後直接對list做分頁

/**
 * 自定義List分頁工具
 * @author hanwl
 */
public class PageUtil {

    //頁數
     private Integer lastPage;
    //一共有多少條資料
     private Integer count;
    //頁碼
     private Integer pageNum;
    //每頁多少條資料
     private Integer pageSize;

    public Integer getLastPage() {
        return lastPage;
    }

    public void setLastPage(Integer lastPage) {
        this.lastPage = lastPage;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public Integer getPageNum() {
        return pageNum;
    }

    public void setPageNum(Integer pageNum) {
        this.pageNum = pageNum;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 開始分頁
     * @param list
     * @param pageNum 頁碼
     * @param pageSize 每頁多少條資料
     * @return
     */
    public  List startPage(List list, Integer pageNum,
                                 Integer pageSize) {
        if (list == null) {
            return null;
        }
        if (list.size() == 0) {
            return null;
        }

        count = list.size(); // 記錄總數

        lastPage = 0; // 頁數
        if (count % pageSize == 0) {
            lastPage = count / pageSize;
        } else {
            lastPage = count / pageSize + 1;
        }

        int fromIndex = 0; // 開始索引
        int toIndex = 0; // 結束索引

        if (pageNum != lastPage) {
            fromIndex = (pageNum - 1) * pageSize;
            toIndex = fromIndex + pageSize;
        } else {
            fromIndex = (pageNum - 1) * pageSize;
            toIndex = count;
        }
        this.pageNum = pageNum;
        this.pageSize = pageSize;

        List pageList = list.subList(fromIndex, toIndex);

        return pageList;
    }
}

4.直接呼叫就可以了

如果有說的不對的地方 還請各位大佬多多指教

在這裡插入圖片描述