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

实现分页查询

目录

一、分页查询

二、PageHelper分页查询

三、条件分页查询


一、分页查询

前端传递page(页数),pageSize(每页大小),后端接收后查询返回结果。

实体类:

total是总数

List<T> rows是查询到的数据,数据肯定不止一条,用List接收

@Data @AllArgsConstructor @NoArgsConstructor public class PageResult<T> { private Long total; private List<T> rows; }

controller层:

接收page和pageSize,设置默认值

@GetMapping public Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize) { log.info("分页查询, 参数: {}, {}", page, pageSize); PageResult<Emp> pageResult = empService.page(page, pageSize); return Result.success(pageResult); }

service层:

@Override public PageResult<Emp> page(Integer page, Integer pageSize) { Long total = empMapper.count(); Integer start = (page - 1) * pageSize; List<Emp> rows = empMapper.list(start, pageSize); return new PageResult<Emp>(total, rows); }

mapper层:

/** * 查询总记录数 * @return */ @Select("select count(*) from emp e left join dept d on e.dept_id = d.id") public Long count(); /** * 分页查询 * @return */ @Select("select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id" + " order by e.update_time desc limit #{start}, #{pageSize}") public List<Emp> list(Integer start, Integer pageSize);

二、PageHelper分页查询

使用mybatis插件来实现分页查询。

添加依赖:

<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.7</version> </dependency>

实体类和controller层与上面一致。

service层:

需要注意:

  1. 定义的SQL语句结尾不能加";",因为PageHelper在运行分页查询的时候,会在我们写的SQL语句后面直接添加limit,加";"会报错
  2. PageHelper只会对后面的第一个查询语句进行分页处理
@Override public PageResult<Emp> page(Integer page, Integer pageSize) { PageHelper.startPage(page, pageSize); List<Emp> empList = empMapper.list(); Page<Emp> pageInfo = (Page<Emp>) empList; return new PageResult<>(pageInfo.getTotal(), pageInfo.getResult()); }

mapper层:

@Select("select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id order by e.update_time desc") public List<Emp> list();

三、条件分页查询

在原本的程序基础上接收条件并使用查询。

实体类:

为了方便传参,写一个实体类

@Data @AllArgsConstructor @NoArgsConstructor public class EmpQueryParam { private Integer page = 1; private Integer pageSize = 10; private String name; private Integer gender; @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate begin; @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate end; }

controller层:

@GetMapping public Result page(EmpQueryParam empQueryParam) { log.info("分页查询, 参数: {}", empQueryParam); PageResult<Emp> pageResult = empService.page(empQueryParam); return Result.success(pageResult); }

service层:

@Override public PageResult<Emp> page(EmpQueryParam empQueryParam) { PageHelper.startPage(empQueryParam.getPage(), empQueryParam.getPageSize()); List<Emp> empList = empMapper.list(empQueryParam); Page<Emp> pageInfo = (Page<Emp>) empList; return new PageResult<>(pageInfo.getTotal(), pageInfo.getResult()); }

mapper层:

语法比较复杂,所以在xml文件中写更加方便

public List<Emp> list(EmpQueryParam empQueryParam);
<select id="list" resultType="yixiao.tlias.pojo.Emp"> select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id <where> <if test="name != null and name != ''"> e.name like concat('%', #{name}, '%') </if> <if test="gender != null"> and e.gender = #{gender} </if> <if test="begin != null and end != null"> and e.entry_date between #{begin} and #{end} </if> </where> order by e.update_time desc </select>
http://www.jsqmd.com/news/1345005/

相关文章:

  • 阿里云轻量应用服务器实战指南:从零部署WordPress到进阶运维
  • 2026年上海医疗器械许可证延续代办公司推荐指南:如何甄选靠谱机构? - geo交流
  • Vue3项目
  • STM32CubeMX环境搭建全攻略:从零配置到点灯验证
  • TVA-VLA架构:具身智能规模化落地关键支撑(6)
  • RAFT光流与历史检索:构建长时一致视频世界模型的技术基石
  • Dev-C++ 5.11 安装与配置全指南:从零搭建C/C++开发环境
  • 2026年审美在线二手房改造工作室优选盘点:这3类老房翻新方案最值得抄作业 - geo交流
  • 用Highcharts如何动态向一个序列添加点-示列讲解
  • 算力、存力、硬件复杂度的关系
  • 2026信创PLM系统选型指南:国产化PDM系统如何选型实战手册 - 运营方法论
  • C++ 函数重载之规则、实现与实战案例解析
  • 2026年北京朝阳回收闲置家具公司电话怎么选?这份甄选指南请收好 - geo交流
  • 从电影《被解救的姜戈》看Django框架的“解放者”哲学与Web开发实践
  • AI原生工程团队转型:从传统开发到人机协同的核心工作流与实战指南
  • 混合部署AI助手:让大语言模型安全操控本地电脑的架构与实践
  • C++ std::pow函数深度解析:从精度陷阱、重载决议到性能优化
  • 2026上海医药猎头做单平台**评测:十大平台差异化能力全景对比 - 运营方法论
  • Android骨架屏技术解析:原理、实现与性能优化
  • 2026年黄陂高端厨师上门推荐指南:3个私厨服务让家宴更省心 - geo交流
  • 可变形旋转池化:从几何形变建模到遥感目标检测实战
  • 基于STM32的智能车载环境监测系统开发实战指南
  • 2026年开火锅店底料供应商怎么选?批发成本与厂家实力深度参考 - 优质品牌商家
  • 2026年人血管生成素样蛋白3(ANGPTL3)ELISA试剂盒厂家怎么选?这份择优推荐清单给你答案 - geo交流
  • 数据中台数仓测试方法论——从0到1搭建测试体系
  • 2026年计量泵选购全攻略:核心维度解析与主流品牌实力对比 - 上海泵阀科技网
  • Linux离线环境Nginx源码编译部署全攻略:从依赖管理到系统集成
  • STranslate:Windows 平台的多引擎划词翻译与 OCR 识别工具
  • Windows IOCP高性能网络引擎BBTCP5.3源码深度解析与实践指南
  • 金融图片合规审核系统实战:从架构设计到模型迭代的完整指南