JavaWeb(苍穹外卖)--学习笔记15(分页查询PageHelper)

前言

终于开始学习做项目了,本篇文章是学习B站黑马程序员苍穹外卖的学习笔记📑。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,就进入到了用户端微信小程序的开发,这篇文章来看看分页查询,其实在项目中分页查询的实现用的都是PageHelper实现的,我为了复习把原始方法基础实现也写写(●’◡’●),把两者两相对比方便理解

下面还是以一个简单的功能来看看分页查询

✌️先看看接口文档(之前一直没看过接口文档,接口文档开发是一定要会看的),它不会直接告诉你要进行分页查询,而是要看请求参数

在这里插入图片描述

一定要注意请求方法,请求路径,请求参数,返回值,根据这些来写controller层代码。

🙌想进行分页查询,我们还要了解数据库语言,使用LIMIT关键字,格式为:limit 开始索引 每页显示的条数。
第一页,显示10条数据:

select * from emp  limit 0,10;

原始方式(后端代码实现)

还是先看一下前端的页面了解我们要实现的功能:
在这里插入图片描述
这里以一个员工管理分页查询员工的功能为例子

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageResult {private Long total; //总记录数private List rows; //当前页数据列表
}

1). EmpController

@Slf4j
@RequestMapping("/emps")
@RestController
public class EmpController {@Autowiredprivate EmpService empService;@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page ,@RequestParam(defaultValue = "10") Integer pageSize){log.info("查询员工信息, page={}, pageSize={}", page, pageSize);PageResult pageResult = empService.page(page, pageSize);return Result.success(pageBean);}}

2). EmpService

public interface EmpService {/*** 分页查询* @param page 页码* @param pageSize 每页记录数*/PageResult page(Integer page, Integer pageSize);
}

3). EmpServiceImpl

@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic PageResult page(Integer page, Integer pageSize) {//1. 获取总记录数Long total = empMapper.count();//2. 获取结果列表Integer start = (page - 1) * pageSize;List<Emp> empList = empMapper.list(start, pageSize);//3. 封装结果return new PageResult(total, empList);}
}

4). EmpMapper


@Mapper
public interface EmpMapper {/*** 查询总记录数*/@Select("select count(*) from emp e left join dept d on e.dept_id = d.id ")public Long count();/*** 查询所有的员工及其对应的部门名称*/@Select("select e.*, d.name deptName from emp as e left join dept as d on e.dept_id = d.id limit #{start}, #{pageSize}")public List<Emp> list(Integer start , Integer pageSize);}

PageHelper分页插件

PageHelper是第三方提供的Mybatis框架中的一款功能强大、方便易用的分页插件,支持任何形式的单标、多表的分页查询。

1). 在pom.xml引入依赖

<!--分页插件PageHelper-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version>
</dependency>

2). EmpMapper
PageHelper实现分页查询之后,只需要编写一条SQL语句,而且不需要考虑分页操作,就是一条正常的查询语句。

/*** 查询所有的员工及其对应的部门名称*/
@Select("select e.*, d.name deptName from emp as e left join dept as d on e.dept_id = d.id")public List<Emp> list();

3). EmpServiceImpl

@Override
public PageResult page(Integer page, Integer pageSize) {//1. 设置分页参数PageHelper.startPage(page,pageSize);//无需手动计算起始索引,直接告诉PageHelper需要查询那一页的数据,每页展示多少条记录即可。//2. 执行查询List<Emp> empList = empMapper.list();Page<Emp> p = (Page<Emp>) empList;//将查询到的总记录数,与数据列表封装到了 Page<Emp> 对象中。//3. 封装结果return new PageResult(p.getTotal(), p.getResult());
}
  • PageHelper实现分页查询时,SQL语句的结尾一定一定一定不要加分号;
  • PageHelper只会对紧跟在其后的第一条SQL语句进行分页处理。

✨我们可以对比一下,其实使用PageHelper分页插件进行分页是对原始方式的改善
在这里插入图片描述Mapper接口层:

  • 原始的分页查询功能中,我们需要在Mapper接口中定义两条SQL语句。
  • PageHelper实现分页查询之后,只需要编写一条SQL语句,而且不需要考虑分页操作,就是一条正常的查询语句。

Service层:

  • 需要根据页码、每页展示记录数,手动的计算起始索引。
  • 无需手动计算起始索引,直接告诉PageHelper需要查询那一页的数据,每页展示多少条记录即可。

小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)

…。。。。。。。。。。。…请添加图片描述

…。。。。。。。。。。。…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91499.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金融专题|某跨境支付机构:以榫卯企业云平台 VPC 功能保障业务主体安全

作者&#xff1a;SmartX 金融团队 金融机构在信息化建设时面临诸多数据合规要求&#xff0c;例如&#xff1a;不同业务区域之间互相隔离、数据库仅能由关联的应用服务器访问、仅有特定的服务器允许被外网访问等。对此&#xff0c;某跨境支付机构以 SmartX 榫卯企业云平台构建私…

Win10下python环境变量呼出微软应用商店

以下是三种彻底解决 Windows 10 的 CMD 中运行 python 命令弹出应用商店问题的方法​​方法一&#xff1a;调整环境变量优先级​-或者直接删除微软应用商店的环境变量%USERPROFILE%\AppData\Local\Microsoft\WindowsApp​​​操作步骤​​打开系统环境变量设置&#xff08;右键…

字节跳动“扣子”(Coze)开源:AI智能体生态的技术革命

&#xff08;以下借助 DeepSeek-R1 辅助整理&#xff09; 在2025年7月26日的深夜&#xff0c;GitHub上悄然出现的两个仓库——Coze Studio和Coze Loop&#xff0c;在48小时内狂揽超过9,000颗Star。字节跳动以Apache 2.0许可证将自家AI智能体平台的核心技术彻底开源。 “当所有人…

Camx-usecase ID和pipeline的匹配源码解读

组件关系整体流程&#xff1a;camxhal3.cpp:704 open()camxhal3.cpp:1423 configure_streams()chxextensionmodule.cpp:2810 InitializeOverrideSessionchxusecaseutils.cpp:850 GetMatchingUsecase()chxadvancedcamerausecase.cpp:4729 Initialize()chxadvancedcamerausecase.…

日志管理进入「对话式」时代:日志易MCP Server落地实录

01 背景&#xff1a;MCP协议介绍在AI蓬勃发展的当下&#xff0c;大型语言模型&#xff08;LLM&#xff09;虽展现出强大潜力&#xff0c;却受困于与外部资源连接的难题。数据分散、接口繁杂&#xff0c;致使AI模型难以灵活对接本地资源与远程服务&#xff0c;极大限制了其响应质…

django-3模型操作

from django.db import modelsclass Book(models.Model):title models.CharField(max_length200) # 书名author models.CharField(max_length100) # 作者publish_date models.DateField() # 出版日期price models.DecimalField(max_digits10, decimal_places2) # 价格s…

【绘制图像轮廓】——图像预处理(OpenCV)

目录 1 什么是轮廓 2 寻找轮廓 2.1 mode参数 2.2 method参数 3 绘制轮廓 1 什么是轮廓 轮廓是一系列相连的点组成的曲线&#xff0c;代表了物体的基本外形。轮廓是连续的&#xff0c;边缘不一定连续。轮廓是一个闭合的、封闭的形状。 轮廓的作用&#xff1a; 形状分析 目…

嵌入式 Linux 深度解析:架构、原理与工程实践(增强版)

嵌入式 Linux 深度解析&#xff1a;架构、原理与工程实践&#xff08;增强版&#xff09; 目录嵌入式 Linux 深度解析&#xff1a;架构、原理与工程实践&#xff08;增强版&#xff09;第一章 嵌入式 Linux 基础概念1.1 定义与核心特征1.2 典型架构栈深度解析第二章 Linux 文件…

xcode swift项目运行、连接真机运行报错,引入文件夹失败

最近乱七八糟解决了很多报错&#xff0c;看着记录点吧 xcode版本&#xff1a;16 failed to emit precompiled header ‘/Users/yuqing/Library/Developer/Xcode/DerivedData/cloudspace-ios-ejldldcfhouqnretchuzoewmsqkg/Build/Intermediates.noindex/PrecompiledHeaders/spic…

[python][selenium] Web UI自动化8种页面元素定位方式

测试工程师必备&#xff01;Selenium自动化测试全攻略 | 手写POM框架数据驱动&#xff0c;轻松搞定UI自动化&#xff01;简单的加个前置知识&#xff1a; 第一&#xff1a;webdriver.Chrome()这句话&#xff0c;通过WebDriver的构造方法&#xff0c;拿到浏览器驱动的对象&…

丝杆支撑座在电子装配中的关键作用

丝杆支撑座是电子装配过程中不可或缺的组件&#xff0c;主要用于支撑和固定丝杆&#xff0c;确保其稳定性和精度。在高速、高精度装配场景中&#xff0c;丝杆支撑座的作用尤为突出。稳定性与精度保障&#xff1a;丝杆支撑座采用高品质钢材制作&#xff0c;具有高刚性和高强度&a…

微信小程序页面间通信的实现方式

微信小程序中页面间的通信是指不同页面之间的数据传递、状态同步或交互操作&#xff0c;常见于多页面协作场景。根据通信方向和场景不同&#xff0c;主要有以下几种实现方式&#xff1a;一、基于页面跳转的参数传递1. 正向传递&#xff08;A页面到B页面&#xff09;通过URL参数…

uniapp开发微信小程序(新旧版本对比:授权手机号登录、授权头像和昵称)

目录标题授权手机号新旧版本核心差异对比强制使用新版的情况代码实现方案特殊处理逻辑企业账号要求最佳实践建议授权头像和昵称新旧版本核心差异对比强制使用新版的情况代码实现方案最佳实践建议注意事项授权手机号 新旧版本核心差异对比 触发方式 旧版&#xff08;2023年前&…

Java函数式编程之【Stream终止操作】【下】【三】【收集操作collect()与分组分区】【下游收集器】

分组收集器groupingBy()&#xff1a;groupingBy()收集器用于按条件对元素象进行分组&#xff0c;并将结果存储在Map实例中。其作用与数据库的SQL语句的group by的用法有异曲同工之妙。 分区收集器partitioningBy()&#xff1a;partitioningBy()可以看作是分组groupingBy()的特殊…

python设计模式-工厂模式

工厂模式的核心思想&#xff1a;封装对象创建过程、解耦对象使用与创建 。示例代码&#xff1a;from enum import Enum# 基类&#xff1a;人类 class Person:species Homo sapiensdef __init__(self, name):self.name namedef __str__(self):return f"{self.__class__._…

Rust:anyhow::Result 与其他 Result 类型转换

当函数返回的不是 anyhow::Result 而是其他 Result 类型时&#xff08;如 std::io::Result、serde_json::Result 或自定义 Result&#xff09;&#xff0c;可通过以下方法统一处理错误类型&#xff0c;确保与 anyhow 兼容或实现错误传播&#xff1a;&#x1f6e0;️ 一、错误类…

PLC-梯形图编程

1.位运算,比较 如&#xff1a;>,<,, 2.定时器 生成脉冲TP&#xff0c;常开触点闭合触发&#xff0c;赋值10秒时长&#xff0c;PT配置参数&#xff0c;ET运行时已PT计时 接通延时TON&#xff0c;常开触点闭合触发&#xff0c;延时10秒后赋值 关断延时TOF&#xff0c;常开触…

LLM学习笔记5——InstructGPT

系列文章目录 参考文献 参考文献 参考文献 参考视频 文章目录系列文章目录前言目前大模型不同的技术流派与框架路线&#xff1a;1. ​​BERT&#xff1a;Encoder-only架构​​​​1&#xff09; 架构特点​​​​2&#xff09; 训练目标​​3&#xff09; ​​​​应用场景2. …

热能小车cad【12张】三维图+设计说明书

摘要 无碳小车来自全国大学生工程能力训练大赛题目&#xff0c;根据“节能减排&#xff0c;绿色出行”的环保理念&#xff0c;提出了一种基于热力驱动的具有方向自动控制的无碳小车。 本文设计的无碳小车主要是将热能转化成机械能&#xff0c;用来驱动小车前进的装置&#xff0…

云原生 DevOps 实战之Jenkins+Gitee+Harbor+Kubernetes 构建自动化部署体系

技术背景​ 在云原生生态中&#xff0c;工具链的选择直接决定 CI/CD 流水线的效率与稳定性。本次方案的工具组合并非偶然&#xff0c;而是基于各组件的核心优势与生态适配性&#xff1a;​ 代码管理层&#xff1a;Gitee 作为国内主流的代码托管平台&#xff0c;支持 Git 分布…