mybatis + PageHelper 實現分頁


如果你也在使用Mybatis,建議嘗試PageHelper插件,這個一定是最方便使用的分頁插件。
該插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種數據庫分頁。
PageHelper分頁插件項目中的正式代碼一共有個5個Java文件,這5個文件的說明如下:

 

       1:  Page<E>[必須]:分頁參數類,該類繼承ArrayList,雖然分頁查詢返回的結果實際類型是Page<E>,但是可以完全不出現所有的代碼中,可以直接當成List使用。返回值不建議使用Page,建議仍然用List。如果需要用到分頁信息,使用下面的PageInfo類對List進行包裝即可。

       2:  PageHelper[必須]:分頁插件攔截器類,對Mybatis的攔截在這個類中實現。

       3:  PageInfo[可選]:Page<E>的包裝類,包含了全面的分頁屬性信息。

      4: SqlParser[可選]:提供高效的count查詢sql。主要是智能替換原sql語句為count(*),去除不帶參數的order by語句。需要jsqlparser-0.9.1.jar支持。

       5: SqlUtil[必須]:分頁插件工具類,分頁插件邏輯類,分頁插件的主要實現方法都在這個類中

使用maven

添加如下依賴:

<dependency>

    <groupId>com.github.pagehelper</groupId>

    <artifactId>pagehelper</artifactId>

    <version>3.4.2</version>

</dependency>

<dependency>

    <groupId>com.github.jsqlparser</groupId>

    <artifactId>jsqlparser</artifactId>

    <version>0.9.1</version>

</dependency>

 


在Mybatis配置xml中配置攔截器插件:

<!--

    plugins在配置文件中的位置必須符合要求,否則會報錯,順序如下:

    properties?, settings?,

    typeAliases?, typeHandlers?,

    objectFactory?,objectWrapperFactory?,

    plugins?,

    environments?, databaseIdProvider?, mappers?

-->

<plugins>

    <!-- com.github.pagehelper為PageHelper類所在包名 -->

    <plugin interceptor="com.github.pagehelper.PageHelper">

        <property name="dialect" value="mysql"/>

        <!-- 該參數默認為false -->

        <!-- 設置為true時,會將RowBounds第一個參數offset當成pageNum頁碼使用 -->

        <!-- 和startPage中的pageNum效果一樣-->

        <property name="offsetAsPageNum" value="true"/>

        <!-- 該參數默認為false -->

        <!-- 設置為true時,使用RowBounds分頁會進行count查詢 -->

        <property name="rowBoundsWithCount" value="true"/>

        <!-- 設置為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果 -->

        <!-- (相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)-->

        <property name="pageSizeZero" value="true"/>

        <!-- 3.3.0版本可用 - 分頁參數合理化,默認false禁用 -->

        <!-- 啟用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最后一頁 -->

        <!-- 禁用合理化時,如果pageNum<1或pageNum>pages會返回空數據 -->

        <property name="reasonable" value="true"/>

    </plugin>

</plugins>

 

 

 

其他五個參數說明:

    1. 增加dialect屬性,使用時必須指定該屬性,可選值為oracle,mysql,mariadb,sqlite,hsqldb,postgresql,沒有默認值,必須指定該屬性

    2. 增加offsetAsPageNum屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,使用RowBounds分頁時,會將offset參數當成pageNum使用,可以用頁碼和頁面大小兩個參數進行分頁。

    3. 增加rowBoundsWithCount屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,使用RowBounds分頁會進行count查詢。

    4. 增加pageSizeZero屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果(相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)。

    5. 增加reasonable屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。具體作用請看上面配置文件中的注釋內容。

 

MyBatis框架

 

           MyBatis是一個優秀的持久層框架,它對jdbc的操作數據庫的過程進行了封裝,使開發者只需要關注SQL本身,而不需要花費精力去處理例如驅動,創建connection,創建statement,手動設置參數,結果集檢索等jdbc繁雜的過程代碼

            Mybatis通過xml或注解的方式要執行statement配置起來,並通過java對象和statement中的sql進行映射生成最終執行的sql語句,最后由mybatis框架執行sql並將結果映射成java對象並返回。

 

            這就是mybatis執行情況,那么mybatis的插件作用在哪一環節呢?它主要作用在Executor執行器與mappedeStatement之間,也就是說mybatis可以在插件中獲得要執行的sql語句,在sql語句中添加limit語句,然后再去對sql進行封裝,從而可以實現分頁處理。

 

配置插件:

現在開始在mybatis的全局配置文件SqlMapConfig.xml中配置插件

 

引用配置

 

在sql查詢語句之前添加一行代碼:

        PageHelper.startPage(page, rows); 

            page為顯示第幾頁,rows為一頁顯示多少條數據。

                            就可以查詢分頁信息。

舉個栗子:

 

 

PageHelper.startPage(page, rows); 是一個靜態的方法,在PageHelper源碼:

 

歡迎關注公眾號

 

 


免責聲明!

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



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