1. 程式人生 > 實用技巧 >PageHelper--Mybatis分頁外掛(ssm框架下的使用)

PageHelper--Mybatis分頁外掛(ssm框架下的使用)

1.匯入PageHelper依賴

<!-- MyBatis 分頁外掛 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.0.0</version>
</dependency>    

2.配置PageHelper外掛

注意:om.github.pagehelper.PageHelper這個介面,自4.0.0版本以後就不再使用了,轉而實現這個介面:org.apache.ibatis.plugin.Interceptor。由於我使用的是4.0.0版本,所以還是用的PageHelper。

方式一:在mybatis的主配置檔案中配置PageHelper外掛

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper"
> <property name="dialect" value="mysql"/> <property name="offsetAsPageNum" value="true"/> <property name="rowBoundsWithCount" value="true"/> <property name="pageSizeZero" value="true"/> <property name="reasonable"
value="true"/> <property name="params" value="pageNum=start;pageSize=limit;"/> <property name="supportMethodsArguments" value="true"/> <property name="returnPageInfo" value="check"/> </plugin> </plugins> </configuration>

屬性說明:

  dialect(常用):指定當前使用的資料庫 。pagehelper版本4.0.0以後可以不設定此屬性。

  offsetAsPageNum:設定為true時,會將RowBounds第一個引數offset當成pageNum頁碼使用,預設為false。

  rowBoundsWithCount:設定為true時,使用RowBounds分頁會進行count查詢,預設為false。

  pageSizeZero:設定為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果(相當於沒有執行分頁查詢,但是返回結果仍然是Page型別)。

  reasonable(常用):分頁引數合理化,設定為true時,如果pageNum<1會查詢第一頁,如果pageNum>最大頁數時會查詢最後一頁;禁用合理化時,如果pageNum<1或pageNum>最大頁數時會返回空資料。預設為false禁用(3.3.0之後版本可用)。

  params:增加了一個`params`引數來配置引數對映,用於從Map或ServletRequest中取值。可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置對映的用預設值。不理解該含義的前提下,不要隨便複製該配置 (3.5.0版本可用,為了支援startPage(Object params)方法)      

  supportMethodsArguments:支援通過Mapper介面引數來傳遞分頁引數。

  returnPageInfo:always總是返回PageInfo型別,check檢查返回型別是否為PageInfo,none返回Page。

記得在spring的配置檔案的sqlSessionFactory中指定mybatis全域性配置檔案位置。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定mybatis全域性配置檔案位置-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--指定mapper.xml配置檔案路徑-->
        <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/>
        <!--裝配資料來源-->
        <property name="dataSource" ref="dataSource"/>
</bean>

方式二:直接在spring主配置檔案中配置PageHelper外掛(沒有mybatis的主配置檔案使用此方式)

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定mybatis全域性配置檔案位置-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--指定mapper.xml配置檔案路徑-->
        <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/>
        <!--裝配資料來源-->
        <property name="dataSource" ref="dataSource"/>
        <!--配置外掛-->
        <property name="plugins">
            <array>
                <!--配置PageHelper外掛-->
                <bean class="com.github.pagehelper.PageHelper">
                    <property name="properties">
                        <props>
                            <!--配置資料庫方言,告訴 PageHelper當前使用的資料庫-->
                            <prop key="dialect">mysql</prop>
                            <!--配置頁碼的合理化修正,在1~總頁數之間修正頁碼-->
                            <!--合理化修正-->
                            <prop key="reasonable">true</prop>
                        </props>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

3.使用

在執行查詢之前呼叫PageHelper的靜態方法:PageHelper.startPage(pageNum,pageSize)即可,pagehelper自動對PageHelper.startPage 方法下的第一個sql 查詢進行分頁

此方法兩個引數:

pageNum:當前頁碼

pageSize:每頁顯示的條數

程式碼舉例:

    @Test
    public void test2(){
        PageHelper.startPage(2,10);
        List<Admin> list = adminMapper.selectAdminByKeyword("");
        for (Admin admin : list) {
            System.out.println(admin);
        }
    }

輸出: