一、PageHelper簡介
PageHelper是MyBatis分頁插件,支持多種分頁場景,如統計總數、支持多種資料庫、支持嵌套查詢、支持較為複雜的分頁查詢等。該插件具有易用性高、功能豐富等特點。
二、快速使用
下面給出一個簡單的PageHelper使用示例。我們使用PageInfo類來獲取分頁信息,示例代碼如下:
// 引入PageHelper分頁插件 import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; // 使用PageHelper分頁 PageHelper.startPage(pageNum,pageSize); List userList = userMapper.getUserList(); PageInfo pageInfo = new PageInfo(userList);
其中,pageNum表示當前頁碼,pageSize表示每頁顯示數量,PageHelper.startPage(pageNum,pageSize)表示開啟分頁功能,userList為查詢到的結果集,PageInfo為結果集的包裝類。
三、常用方法
1. 分頁查詢
使用PageHelper分頁,需要使用PageHelper.startPage(pageNum,pageSize)開啟分頁功能,pageNum表示當前頁碼,pageSize表示每頁顯示數量。示例代碼如下:
// 分頁查詢 PageHelper.startPage(pageNum,pageSize); List userList = userMapper.getUserList(); PageInfo pageInfo = new PageInfo(userList); return pageInfo;
2. 排序查詢
使用PageHelper進行排序查詢,可以在調用PageHelper.startPage(pageNum,pageSize)方法後,通過PageHelper.orderBy(orderBy)指定排序條件。其中,orderBy表示排序條件,示例代碼如下:
// 排序查詢 PageHelper.startPage(pageNum,pageSize); PageHelper.orderBy("id asc"); // 按照id升序排序 List userList = userMapper.getUserList(); PageInfo pageInfo = new PageInfo(userList); return pageInfo;
3. 統計查詢
使用PageHelper進行統計查詢,可以通過PageInfo.getTotal()獲取總記錄數。示例代碼如下:
// 統計查詢 PageHelper.startPage(pageNum,pageSize); List userList = userMapper.getUserList(); PageInfo pageInfo = new PageInfo(userList); long total = pageInfo.getTotal(); return total;
4. 多表關聯查詢
多表關聯查詢,其實就是使用MyBatis的嵌套查詢語句實現的,與普通查詢使用PageHelper差不多。示例代碼如下:
// 多表關聯查詢 PageHelper.startPage(pageNum,pageSize); List blogList = blogMapper.getBlogList(); PageInfo pageInfo = new PageInfo(blogList); return pageInfo;
四、分頁插件高級用法
1. 物理分頁
PageHelper默認使用的是內存分頁,即將查詢到的數據全部放到內存中進行分頁,適用於數據源不大的場景。而在數據量較大的情況下,我們需要使用物理分頁方式,即只查詢當前頁的數據。
使用物理分頁方式,需要導入獨立的分頁插件,示例代碼如下:
// 引入物理分頁插件 import com.github.pagehelper.PageRowBounds; // 物理分頁 int offset = (pageNum-1)*pageSize; int limit = pageSize; PageRowBounds rowBounds = new PageRowBounds(offset,limit); // offset為偏移量,limit為查詢數量 List userList = userMapper.getUserList(rowBounds); PageInfo pageInfo = new PageInfo(userList); return pageInfo;
2. 自定義方言
PageHelper支持多種資料庫,同時也支持自定義SQL語句方言,以支持更多的資料庫類型。
使用自定義方言,需要導入對應的資料庫依賴,並在配置文件中指定方言類型。示例代碼如下:
// 引入自定義方言 import com.github.pagehelper.dialect.helper.MySqlDialect; // 自定義方言 PageHelper.startPage(1,10); PageHelper.clearPage(); // 清除頁面設置 PageHelper.setSqlDialect(new MySqlDialect()); // 設置MySql方言 return userMapper.selectUserList();
3. 自定義分頁插件
PageHelper提供了一個統一的攔截器介面,可以方便的自定義分頁插件,以滿足更加特殊的分頁需求。
使用自定義分頁插件,需要實現Interceptor介面,並在配置文件中指定該攔截器。示例代碼如下:
// 引入自定義分頁插件 import com.github.pagehelper.PageInterceptor; // 自定義分頁插件 Properties props = new Properties(); props.setProperty("dialect", "mysql"); // 設置資料庫類型 PageInterceptor interceptor = new PageInterceptor(); interceptor.setProperties(props); // 在配置文件中指定自定義分頁插件 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:mapper/**/*.xml"/> <property name="plugins"> <list> <!-- 自定義分頁插件 --> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <value>dialect=mysql</value> </property> </bean> </list> </property> </bean>
4. 定製化分頁組件
PageHelper提供了一種可擴展機制,我們可以實現自己的分頁組件,並在配置文件中指定該組件。這種方式需要我們熟悉PageHelper內部的架構和設計,並有一定的實戰經驗。
示例代碼就不再給出,讀者可以通過參考PageHelper的源代碼和文檔進行分析和實現。
原創文章,作者:YMICA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329190.html