SpringBoot学习记录(四)之分页查询

SpringBoot学习记录(四)之分页查询

  • 一、业务需求
    • 1、基本信息
    • 2、请求参数
    • 3、相应数据
  • 二、传统方式分页
  • 三、使用PageHelper分页插件

一、业务需求

根据条件进行员工数据的条件分页查询
在这里插入图片描述

1、基本信息

请求路径: /emps
请求方式: GET
接口描述: 该接口用于员工列表数据的条件分页查询

2、请求参数

参数格式:queryString
参数说明:
在这里插入图片描述
请求数据样例:

/emps?name=张&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=10

3、相应数据

参数格式:application/json
参数说明:返回总记录数和查找到的数据列表

{
"code": 1,
"msg": "success",
"data": {"total": 2,"rows": [{"id": 1,"username": "jinyong","password": "123456","name": "金庸","gender": 1,"image": "https://web-framework.oss-cnhangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg","job": 2,"entrydate": "2015-01-01","deptId": 2,"createTime": "2022-09-01T23:06:30","updateTime": "2022-09-02T00:29:04"},{"id": 2,"username": "zhangwuji","password": "123456","name": "张无忌","gender": 1,"image": "https://web-framework.oss-cnhangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg","job": 2,"entrydate": "2015-01-01","deptId": 2,"createTime": "2022-09-01T23:06:30","updateTime": "2022-09-02T00:29:04"}]}}

二、传统方式分页

在SQL语句中直接使用limit进行分页。

由于要返回一个结果列表(List)和总记录数(int \ long),所以需要额外添加一个PageBean实体类来接收返回的结果。

pojo.PageBean

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageBean {public long total; //总记录数public List rows; //结果列表
}

EmpController

@RestController
public class EmpController {@Autowiredprivate EmpService empService;//    员工列表数据的条件分页查询  请求数据样例: emps?name=张&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=10@GetMapping("/emps")public Result getEmps(@RequestParam(required = false) String name,@RequestParam(required = false) Short gender,@DateTimeFormat(pattern ="yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern ="yyyy-MM-dd") LocalDate end,@RequestParam(defaultValue = "1") Integer page,  //页码@RequestParam(defaultValue = "10") Integer pageSize) //每页记录数
{// PageBean实体类接收查询到的数据和总数据条数PageBean emps = empService.getEmps(name, gender, begin, end, page, pageSize);if(emps.getTotal() == 0){return Result.error("查询失败");}else {return Result.success(emps);}}
}

分页的重点在service层

EmpService

@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic PageBean getEmps(String name, Short gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {//  start是sql语句中limit条件的第一个参数,表示第几条记录 			int start = (page-1)*pageSize;  //  mapper中定义了两个sql,第一个是gerEmps,用来条件查询数据List<Emp> list = empMapper.getEmps(name, gender, begin, end,start,pageSize);//	mapper中第二个sql,getTotalEmp,用来查询总记录数量。long total = empMapper.getTotalEmp();//  使用有参构造,将两个结果封装PageBean emps = new PageBean(total,list);return emps;}
}

EmpMapper

<mapper namespace="com.itheima.mapper.EmpMapper">
<!--分页获取员工数据--><select id="getEmps" resultType="Emp">select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp<where><if test="name != null and name !='' " >name like concat('%',#{name},'%')</if><if test="gender != null">and gender = #{gender}</if><if test="begin != null and end != null" >and entrydate between #{begin} and #{end}</if> </where>limit #{start},#{pageSize}</select><!-- 使用count(*) 获取总记录数--><select id="getTotalEmp" resultType="long">select count(*) from emp</select>
</mapper>

三、使用PageHelper分页插件

准备工作

导入依赖:

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

注意版本问题,我用的springboot版本为 3.x,所以对应的pagehelper要使用1.4.7及以上的版本。
最开始的时候我使用的是1.4.2版本,分页并未生效。

PageBean和controller层并未修改,不再额外展示。

EmpService

public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic PageBean getEmps(String name, Short gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {// 在进行数据库查询前启动分页,PageHelper.startPage( 想要查询的页码, 每页几条记录 );PageHelper.startPage(page, pageSize);// mapper查询到数据List<Emp> emps = empMapper.getEmps(name, gender, begin, end, page, pageSize);//把查询结果强转为Page类型  下面会介绍第二种形式Page<Emp> p = (Page<Emp>) emps;//Page中封装很多我们需要的信息,如getTotal是总记录数,getResult是分页之后的结果。//创建PageBean对象并将信息封装 并返回PageBean pageBean = new PageBean(p.getTotal(),p.getResult());return pageBean;}}
 //把查询结果强转为Page类型Page<Emp> p = (Page<Emp>) emps;

这是其中的第一种方法,把查询的信息强转为Page,但还有另外一种方法。

// 将查询到的数据封装到PageInfo对象中。PageInfo<Emp> p = new PageInfo<Emp>(emps);//  这种情况下,获取分页结果是 p.getList() 而不是 p.getResult()List<Emp> list= p.getList(); 

PageInfo中的其他信息

pageNum:当前页的页码
pageSize:每页显示的条数
size:当前页显示的真实条数
total:总记录数
pages:总页数
prePage:上一页的页码
nextPage:下一页的页码
isFirstPage/isLastPage:是否为第一页/最后一页
hasPreviousPage/hasNextPage:是否存在上一页/下一页
navigatePages:导航分页的页码数
navigatepageNums:导航分页的页码,[4, 5, 6, 7, 8]

EmpMapper

使用分页插件的mapper只需要按条件查询数据即可,并且不需要为mapper传递limit的参数。
插件会自动为sql语句后拼接 limit。

<!--分页获取员工数据--><select id="getEmps" resultType="Emp">select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp<where><if test="name != null and name !='' " >name like concat('%',#{name},'%')</if><if test="gender != null">and gender = #{gender}</if><if test="begin != null and end != null" >and entrydate between #{begin} and #{end}</if></where></select>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476402.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6. Spring Cloud Gateway网关超详细内容配置解析说明

6. Spring Cloud Gateway网关超详细内容配置解析说明 文章目录 6. Spring Cloud Gateway网关超详细内容配置解析说明前言1 Spring Cloud Gateway 概述1.1 Spring Cloud Gateway网关 的核心功能1.2 Spring Cloud Gateway VS Zuul 的区别1.3 Spring Cloud Gateway 的基本原理1.4 …

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言&#xff1a;大家好&#xff01;今天我要教你们如何在树莓派5上安装Raspberry Pi OS&#xff0c;并配置SSH和VNC权限。通过这些步骤&#xff0c;你将能够在Windows电脑上使用VNC Viewer&#xff0c;结合Cpolar内网穿透工具&#xff0c;实现长期的公网远程访问管理本地树莓派…

Centos 8, add repo

Centos repo前言 Centos 8更换在线阿里云创建一键更换repo 自动化脚本 华为Centos 源 , 阿里云Centos 源 华为epel 源 , 阿里云epel 源vim /centos8_repo.sh #!/bin/bash # -*- coding: utf-8 -*- # Author: make.han

【机器学习】回归模型(线性回归+逻辑回归)原理详解

线性回归 Linear Regression 1 概述 线性回归类似高中的线性规划题目。线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合&#xff08;加减乘除&#xff09;起来&#xff0c;得到的结果和目标接近。 线性回归分为一元线性回归和多元线性回归。 2 一元线…

2024年亚太地区数学建模大赛D题-探索量子加速人工智能的前沿领域

量子计算在解决复杂问题和处理大规模数据集方面具有巨大的潜力&#xff0c;远远超过了经典计算机的能力。当与人工智能&#xff08;AI&#xff09;集成时&#xff0c;量子计算可以带来革命性的突破。它的并行处理能力能够在更短的时间内解决更复杂的问题&#xff0c;这对优化和…

STM32F103 GPIO和串口实战

本节我们将会对STM32F103的硬件资源GPIO和串口进行介绍。 一、GPIO 1.1 电路原理图 LED电路原理图如下图所示&#xff1a; 其中&#xff1a; LED1连接到PA8引脚&#xff0c;低电平点亮&#xff1b;LED2连接到PD2引脚&#xff0c;低电平点亮&#xff1b; 1.2 GPIO引脚介绍 STM32…

FileProvider高版本使用,跨进程传输文件

高版本的android对文件权限的管控抓的很严格,理论上两个应用之间的文件传递现在都应该是用FileProvider去实现,这篇博客来一起了解下它的实现原理。 首先我们要明确一点,FileProvider就是一个ContentProvider,所以需要在AndroidManifest.xml里面对它进行声明: <provideran…

国产linux系统(银河麒麟,统信uos)使用 PageOffice 动态生成word文件

PageOffice 国产版 &#xff1a;支持信创系统&#xff0c;支持银河麒麟V10和统信UOS&#xff0c;支持X86&#xff08;intel、兆芯、海光等&#xff09;、ARM&#xff08;飞腾、鲲鹏、麒麟等&#xff09;、龙芯&#xff08;LoogArch&#xff09;芯片架构。 数据区域填充文本 数…

《Python制作动态爱心粒子特效》

一、实现思路 粒子效果&#xff1a; – 使用Pygame模拟粒子运动&#xff0c;粒子会以爱心的轨迹分布并运动。爱心公式&#xff1a; 爱心的数学公式&#xff1a; x16sin 3 (t),y13cos(t)−5cos(2t)−2cos(3t)−cos(4t) 参数 t t 的范围决定爱心形状。 动态效果&#xff1a; 粒子…

[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法

本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时&#xff0c;突然发现它的一个接口&#xff0c;被另一个服务ip频繁的请求。 按理说&#xff0c;之前设置的是&#xff0c;每隔1分钟请求一次接口。但从日志来看&#xff0c;则是1秒钟请求一次&#xff…

JDK、MAVEN与IDEA的安装与配置

1.认识JDK、MAVEN与IDEA JDK 提供了编译和运行Java程序的基本环境。Maven 帮助管理项目的构建和依赖。IDEA 提供了一个强大的开发环境&#xff0c;使得编写、调试和运行Java程序更加高效。 2. 安装与环境配置 2.1 官网地址 选择你需要的版本下载&#xff1a; MAVEN下载传送…

C++标准模板库 -- map和set

序列式容器和关联式容器 在本篇文章之前&#xff0c;我们已经接触了STL中的部分容器&#xff1a;如string、vector、list、deque、array、forward_list等&#xff0c;这些容器被统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值一般…

【Xbim+C#】创建圆盘扫掠IfcSweptDiskSolid

基础回顾 https://blog.csdn.net/liqian_ken/article/details/143867404 https://blog.csdn.net/liqian_ken/article/details/114851319 效果图 代码示例 在前文基础上&#xff0c;增加一个工具方法&#xff1a; public static IfcProductDefinitionShape CreateDiskSolidSha…

Flutter踩坑记录(三)-- 更改入口执行文件

我们在flutter 中可能不习惯默认的lib/main.dart 作为入口文件&#xff0c;会修改成index.dart 或者修改main.dart的位置, 用Andorid studio开发 如果我们用Andorid studio开发&#xff0c;默认修改一下配置地址 运行项目即可。 用VSCode开发 如果我们使用VSCode开发&…

AbsPlus框架介绍2

ABSPlus框架以其集成的多功能性在市场上脱颖而出。它不仅提供美观且符合主流风格的页面设计&#xff0c;还支持灵活的流程配置&#xff0c;包括算法处理流程和页面审批流程。在众多业务系统中&#xff0c;流程管理往往是核心且复杂的挑战&#xff0c;涉及数据库设计、页面开发以…

算法.图论-习题全集(Updating)

文章目录 本节设置的意义并查集篇并查集简介以及常见技巧并查集板子(洛谷)情侣牵手问题相似的字符串组岛屿数量(并查集做法)省份数量移除最多的同行或同列石头最大的人工岛找出知晓秘密的所有专家 建图及其拓扑排序篇链式前向星建图板子课程表 本节设置的意义 主要就是为了复习…

使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像

文章目录 应用快速部署NginxRedisMySQLTomcat 制作镜像镜像原理基于已有容器创建使用 Dockerfile 创建镜像指令说明构建应用创建 Dockerfile 文件创建镜像 应用快速部署 Nginx docker run -d -p 80:80 nginx使用浏览器访问虚拟机地址 Redis docker pull redis docker run --…

图像处理 之 凸包和最小外围轮廓生成

“ 最小包围轮廓之美” 一起来欣赏图形之美~ 1.原始图片 男人牵着机器狗 2.轮廓提取 轮廓提取 3.最小包围轮廓 最小包围轮廓 4.凸包 凸包 5.凸包和最小包围轮廓的合照 凸包和最小包围轮廓的合照 上述图片中凸包、最小外围轮廓效果为作者实现算法生成。 图形几何之美系列&#…

Nuxt.js 应用中的 webpack:configResolved事件钩子

title: Nuxt.js 应用中的 webpack:configResolved事件钩子 date: 2024/11/21 updated: 2024/11/21 author: cmdragon excerpt: 在 Nuxt.js 项目中,webpack:configResolved 钩子允许开发者在 Webpack 配置被解析后读取和修改该配置。这一钩子在所有 Webpack 配置被合并和确…

java-贪心算法

1. 霍夫曼编码&#xff08;Huffman Coding&#xff09; 描述&#xff1a; 霍夫曼编码是一种使用变长编码表对数据进行编码的算法&#xff0c;由David A. Huffman在1952年发明。它是一种贪心算法&#xff0c;用于数据压缩。霍夫曼编码通过构建一个二叉树&#xff08;霍夫曼树&a…