pageHelper詳解


詳見:https://github.com/pagehelper/Mybatis-PageHelper/edit/master/wikis/zh/HowToUse.md

## 使用方法

1. 引入分頁插件

引入分頁插件有下面2種方式,推薦使用 Maven 方式。

#### 1). 引入 Jar 包

你可以從下面的地址中下載最新版本的 jar 包

- https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/

- http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/

由於使用了sql 解析工具,你還需要下載 jsqlparser.jar(需要和PageHelper 依賴的版本一致) :

- http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/

#### 2). 使用 Maven

在 pom.xml 中添加如下依賴:

```xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>
```
最新版本號可以從首頁查看。

2. 配置攔截器插件

特別注意,新版攔截器是 `com.github.pagehelper.PageInterceptor`。`com.github.pagehelper.PageHelper` 現在是一個特殊的 `dialect` 實現類,是分頁插件的默認實現類,提供了和以前相同的用法。

1. 在 MyBatis 配置 xml 中配置攔截器插件

<!--
plugins在配置文件中的位置必須符合要求,否則會報錯,順序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper為PageHelper類所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置參數,后面會有所有的參數介紹 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>

<plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 設置數據庫類型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種數據庫-->
            <property name="helperDialect" value="mysql"/>
        </plugin>
    </plugins>

3. 如何在代碼中使用

Mapper接口方式的調用,推薦這種使用方式。
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectIf(1);

`PageHelper.startPage` 靜態方法調用

##### 例一:

```java
//獲取第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());
```

##### 例二:
```java
//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`的用法:

```java
//獲取第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());
```

//service層調用

 public PageInfo<OrderInfo> getAllOrders(int page, int pageSize){
        PageHelper.startPage(page, pageSize);
        List<OrderInfo> list = orderMapper.selectAllOrders();
        PageInfo<OrderInfo> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }
//controller層使用  

@RequestMapping(value ="/all",method = RequestMethod.GET)
    public PageInfo<OrderInfo> getAllOrders(@RequestParam(value = "page",defaultValue = "1") int page,
                                            @RequestParam(value = "pageSize",defaultValue = "5") int pageSize){
        return orderService.getAllOrders(page,pageSize);
    }

返回給瀏覽器的數據:

 






免責聲明!

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



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