Mybatis的插件 PageHelper 分頁查詢使用方法


參考:https://blog.csdn.net/ckc_666/article/details/79257028

Mybatis的一個插件,PageHelper,非常方便mybatis分頁查詢,國內牛人的一個開源項目

github:https://github.com/pagehelper/Mybatis-PageHelper

使用文檔:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

結合example使用例子:

@Service
public class BrandService {

    @Autowired
    private BrandMapper brandMapper;

    /**
     * 根據查詢條件分頁並排序查詢品牌信息
     * @param key
     * @param page
     * @param rows
     * @param sortBy
     * @param desc
     * @return
     */
    public PageResult<Brand> queryBrandsByPage(String key, Integer page, Integer rows, String sortBy, Boolean desc) {

        // 初始化example對象
        Example example = new Example(Brand.class);
        Example.Criteria criteria = example.createCriteria();

        // 根據name模糊查詢,或者根據首字母查詢
        if (StringUtils.isNotBlank(key)) {
            criteria.andLike("name","%" + key + "%").orEqualTo("letter",key);
        }

        // 添加分頁條件
        PageHelper.startPage(page,rows);

        // 添加排序條件
        if (StringUtils.isNotBlank(sortBy)) {
            // 通過判斷desc是true還是false,確定升序還是降序
            example.setOrderByClause(sortBy + " " + (desc ? "desc" : "asc"));   // 相當於“id desc”
        }

        // 將查詢到的結果保存在Brand類型的list中
        List<Brand> brands = this.brandMapper.selectByExample(example);

        // 包裝成pageInfo
        PageInfo<Brand> pageInfo = new PageInfo<>(brands);

        // 包裝成分頁的結果集返回
        return new PageResult<>(pageInfo.getTotal(),pageInfo.getList());

    }
}

 

搬運文檔部分代碼:

PageHelper.startPage 靜態方法調用

除了 PageHelper.startPage 方法外,還提供了類似用法的 PageHelper.offsetPage 方法。

在你需要進行分頁的 MyBatis 查詢方法前調用 PageHelper.startPage 靜態方法即可,緊跟在這個方法后的第一個MyBatis 查詢方法會被進行分頁。

例一:
//獲取第1頁,10條內容,默認查詢總數count
PageHelper.startPage(1, 10);
//緊跟着的第一個select方法會被分頁
List<Country> list = countryMapper.selectIf(1);
assertEquals(2, list.get(0).getId());
assertEquals(10, list.size());
//分頁時,實際返回的結果list類型是Page<E>,如果想取出分頁信息,需要強制轉換為Page<E>
assertEquals(182, ((Page) list).getTotal());
例二:
//request: url?pageNum=1&pageSize=10
//支持 ServletRequest,Map,POJO 對象,需要配合 params 參數
PageHelper.startPage(request);
//緊跟着的第一個select方法會被分頁
List<Country> list = countryMapper.selectIf(1);

//后面的不會被分頁,除非再次調用PageHelper.startPage
List<Country> list2 = countryMapper.selectIf(null);
//list1
assertEquals(2, list.get(0).getId());
assertEquals(10, list.size());
//分頁時,實際返回的結果list類型是Page<E>,如果想取出分頁信息,需要強制轉換為Page<E>,
//或者使用PageInfo類(下面的例子有介紹)
assertEquals(182, ((Page) list).getTotal());
//list2
assertEquals(1, list2.get(0).getId());
assertEquals(182, list2.size());
例三,使用PageInfo的用法:
//獲取第1頁,10條內容,默認查詢總數count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo對結果進行包裝
PageInfo page = new PageInfo(list);
//測試PageInfo全部屬性
//PageInfo包含了非常全面的分頁屬性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());

使用參數方式:

想要使用參數方式,需要配置 supportMethodsArguments 參數為 true,同時要配置 params 參數。 例如下面的配置:

<plugins>
    <!-- com.github.pagehelper為PageHelper類所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 使用下面的方式配置參數,后面會有所有的參數介紹 -->
        <property name="supportMethodsArguments" value="true"/>
        <property name="params" value="pageNum=pageNumKey;pageSize=pageSizeKey;"/>
    </plugin>
</plugins>

在 MyBatis 方法中:

List<Country> selectByPageNumSize(
        @Param("user") User user,
        @Param("pageNumKey") int pageNum, 
        @Param("pageSizeKey") int pageSize);

當調用這個方法時,由於同時發現了 pageNumKey 和 pageSizeKey 參數,這個方法就會被分頁。params 提供的幾個參數都可以這樣使用。

除了上面這種方式外,如果 User 對象中包含這兩個參數值,也可以有下面的方法:

List<Country> selectByPageNumSize(User user);

當從 User 中同時發現了 pageNumKey 和 pageSizeKey 參數,這個方法就會被分頁。

注意:pageNum 和 pageSize 兩個屬性同時存在才會觸發分頁操作,在這個前提下,其他的分頁參數才會生效。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM