1.逻辑分页(假分页)

逻辑分页:逻辑分页依赖于代码。(例:Mybatis自带的分页插件就是逻辑分页)
同时逻辑分页是先查询出所有的数据,再根据代码块的所需(例:你需要拿到第几页,每页几条的数据)筛选出合适的数据进行分页。

通过SQL将所有数据全部查询出来,然后根据游标进行筛选,只是显示出来部分而已。
好处是所有数据库都统一,坏处就是效率低。

2.物理分页(真分页)

物理分页:物理分页依赖于数据库。(更侧重于sql语句)
例:MySQL数据库提供的分页关键字"limit",程序员只需要编写带有关键字的SQL语句,数据库返回的数据就是分页结果。

物理分页就是数据库本身提供了分页方式,如MySQL的limit,oracle的rownum 。
好处是效率高,不好的地方就是不同数据库有不同的搞法。

3.两者对比

概念简单点讲:
逻辑分页就是半自动化的一个分页步骤(因为需要传递相关参数,所以是半自动化的);
物理分页就是手写SQL语句实现的分页。

1.数据库方面

物理分页是手写SQL语句,故每一次分页都需要访问数据库;逻辑分页是将全部数据查询出来后再进行的分页,只需访问一次数据库。所以说,物理分页对于数据库造成的负担大。

2.服务器方面

逻辑分页一次性将所有的数据读取至内存中,占用了较大的内存空间;物理分页每次只读取所需的数据,占用内存比较小。

3.实时性

逻辑分页一次性将数据全部查询出来,如果数据库中的数据发生了改变,逻辑分页就不能够获取最新数据(不能自动更新数据),可能导致脏数据的出现,实时性较低
物理分页每一次分页都需要从数据库中进行查询,这样能够获取数据库中数据的最新状态,实时性较高。

4.逻辑分页代码实现;

导入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>

注意版本依赖不然会使循环 报错