当前位置: 首页 > news >正文

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.dtcms.com/a/303915.html

相关文章:

  • Unity_UI_NGUI_DrawCall
  • Mac安装Navicat步骤Navicat Premium for Mac v17.1.9【亲测】
  • 【腾讯云】EdgeOne网站安全防护的配置方法 防范盗刷流量 附恶意IP和UA黑名单
  • 学习网址备份(二)
  • Linux 启动流程、密码破解、引导修复完全手册
  • 【智能协同云图库】智能协同云图库第八弹:基于阿里云百炼大模型—实现 AI 扩图功能
  • haproxy应用详解
  • 创建型设计模式-工厂方法模式和抽象工厂方法模式
  • 云端文档管理新纪元:Paperless-ngx与cpolar打造的无边界文件生态
  • Ext JS极速项目之 Coworkee
  • 在WSL中配置VS Code C++开发环境完整教程
  • Java抽Oracle数据时编码问题
  • 百元级工业级核心板:明远智睿×瑞萨V2H,开启AIoT开发新纪元
  • 论文阅读:LMM-Det: Make Large Multimodal Models Excel in Object Detection
  • 从0到1学PHP(三):PHP 流程控制:掌控程序的走向
  • 解析hive sql——将别名表、字段转化为指示表字段
  • 算法思维进阶 力扣 375.猜数字大小 II 暴力递归 记忆化搜索 DFS C++详细算法解析 每日一题
  • 详细说明零拷贝
  • LeetCode 1616.分割两个字符串得到回文串
  • 使用鼠标在Canvas上绘制矩形
  • 【dropdown组件填坑指南】鼠标从触发元素到下拉框中间间隙时,下拉框消失,怎么解决?
  • 前后端分离的项目,有一个计算的功能,是前端计算还是后端计算
  • C/C++离线环境安装(VSCode + MinGW)
  • leetcode热题——螺旋矩阵
  • JAVA中集合的遍历方式
  • Python OpenCV图像增强:高通滤波与浮雕特效实战指南
  • SAP-ABAP:Excel 文件内容解析到 ABAP 内表函数ALSM_EXCEL_TO_INTERNAL_TABLE运用详解
  • 记一次生产环境排查OOM问题,byte[]数组超多
  • 自动调优 vLLM 服务器参数(实战指南)
  • ArkTS懒加载LazyForEach的基本使用