JavaWeb Day03:Tlias 员工管理之分页查询
382 字
2 分钟
JavaWeb Day03:Tlias 员工管理之分页查询
代码结构
| 层 | 类/方法 | 锚点 |
|---|---|---|
| Controller | EmpController.page() | @GetMapping 无路径=匹配 /emps;@RequestParam(defaultValue = "1") 给 page/pageSize 默认值,URL 不带参也能跑 |
| Service | EmpServiceImpl.page() | 两步查询:count() 总记录数 + list((page-1)*pageSize, pageSize) 当页数据 |
| Mapper | EmpMapper.count() / list(start, pageSize) | 手写 LIMIT 物理分页:limit #{start},#{pageSize};left join dept 取 d.name deptName |
| POJO | PageResult<T> | 泛型分页封装(total + rows),@Data/@AllArgsConstructor/@NoArgsConstructor |
| POJO | Emp | 14 个字段;deptName 不在 emp 表,靠 left join + 驼峰映射填充 |
核心结论
- 分页本质:数据库物理分页(LIMIT 截断返回),不是查全量再内存截断。偏移量
(page-1)*pageSize是换算关键。 - PageResult 泛型的意义:
PageResult<Emp>让封装类复用于任何实体,换成PageResult<Dept>不用改封装类本身。 - left join 取部门名:员工表只存
dept_id,部门名通过left join dept+d.name deptName别名带回;map-underscore-to-camel-case已开启,别名与属性名一致即可直接映射。 - @RequestParam(defaultValue):未传参数时使用默认值而不报 400,是分页接口的标配。
MyBatis 分页的几种实现
手写 SQL 分页是把 limit #{start},#{pageSize} 直接写进映射语句,偏移量与每页条数由应用层算好传入。另一种做法是通过 MyBatis 拦截器配合动态代理,在 SQL 执行前拦截并重写语句,按数据库方言追加 limit 子句,PageHelper 采用的就是这种方式,例如把 select * from student 重写为 select t.* from (select * from student) t limit 0,10。还有基于 RowBounds 的结果集分页:先执行查询拿到完整结果集,再在内存中定位当页数据,数据量大时开销高。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
JavaWeb Day03:Tlias 员工管理之分页查询
https://ryuki.icu/posts/javaweb-day03/相关文章智能推荐
1
JavaWeb Day02:MyBatis XML 开发与 tlias 部门管理
JavaWebMyBatis XML 方式开发、tlias 部门管理三层 CRUD 实战与 SLF4J 日志配置。
2
JavaWeb Day01:SpringBoot 入门与 MyBatis 注解开发
JavaWebSpringBoot Web 快速入门、三层分层与 IoC/DI 解耦、原生 JDBC、MyBatis 注解开发与 MySQL 基础。
3
JavaWeb Day04:条件分页、事务新增与本地上传
JavaWeb条件查询改为 POJO 对象收参并以 PageHelper 分页;员工新增覆盖事务回滚、批量插入、主键回填、操作日志与本地上传
4
JavaWeb Day05:全局异常、AOP 日志与管理模块
JavaWeb全局异常处理器与 AOP 操作日志切面,以及班级管理、学员管理和报表统计的业务实现
5
JavaWeb Day07:项目部署与 Docker 基础
JavaWebDocker 镜像、容器、仓库与分层存储概念,常用命令、数据卷、Dockerfile 与 Compose,以及三容器项目部署链路
随机文章随机推荐





















