在Spring中使用PageHelper——解決查詢中每頁數量與返回信息不一致的問題

問題

查詢的每頁數量與實際返回的不一致

問題描述

後端接口代碼:

        try {
            Integer user_id = (Integer)request.getAttribute("id");
            PageHelper.startPage(page, size);
            GuardListFilter guardListFilter = new GuardListFilter();
            guardListFilter.setFile_type(file_type);
            if(file_type.equals(person_audio)){
                guardListFilter.setProvider_id(user_id);
            }
            List<GuardListDTO> guardList = safety_serviceDao.listByFilter(guardListFilter);
            PageInfo<GuardListDTO> pageInfo = new PageInfo<GuardListDTO>(guardList);
            return JsonR.createSuccess(pageInfo);
        } catch (Exception e){
            return JsonR.createFail(e.getMessage());
        }

如下所示,調用接口返回第一頁的信息,每頁3條。
調用接口返回第一頁的信息,每頁3條
實際返回,只返回了一頁,其中包含了7條數據(數據庫中全部的數據)。

問題本質

原因(1)PageHelper只對緊跟着的第一個SQL語句起作用

原因(2)Spring Boot導入PageHelper與Spring不一致

問題解決

修改pom.xml文件,調整導包的代碼
原來的是:

        <!-- 分頁 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

修改後的依賴導入代碼:

在這裏插入代碼片

修改後端接口代碼,調整調用PageHelper的位置

        try {
            Integer user_id = (Integer)request.getAttribute("id");
            GuardListFilter guardListFilter = new GuardListFilter();
            guardListFilter.setFile_type(file_type);
            if(file_type.equals(person_audio)){
                guardListFilter.setProvider_id(user_id);
            }
            PageHelper.startPage(page, size);
            List<GuardListDTO> guardList = safety_serviceDao.listByFilter(guardListFilter);
            PageInfo<GuardListDTO> pageInfo = new PageInfo<GuardListDTO>(guardList);
            return JsonR.createSuccess(pageInfo);
        } catch (Exception e){
            return JsonR.createFail(e.getMessage());
        }

postMan調用結果

        "pageNum": 1,  //當前頁
        "pageSize": 3,	//每頁的元素數量
        "size": 3,	//當前頁的元素數量
        "startRow": 1,	//當前頁面第一個元素在數據庫中的行號
        "endRow": 3,  //當前頁面最後一個元素在數據庫中的行號
        "pages": 2,  //總頁數
        "prePage": 0, //上一頁
        "nextPage": 2,  //下一頁
        "isFirstPage": true,  //是否是第一頁
        "isLastPage": false,  //是否是最後一頁
        "hasPreviousPage": false,  //是否有前一頁
        "hasNextPage": true,  //是否有後一頁
        "navigatePages": 8, //導航頁碼數
        //所有的導航頁號
        "navigatepageNums": [
            1,
            2
        ],
        //導航條上的第一頁與最後一頁
        "navigateFirstPage": 1,
        "navigateLastPage": 2,
        "firstPage": 1,
        "lastPage": 2

問題得到了解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章