1. 程式人生 > >13 PageHelpler分頁外掛

13 PageHelpler分頁外掛

簡介

學習文件

pageHelpler 使用步驟

1. 引入分頁外掛 JAR

  1. 引入 Jar 包
  2. 你可以從下面的地址中下載最新版本的 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/
  3. 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));