如果你也在使用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
添加如下依賴:
在Mybatis配置xml中配置攔截器插件:
其他五個參數說明:
-
-
增加dialect屬性,使用時必須指定該屬性,可選值為oracle,mysql,mariadb,sqlite,hsqldb,postgresql,沒有默認值,必須指定該屬性。
-
增加offsetAsPageNum屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,使用RowBounds分頁時,會將offset參數當成pageNum使用,可以用頁碼和頁面大小兩個參數進行分頁。
-
增加rowBoundsWithCount屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,使用RowBounds分頁會進行count查詢。
-
增加pageSizeZero屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果(相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)。
-
增加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源碼:
歡迎關注公眾號