13 PageHelpler分頁外掛
阿新 • • 發佈:2018-11-12
簡介
pageHelpler 使用步驟
1. 引入分頁外掛 JAR
- 引入 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:
http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.5/ - Maven 方式
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.6</version>
</dependency>
2. 配置攔截器外掛
特別注意,新版攔截器是 com.github.pagehelper.PageInterceptor。 com.github.pagehelper.PageHelper 現在是一個特殊的 dialect 實現類,是分頁外掛的預設實現類,提供了和以前相同的用法。
2.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>
2.2 在 Spring 配置檔案中配置攔截器外掛
使用 spring 的屬性配置方式,可以使用 plugins 屬性像下面這樣配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注意其他配置 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置引數,一行配置一個 -->
<value>
params=value1
</value>
</property>
</bean>
</array>
</property>
</bean>
2.3 分頁外掛引數介紹
3. 如何在程式碼中使用
分頁外掛支援以下幾種呼叫方式:
//第一種,RowBounds方式的呼叫
List<Country> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10));
//第二種,Mapper介面方式的呼叫,推薦這種使用方式。
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectIf(1);
//第三種,Mapper介面方式的呼叫,推薦這種使用方式。
PageHelper.offsetPage(1, 10);
List<Country> list = countryMapper.selectIf(1);
//第四種,引數方法呼叫
//存在以下 Mapper 介面方法,你不需要在 xml 處理後兩個引數
public interface CountryMapper {
List<Country> selectByPageNumSize(
@Param("user") User user,
@Param("pageNum") int pageNum,
@Param("pageSize") int pageSize);
}
//配置supportMethodsArguments=true
//在程式碼中直接呼叫:
List<Country> list = countryMapper.selectByPageNumSize(user, 1, 10);
//第五種,引數物件
//如果 pageNum 和 pageSize 存在於 User 物件中,只要引數有值,也會被分頁
//有如下 User 物件
public class User {
//其他fields
//下面兩個引數名和 params 配置的名字一致
private Integer pageNum;
private Integer pageSize;
}
//存在以下 Mapper 介面方法,你不需要在 xml 處理後兩個引數
public interface CountryMapper {
List<Country> selectByPageNumSize(User user);
}
//當 user 中的 pageNum!= null && pageSize!= null 時,會自動分頁
List<Country> list = countryMapper.selectByPageNumSize(user);
//第六種,ISelect 介面方式
//jdk6,7用法,建立介面
Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(new ISelect() {
@Override
public void doSelect() {
countryMapper.selectGroupBy();
}
});
//jdk8 lambda用法
Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(()-> countryMapper.selectGroupBy());
//也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage
pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(new ISelect() {
@Override
public void doSelect() {
countryMapper.selectGroupBy();
}
});
//對應的lambda用法
pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(() -> countryMapper.selectGroupBy());
//count查詢,返回一個查詢語句的count數
long total = PageHelper.count(new ISelect() {
@Override
public void doSelect() {
countryMapper.selectLike(country);
}
});
//lambda
total = PageHelper.count(()->countryMapper.selectLike(country));