当前位置: 首页 > 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.lryc.cn/news/603594.html

相关文章:

  • JavaWeb 入门:JavaScript 基础与实战详解(Java 开发者视角)
  • 一个人开发一个App(数据库)
  • vue3组件通信的几种方法,详解
  • ​第七篇:Python数据库编程与ORM实践
  • Vue 2.0响应式原理深度解析
  • 【C++算法】82.BFS解决FloodFill算法_被围绕的区域
  • 基于SpringBoot和Leaflet集成在线天气服务的区县当前天气WebGIS实战
  • 【CSS】盒子类型
  • Linux网络:多路转接 select
  • 7月29号打卡
  • 个人健康管理小程序(消息订阅、Echarts图形化分析)
  • C# CAN通信上位机系统设计与实现
  • Hyperchain安全与隐私机制详解
  • Prometheus + Grafana + Micrometer 监控方案详解
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(三)
  • 【数据可视化-74】电信用户流失数据可视化分析:Python + Pyecharts 炫酷大屏(含完整的数据,代码)
  • Visual Studio的妙用
  • 【22】C# 窗体应用WinForm ——定时器Timer属性、方法、实例应用,定时切换画面
  • 从github同步新项目的两次挫折-2025.7.29
  • 工业补贴携手华为云,重塑汽车零部件供应链管理新趋势
  • 设计模式:状态模式 State
  • Ragflow 文档处理深度解析:从解析到存储的完整流程
  • Go语言新手村:轻松理解变量、常量和枚举用法
  • [工具类] 分片上传下载,MD5校验
  • 【Spring Boot 快速入门】三、分层解耦
  • 飞算JavaAI:数据库插件安装与表结构设计的智能革命
  • 室内环境具身智能语义建图研究综述:进展、挑战与未来方向
  • SpringBoot整合RocketMQ(阿里云ONS)
  • GC8870 3.6A 刷式直流电机驱动器深度解析——规格、应用与实测数据全指南
  • 网络安全的变革:深入洞察 Web3 与传统网络模型