1.邏輯分頁(假分頁)
邏輯分頁:邏輯分頁依賴于代碼。(例:Mybatis自帶的分頁插件就是邏輯分頁)
同時邏輯分頁是先查詢出所有的數(shù)據,再根據代碼塊的所需(例:你需要拿到第幾頁,每頁幾條的數(shù)據)篩選出合適的數(shù)據進行分頁。
通過SQL將所有數(shù)據全部查詢出來,然后根據游標進行篩選,只是顯示出來部分而已。
好處是所有數(shù)據庫都統(tǒng)一,壞處就是效率低。
2.物理分頁(真分頁)
物理分頁:物理分頁依賴于數(shù)據庫。(更側重于sql語句)
例:MySQL數(shù)據庫提供的分頁關鍵字"limit",程序員只需要編寫帶有關鍵字的SQL語句,數(shù)據庫返回的數(shù)據就是分頁結果。
物理分頁就是數(shù)據庫本身提供了分頁方式,如MySQL的limit,oracle的rownum 。
好處是效率高,不好的地方就是不同數(shù)據庫有不同的搞法。
3.兩者對比
概念簡單點講:
邏輯分頁就是半自動化的一個分頁步驟(因為需要傳遞相關參數(shù),所以是半自動化的);
物理分頁就是手寫SQL語句實現(xiàn)的分頁。
1.數(shù)據庫方面
物理分頁是手寫SQL語句,故每一次分頁都需要訪問數(shù)據庫;邏輯分頁是將全部數(shù)據查詢出來后再進行的分頁,只需訪問一次數(shù)據庫。所以說,物理分頁對于數(shù)據庫造成的負擔大。
2.服務器方面
邏輯分頁一次性將所有的數(shù)據讀取至內存中,占用了較大的內存空間;物理分頁每次只讀取所需的數(shù)據,占用內存比較小。
3.實時性
邏輯分頁一次性將數(shù)據全部查詢出來,如果數(shù)據庫中的數(shù)據發(fā)生了改變,邏輯分頁就不能夠獲取最新數(shù)據(不能自動更新數(shù)據),可能導致臟數(shù)據的出現(xiàn),實時性較低
物理分頁每一次分頁都需要從數(shù)據庫中進行查詢,這樣能夠獲取數(shù)據庫中數(shù)據的最新狀態(tài),實時性較高。
4.邏輯分頁代碼實現(xiàn);
導入pom的依賴;
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency><!--導入分頁插件-->
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
注意版本依賴不然會使循環(huán) 報錯