SpringBoot 整合 pagehelper
SpringBoot
集成pagehelper
自然有它的Starter
:PageHelper-Spring-Boot-Starter
pom.xml
添加依賴:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
配置
官方說通常情況下是不需要配置的,如果需要在application.yml
中,以下是部分配置參數:PageHelper
是頂級。
# PageHelper分頁插件
pagehelper:
#指定分頁插件使用哪種方言,支持:oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,informix,h2,derby。。。
helperDialect: mysql
# pageNum<=0 時會查第一頁, pageNum>pages(超過總數時),會查最後一頁
reasonable: true
# 支持通過 Mapper 接口參數來傳遞分頁參數,默認值false
supportMethodsArguments: true
# 爲了支持startPage(Object params)方法,增加了該參數來配置參數映射,用於從對象中根據屬性名取值
params: count=countSql
官方重要提示
'【PageHelper.startPage方法重要提示】'
只有緊跟在PageHelper.startPage方法後的第一個Mybatis的查詢(Select)方法會被分頁。
'【請不要配置多個分頁插件】'
請不要在系統中配置多個分頁插件(使用Spring時,mybatis-config.xml和Spring<bean>配置方式,
請選擇其中一種,不要同時配置多個分頁插件)!
'【分頁插件不支持帶有for update語句的分頁】'
對於帶有for update的sql,會拋出運行時異常,對於這樣的sql建議手動分頁,畢竟這樣的sql需要重視。
'【分頁插件不支持嵌套結果映射】'
由於嵌套結果方式會導致結果集被摺疊,因此分頁查詢的結果在摺疊後總數會減少,所以無法保證分頁結果數量正確。
用法
PageHelper.startPage(頁碼,每頁數量)
// 取第1頁,每頁2條,默認統計總條數。每次調一下它下1條查詢就會執行分頁。
PageHelper.startPage(1, 2);
List<Poem> list = poemService.list();
// 獲取分頁信息 (page 會包含 list)
PageInfo page = new PageInfo(list);
聽說排序有坑,真到用時,還得注意一下
// 排序就直接寫排序條件就行了
PageHelper.startPage(1, 5, "title desc");
/**
* 開始分頁
* @param pageNum 頁碼
* @param pageSize 每頁顯示數量
*/
public static <E> Page<E> startPage(int pageNum, int pageSize)
/**
* 開始分頁
* @param pageNum 頁碼
* @param pageSize 每頁顯示數量
* @param count 是否進行count查詢,默認 true
*/
public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count)
/**
* 開始分頁
* @param pageNum 頁碼
* @param pageSize 每頁顯示數量
* @param orderBy 排序
*/
public static <E> Page<E> startPage(int pageNum, int pageSize, String orderBy)
/**
* 開始分頁
* @param pageNum 頁碼
* @param pageSize 每頁顯示數量
* @param count 是否進行count查詢
* @param reasonable 分頁合理化,null時用默認配置
* @param pageSizeZero true且pageSize=0時返回全部結果,false時分頁,null時用默認配置
*/
public static <E> Page<E> offsetPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero)
PageHelper.offsetPage(起始位置,每頁顯示數量)
/**
* 開始分頁
* @param offset 起始位置,偏移位置
* @param limit 每頁顯示數量
*/
public static <E> Page<E> offsetPage(int offset, int limit)
/**
* 開始分頁
* @param offset 起始位置,偏移位置
* @param limit 每頁顯示數量
* @param count 是否進行count查詢
*/
public static <E> Page<E> offsetPage(int offset, int limit, boolean count)