1. 程式人生 > 其它 >PageHelper[老的有時間整理一下]

PageHelper[老的有時間整理一下]

技術標籤:SSM

PageHelper[筆記]

文章是直接從我本地word筆記貼上過來的,排版啥的可能有點亂,湊合看吧,有時間我會慢慢整理

PageHelper

(一)基本使用

1.使用上的小坑

一個查詢的時候不要進行分頁查詢,只需要正常的進行查詢全部就可以了,不要帶limit什麼的分頁查詢.
一定要用構造方法否則PageInfo裡面的屬性會出現有些沒值的情況.

2.Spring4.3.11版本整合PageHelper

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

>pagehelper</artifactId>
<version>4.1.1</version>
</dependency>

3.其它說明

官方網站裡面有詳細的使用說明
https://pagehelper.github.io/docs/howtouse/
PageHelper只對緊跟著的第一個SQL語句起作用

com.github.pagehelper
pagehelper
最新版本

ü 需要在配置檔案配置資訊
這是低版本的下面有5.0以後配置版本

  <plugin interceptor=_"com.github.abel533.mapperhelper.MapperInterceptor"_>
     <!--主鍵自增回寫方法,預設值MYSQL,詳細說明請看文件 -->
     <property name=_"IDENTITY"_ value=_"MYSQL"_ />
     <!--通用Mapper介面,多個通用介面用逗號隔開 -->
     <property name=_"mappers"_ value=_"com.github.abel533.mapper.Mapper"_ />
  </plugin>

這個是pageHelper5以後版本配置,跟上面的不一樣
<plugin interceptor=“com.github.pagehelper.PageInterceptor”>

<!--    <property name="dialect" value="mysql"/>-->
<!-- 設定為true時,使用RowBounds分頁會進行count查詢 -->

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

</plugin>
在Spring配置檔案裡面配置pagehelper

(二)官方網站使用詳細說明

(三)入門級別的使用

支援排序查詢,具體看Service層

ü controller層
@RequestMapping("/list")

**public **String queryListPagehelper(Model model) {

Integer pageNum = 1;//當前行號
Integer pageSize = 3;//每頁顯示條數
PageInfo<PersonLmxi> pageInfo = **this**.**userService**.queryListPagehelper(pageNum, pageSize, **null**);//PersonLmxi是要分頁的實體類
//傳給前臺 前臺需要用foreach  ${pageInfo.list}迴圈取出
model.addAttribute(**"pageInfo"**, pageInfo);

**return "/user/userlist"**;

}
ü service層 (使用上可能會有小坑,需要注意一下)
/**

  • 分頁查詢(Service層)

  • **@param pageNum **//初始的頁數

  • @param pageSize//每頁最多顯示多少條

  • **@param record **//查詢條件(是當前的實體類)

*/
**public **PageInfo queryListPagehelper(Integer pageNum, Integer pageSize, PersonLmxi record) {

//開啟分頁,注意這個需要在第一行
PageHelper.startPage(pageNum, pageSize);

PageHelper.orderBy(“user_updateTime desc”); // 排序欄位!!!
//根據條件查詢所有.這個是通用mapper的方法(dao層只需要繼承通用mapper即可)

List<PersonLmxi> list = **this**.**userDao**.select(record);//查詢的
//直接返回一個分頁物件
**return new **PageInfo<PersonLmxi>(list);

}

(四)前臺jsp的基本API

page是服務端傳過來,裡面封裝了分頁資訊

當前頁號 ${page.pageNum}
頁面大小 ${page.pageSize}
起始行號(>=) ${page.startRow}
終止行號(<=) ${page.endRow}
總結果數 ${page.total}
總頁數 ${page.pages}
第一頁 ${page.firstPage}
前一頁 ${page.prePage}
下一頁 ${page.nextPage}
最後一頁 ${page.lastPage}

是否為第一頁 ${page.isFirstPage}
是否為最後一頁 ${page.isLastPage}
是否有前一頁 ${page.hasPreviousPage} //boolean型別
是否有下一頁 ${page.hasNextPage}

ü 下面應該是現成的前臺頁面程式碼,粘過去直接修改下就能用.

前一頁

<c:if test="${page.hasNextPage}">

下一頁

(五)概念以及原理

1.概念

分頁最麻煩的就是查詢每頁顯示的資料,因為不同的資料庫分頁查詢語句是不一樣的,比如MySQL是limit 而oracle是三層巢狀偽列查詢,
而pageHelper遮蔽了這些不同資料庫的查詢語句不一樣,統一了呼叫方法,使得呼叫方法只有一個,你無需關心是什麼資料庫查詢語句,只需要在配置檔案告訴Pagehelper是什麼資料庫,它會自動生成對應的SQL語句
pageHelper是基於Mybatis的後臺外掛,前端分頁還需要另外用別的技術來寫,
我們使用的分頁基本都是用物理分頁然後就是需要提供自己編寫伺服器程式碼封裝到PageInfo物件裡面傳遞給前臺用於回顯.

2.原理

Mybatis使用RowBounds物件進行分頁,它是針對ResultSet結果集執行的記憶體分頁,而非物理分頁,可以在sql內直接書寫帶有物理分頁的引數來完成物理分頁功能,也可以使用分頁外掛來完成物理分頁。

分頁外掛的基本原理是使用Mybatis提供的外掛介面,實現自定義外掛,在外掛的攔截方法內攔截待執行的sql,然後重寫sql,根據dialect方言,新增對應的物理分頁語句和物理分頁引數。

舉例:select * from student,攔截sql後重寫為:select t.* from (select * from student)t limit 0,10

3.關於分頁自己定義pageResult的好處

自己定義pageResult的好處是自己定義的物件可以隨意擴充套件裡面的屬性(你自己可以隨意修改,程式的擴充套件性會好一些), 而PageInfo是pagehelper的,不能修改,
如果不需要擴充套件(確定就不擴充套件)就不需要自己自定義pageResult實體類
詳情見AngularJs筆記分頁那裡這裡就不詳細寫了