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

MyBatis实现分页查询-苍穹外卖笔记

首先分页查询的原理是SQL的limit关键字。

LIMIT 子句用于限制 SQL 查询返回的记录数。它接受一个或两个整数参数,第一个参数表示偏移量,第二个参数表示返回的最大记录数。

我们完全可以使用前端传给我们的page,pageSize,自己去计算limit的参数,但是这样效率很慢。

所以有了分页插件pageHelper.

1 首先引入pageHeper的Maven坐标

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
2 在Controller层接受分页请求

 主要参数是Page(第几页),PageSize(一页的大小)

 @GetMapping("/page")public Result<PageResult> Page(EmployeePageQueryDTO employeePageQueryDTO){PageResult pageResult=employeeService.PageQuery(employeePageQueryDTO);return Result.success(pageResult);}

  这里参数用一个对象接收

3 Service层逻辑处理

        PageHepler可以帮助我们计算limit的参数,并同时帮我们把limit加在普通的select语句中,变成分页查询。这样一来执行分页,我们只需要在Mapper配置普通的查询语句,由PageHelper帮我们补上limit所需语句。
page继承了ArrayList,所以它可以接收查询的返回结果,多个数据本身就会返回一个集合。
如果不想用Page,直接使用ArrayList也是可以的,只不过Page有更多的功能,所以pageHeper和Page不是一定要一起使用.看自己的需求选择。

/*** 员工分页查询* @param employeePageQueryDTO* @return*/@Overridepublic PageResult PageQuery(EmployeePageQueryDTO employeePageQueryDTO) {// PageHepler可以帮助我们计算limit的参数,并同时帮我们把limit加在普通的select语句中,变成条件查询。PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());//执行分页,我们只需要在Mapper配置普通的查询语句,由上面的帮我们补上limit所需语句。//page继承了ArrayList,所以它可以接收查询的返回结果,多个数据本身就会返回一个集合。//如果不想用Page,直接使用ArrayList也是可以的,只不过Page有更多的功能Page<Employee> pages=employeeMapper.PageQuery(employeePageQueryDTO);PageResult pageResult=new PageResult();pageResult.setRecords(pages.getResult());return pageResult;}

4 Mapper层的SQL配置

Mapper接口

 /*** 员工分页查询* @param employeePageQueryDTO* @return*/Page<Employee> PageQuery(EmployeePageQueryDTO employeePageQueryDTO);

Mapper对应SQL

<select id="PageQuery" resultType="Employee">
select * from employee
<where><if test="name!=null and name!=''">name like concat("%",#{name},"%")</if>
</where></select>

很明显这里只是一个普通的查询,并没有limit语句,这正是pageHelper的作用,帮我们计算好参数,然后加入SQL语句。

http://www.xdnf.cn/news/15274.html

相关文章:

  • openGauss数据库管理实战指南——基本常用操作总结
  • Sentry 集成
  • 【王树森推荐系统】行为序列02:DIN模型(注意力机制)
  • 【LeetCode453.最小操作次数使数组元素相等】
  • 深入解析C#接口实现的两种核心技术:派生继承 vs 显式实现
  • 论文阅读:HybridTrack: A Hybrid Approach for Robust Multi-Object Tracking
  • 前端开发中的资源缓存详解
  • 面试现场:奇哥扮猪吃老虎,RocketMQ高级原理吊打面试官
  • Spring Ai Alibaba Gateway 实现存量应用转 MCP 工具
  • AI领域的黄埔军校:OpenAI是新一代的PayPal Mafia,门生故吏遍天下
  • 浅谈 Python 中的 yield——生成器对象与函数调用的区别
  • 力扣 hot100 Day42
  • 若依前后端分离Vue3版本接入阿里云OSS
  • 20250712-1-Kubernetes 监控与日志管理-K8s日志管理与维护_笔记
  • Softmax回归(多类逻辑回归)原理及完整代码示例实现
  • 一个基于数据库的分布式锁:乐观与悲观实现
  • 贪心算法题解——跳跃游戏【LeetCode】
  • Windows 用户账户控制(UAC)绕过漏洞
  • python学习笔记【1】对字符串的处理
  • 《Java Web程序设计》实验报告六 JSP+JDBC+MySQL实现登录注册
  • [vroom] 启发式算法(路径评估) | 局部搜索优化引擎 | 解决方案输出解析
  • 自助KTV选址指南与优化策略
  • 系统分析师-计算机系统-输入输出系统
  • 十三、K8s自定义资源Operator
  • 仅27M参数!SamOutVX轻量级语言模型刷新认知,小身材也有大智慧
  • 2025.7.12总结
  • Vue 项目打包部署还存在问题?你知道怎么做吧?
  • JVM回收
  • 内部类 示例
  • 【java安全】springBoot配置文件属性名自定义及属性值加密