springboot 分页查询参数_Spring Boot + PageHelper 实现分页,总结得很全了!

本文详细介绍了如何在Spring Boot项目中结合MyBatis和PageHelper实现分页查询,包括基本使用和进阶技巧。通过PageHelper的PageInfo和PageHelper.startPage()方法,实现了分页功能。此外,还探讨了PageHelper的源码分析和性能优化,强调了分页参数和业务参数的分离,以提高开发效率和接口规范。
摘要由CSDN通过智能技术生成

本文来自作者 "臣不贰" 投稿。

一. 开发准备

1. 开发工具

IntelliJ IDEA 2020.2.3

2. 开发环境

Red Hat Open JDK 8u256

Apache Maven 3.6.3

3. 开发依赖

SpringBoot

org.springframework.boot

spring-boot-starter-web

MyBatis

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.3

PageHelper

com.github.pagehelper

pagehelper-spring-boot-starter

1.3.0

二. 技术文档

1. 基于SpringBoot

2. 基于MyBatis

3. 集成PageHelper

三. 应用讲解

1. 基本使用

在实际项目运用中,PageHelper的使用非常便利快捷,仅通过PageInfo + PageHelper两个类,就足以完成分页功能,然而往往这种最简单的集成使用方式,却在很多实际应用场景中,没有得到充分的开发利用.

接下来是我们最常见的使用方式:

public PageInfo page(RequestParamDto param) {

PageHelper.startPage(param.getPageNum(), param.getPageSize());

List list = mapper.selectManySelective(param);

PageInfo pageInfo = (PageInfo)list;

return pageInfo;

}

在某种程度上而言,上述写法的确是符合PageHelper的使用规范 :

在集合查询前使用`PageHelper.startPage(pageNum,pageSize)`,并且*中间不能穿插执行其他SQL*

但是作为Developer的我们,往往只有在追求完美和极致的道路上才能够寻得突破和机遇;

以下是合理且规范的基本使用:

public PageInfo page(RequestParamDto param) {

return PageHelper.startPage(param.getPageNum(), param.getPageSize())

.doSelectPageInfo(() -> list(param))

}

public List list(RequestParamDto param) {

return mapper.selectManySelective(param);

}

FAQ

1. 为什么要重新声明一个list函数?

答: 往往在很多实际业务应用场景中, 分页查询是基于大数据量的表格展示需求来进行的.

然而很多时候,譬如: 内部服务的互相调用,OpenAPI的提供.

甚至在某些前后端分离联调的业务场景中,是同样需要一个非分页集合查询接口来提供服务的.

另外,暂时以上因素抛开不谈,我们可以根据上述写法来定义和规范某些东西

譬如: 分页和集合查询的分离和解耦(解耦详情请看进阶使用),

分页请求的请求和响应与实际业务参数的分离(详情请看进阶使用)等等...

2. doSelectPageInfo是什么?

答: doSelectPageInfo是PageHelper.startPage()函数返回的默认Page实例内置的函数,该函数可以用以Lambda的形式通过额外的Function来进行查询而不需要再进行多余的PageInfo与List转换,而doSelectPageInfo的参数则是PageHelper内置的Function(ISelect)接口用以达到转换PageInfo的目的

3. 这种写法的代码量看起来不少反多?

答: 正如同①中所描述的,就代码量而言,确实没有更进一步的简化,但是再某些业务场景中,在已具有list函数接口的情况下,是一种更直观的优化(优化详情请看进阶使用)

2. 进阶使用

先看代码,再谈解析:

import com.github.pagehelper.PageHelper;

import com.github.pagehelper.PageInfo;

import java.util.List;

/**

* @param 泛型request

* @param 泛型response

*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值