詳見: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); }
返回給瀏覽器的數據:

