前言
大型项目的数据体量很大,在前端界面展示时为保障展示效果,会要求接口快速返回,这时候后端会选择分页获取数据,只传递要查询的页码数据。这就避免了大多问题,达到快速返回的效果。
常用的分页有2种:
① MyBatis 分页插件:PageHelper。这个插件很常用,支持多数据库分页,无需修改SQL语句即可实现分页功能。
注意:这个插件的功能相当于在你代码中的第一个 SQL 语句的后面加上 LIMIT [offset], [limit] 子句,例如 LIMIT 20, 10 ,表示从21条记录开始,获取10条记录。
这个插件 只会在你的第一条语句后面添加子句 ,如果代码后面还存在其他的 SQL 则会不生效。
如果你使用这个插件获取 UserId 列表,并用该列表进行后续操作,要注意返回的 顺序问题 。
② PageInfo 类:这是手动分页,适合数据量小的情况,因为需要预先加载所有数据,例如预先加载所有 UserId ,对 UserId 进行划分数量,根据请求的分页参数查询处在不同数量位置的 UserId 。
本文只介绍分页插件 PageHelper ,包括使用的依赖,创建方式,代码示例和验证结果展示等。
分页插件 PageHelper 的依赖导入方式
1. 使用pagehelper 包
添加pagehelper插件的依赖,并还需要定义一个 config
文件。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.3</version>
</dependency>
package com.wen.config;
import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class MyBatisConfig {
// 设置相关的参数信息,下面有对参数的详细解释
@Bean
public PageHelper pageHelper() {
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("dialect", "Mysql");
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
pageHelper.setProperties(properties);
return pageHelper;
}
}
// Properties 中需设置的属性值:解释
// 1. "dialect", "Mysql":不同数据库的SQL语句不同,这里指定了数据库语言为Mysql
// 2. "offsetAsPageNum", "true":这个属性通常用于指定是否将传入的 offset 参数当作 pageNum 页码使用。
// ① 设置为 true,意味着如果分页查询时传递了offset偏移量,PageHelper会将其视为页码来处理。
// ② 非必需,因为 PageHelper 默认就是使用页码 pageNum 和每页记录数 pageSize 来进行分页的。
// 3. "rowBoundsWithCount", "true":该属性用于指定是否进行 count 查询以获取总记录数。
// 在分页查询时,需要知道总记录数,它可以让你在前端展示总页数或总记录数。
// 设置为 true 表示 PageHelper 在执行分页查询时,会先执行一个 count 查询来获取总记录数。