一. 开发准备
1. 开发工具
-
IntelliJ IDEA 2020.2.3
2. 开发环境
-
Red Hat Open JDK 8u256
-
Apache Maven 3.6.3
3. 开发依赖
SpringBoot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
MyBatis
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
PageHelper
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
二. 技术文档
1. 基于SpringBoot
-
SpringBoot 官方文档 https://spring.io/projects/spring-boot
-
SpringBoot 中文社区 https://springboot.io/
2. 基于MyBatis
-
MyBatis 官方文档 https://mybatis.org/mybatis-3/zh/index.html
3. 集成PageHelper
-
PageHelper 开源仓库 https://github.com/pagehelper/Mybatis-PageHelper
三. 应用讲解
1. 基本使用
在实际项目运用中,PageHelper的使用非常便利快捷,仅通过PageInfo + PageHelper两个类,就足以完成分页功能,然而往往这种最简单的集成使用方式,却在很多实际应用场景中,没有得到充分的开发利用.
接下来是我们最常见的使用方式:
public PageInfo<ResponseEntityDto> page(RequestParamDto param) {
PageHelper.startPage(param.getPageNum(), param.getPageSize());
List<ResoinseEntityDto> list = mapper.selectManySelective(param);
PageInfo<ResponseEntityDto> pageInfo = (PageInfo<ResponseEntityDto>)list;
return pageInfo;
}
在某种程度上而言,上述写法的确是符合PageHelper的使用规范 :
在集合查询前使用PageHelper.startPage(pageNum,pageSize),并且中间不能穿插执行其他SQL
但是作为Developer的我们,往往只有在追求完美和极致的道路上才能够寻得突破和机遇;
以下是合理且规范的基本使用:
public PageInfo<ResponseEntityDto> page(RequestParamDto param) {
return PageHelper.startPage(param.getPageNum(), param.getPageSize())
.doSelectPageInfo(() -> list(param))
}
public List<ResponseEntityDto> list(RequestParamDto param) {
return mapper.selectManySelective(param);
}
FAQ
1. 为什么要重新声明一个list函数?
答: 往往在很多实际业务应用场景中, 分页查询是基于大数据量的表格展示需求来进行的.
然而很多时候,譬