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