某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 + JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。
相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PDe_7uIg?pwd=x548
提取码:x548
文章目录
- 1.需求分析
- 2.代码开发
- 2.1 执行流程分析
- 2.2 具体实现
- 3.功能测试
1.需求分析
系统中的员工数量很多的时候,如果在一个页面中将所有员工全部展示出来,会显得比较乱,也不便于查看。因此,一般的系统都会以分页的方式来展示列表数据。
2.代码开发
2.1 执行流程分析
在正式开发之前,我们先梳理一下程序的执行流程:
- 客户端发送 ajax 请求,将分页查询参数(page、pageSize、name)提交到服务器;
- 服务端 Controller 接收客户端提交的数据并调用 Service 进行数据库查询;
- Service 调用 Mapper 操作数据库,查询分页数据;
- Controller 将查询到的分页数据响应给客户端;
- 客户端收到分页数据并通过 Element UI 的 Table 组件进行展示。
刷新一下【员工管理】页面,我们就可以看到前端具体发送的请求 URL 如下:
可见,在发送 GET 请求 /employee/page 的时候携带了分页的参数,当前页(page)为第一页,每页大小(pageSize)为 10。
那么上面提到的 name 参数有在哪儿呢?其实我们的员工管理页面中还支持基于员工姓名的模糊查询,当我们使用该功能的时候就会在上面的基础上再传一个 name 参数:
OK,基于上述分析我们可以基本确定如下几个点:
- 需要处理一个 /employee/page 请求;
- 该请求会携带 page、pageSize、name 三个参数用于分页查询;
2.2 具体实现
由于本项目使用的是 MyBatis Plus,因此我们不需要单独引入如 pagehelper-spring-boot-starter 的 Starter 启动器依赖。因为 MyBatis Plus 的 BaseMapper<T>
中带有分页查询方法,但是需要配置分页插件才能充分发挥其功能。
在 config
包下新建 MybatisPlusConfig
配置类用于配置 MyBatis Plus 的分页插件,完整代码如下:
package cn.javgo.reggie_take_out.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
@SpringBootConfiguration
public class MyBatisPlusConfig {
/**
* 配置 MyBatis Plus 拦截器,用于分页查询
* @return MyBatis Plus 拦截器
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
// 创建 MyBatis Plus 拦截器
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
// 添加分页拦截器
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
// 返回拦截器
return mybatisPlusInterceptor;
}
}
然后在 EmployeeController
类中处理对应的请求,相关部分代码如下:
@RestController
@RequestMapping("/employee")
public class EmployeeController {
/**
* 处理分页查询员工请求
* @param page 当前页码
* @param pageSize 每页显示的记录数
* @param name 员工姓名
* @return 响应对象
*/
@GetMapping("/page")
public R<Page<Employee>> page(int page,int pageSize,String name){
log.info("page = {},pageSize = {},name = {}" ,page,pageSize,name);
// 1.创建 Page 对象
Page<Employee> pageInfo = new Page<>(page, pageSize);
// 2.构造条件查询对象
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
// 设置模糊查询条件(根据姓名进行模糊查询)
queryWrapper.like(StringUtils.isNotEmpty(name),"name",name);
// 根据更新时间降序排序
queryWrapper.orderByDesc("update_time");
// 3.执行分页查询
employeeService.page(pageInfo,queryWrapper);
// 4.返回结果
return R.success(pageInfo);
}
// 省略其他代码
}
3.功能测试
重启应用,登陆成功后便会自动按照分页条件查询出对应的员工信息:
当然,由于我们的数据量比较小所以看不出分页效果,因为前端默认传递的分页参数是 page=1 和 pageSize=10,对应在 static/backend/page/food/list.html 中的如下位置,可根据需要进行合理修改(当然,后端也可以自行设置而不采取前端的逻辑):