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

Javaweb之SpringBootWeb案例员工管理分页查询的详细解析

3. 员工管理

完成了部门管理的功能开发之后,我们进入到下一环节员工管理功能的开发。

基于以上原型,我们可以把员工管理功能分为:

  1. 分页查询(今天完成)

  2. 带条件的分页查询(今天完成)

  3. 删除员工(今天完成)

  4. 新增员工(后续完成)

  5. 修改员工(后续完成)

那下面我们就先从分页查询功能开始学习。

3.1 分页查询

3.1.1 基础分页
3.1.1.1 需求分析

我们之前做的查询功能,是将数据库中所有的数据查询出来并展示到页面上,试想如果数据库中的数据有很多(假设有十几万条)的时候,将数据全部展示出来肯定不现实,那如何解决这个问题呢?

使用分页解决这个问题。每次只展示一页的数据,比如:一页展示10条数据,如果还想看其他的数据,可以通过点击页码进行查询。

要想从数据库中进行分页查询,我们要使用LIMIT关键字,格式为:limit 开始索引 每页显示的条数

查询第1页数据的SQL语句是:

select * from emp  limit 0,10;

查询第2页数据的SQL语句是:

select * from emp  limit 10,10;

查询第3页的数据的SQL语句是:

select * from emp  limit 20,10;

观察以上SQL语句,发现: 开始索引一直在改变 , 每页显示条数是固定的

开始索引的计算公式: 开始索引 = (当前页码 - 1) * 每页显示条数

我们继续基于页面原型,继续分析,得出以下结论:

  1. 前端在请求服务端时,传递的参数

    • 当前页码 page

    • 每页显示条数 pageSize

  2. 后端需要响应什么数据给前端

    • 所查询到的数据列表(存储到List 集合中)

    • 总记录数

后台给前端返回的数据包含:List集合(数据列表)、total(总记录数)

而这两部分我们通常封装到PageBean对象中,并将该对象转换为json格式的数据响应回给浏览器。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
private Long total; //总记录数
private List rows; //当前页数据列表
}

3.1.1.2 接口文档

员工列表查询

  • 基本信息

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

    参数格式:queryString

    参数说明:

    参数名称是否必须示例备注
    name姓名
    gender1性别 , 1 男 , 2 女
    begin2010-01-01范围匹配的开始时间(入职日期)
    end2020-01-01范围匹配的结束时间(入职日期)
    page1分页查询的页码,如果未指定,默认为1
    pageSize10分页查询的每页记录数,如果未指定,默认为10

    请求数据样例:

    /emps?name=张&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=10
  • 响应数据

    参数格式:application/json

    参数说明:

    名称类型是否必须默认值备注其他信息
    codenumber必须响应码, 1 成功 , 0 失败
    msgstring非必须提示信息
    dataobject必须返回的数据
    |- totalnumber必须总记录数
    |- rowsobject []必须数据列表item 类型: object
    |- idnumber非必须id
    |- usernamestring非必须用户名
    |- namestring非必须姓名
    |- passwordstring非必须密码
    |- entrydatestring非必须入职日期
    |- gendernumber非必须性别 , 1 男 ; 2 女
    |- imagestring非必须图像
    |- jobnumber非必须职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师
    |- deptIdnumber非必须部门id
    |- createTimestring非必须创建时间
    |- updateTimestring非必须更新时间

    响应数据样例:

    {"code": 1,"msg": "success","data": {"total": 2,"rows": [{"id": 1,"username": "jinyong","password": "123456","name": "金庸","gender": 1,"image": "https://web-framework.oss-cn-hangzhou.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-cn-hangzhou.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"}]}
    }

3.1.1.3 思路分析

分页查询需要的数据,封装在PageBean对象中:

3.1.1.4 功能开发

通过查看接口文档:员工列表查询

请求路径:/emps

请求方式:GET

请求参数:跟随在请求路径后的参数字符串。 例:/emps?page=1&pageSize=10

响应数据:json格式

EmpController

import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
​
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {
​@Autowiredprivate EmpService empService;
​//条件分页查询@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize) {//记录日志log.info("分页查询,参数:{},{}", page, pageSize);//调用业务层分页查询功能PageBean pageBean = empService.page(page, pageSize);//响应return Result.success(pageBean);}
}

@RequestParam(defaultValue="默认值") //设置请求参数默认值

EmpService

public interface EmpService {/*** 条件分页查询* @param page 页码* @param pageSize 每页展示记录数* @return*/PageBean page(Integer page, Integer pageSize);
}

EmpServiceImpl

import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.List;
​
@Slf4j
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;
​@Overridepublic PageBean page(Integer page, Integer pageSize) {//1、获取总记录数Long count = empMapper.count();
​//2、获取分页查询结果列表Integer start = (page - 1) * pageSize; //计算起始索引 , 公式: (页码-1)*页大小List<Emp> empList = empMapper.list(start, pageSize);
​//3、封装PageBean对象PageBean pageBean = new PageBean(count , empList);return pageBean;}
}

EmpMapper

@Mapper
public interface EmpMapper {//获取总记录数@Select("select count(*) from emp")public Long count();
​//获取当前页的结果列表@Select("select * from emp limit #{start}, #{pageSize}")public List<Emp> list(Integer start, Integer pageSize);
}

3.1.1.5 功能测试

功能开发完成后,重新启动项目,使用postman,发起POST请求:

3.1.1.6 前后端联调

打开浏览器,测试后端功能接口:

相关文章:

  • R语言【paleobioDB】——pbdb_map_occur():通过化石分布记录,创建一个RasterLayer对象,和一个显示取样力度的图
  • 2401vim,vim实现任务列表
  • 【产品人卫朋】硬件产品经理:从入门到精通
  • Scott用户数据表的分析
  • #mysql 8.0 踩坑日记
  • R语言【文章复现】——集成式地绘制高分辨率的多样性分布图,对方法的检验和优化,以及处理思路的思考
  • SpringBoot内嵌Tomcat启动流程
  • 力扣2085-统计出现过一次的公共字符串
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)
  • 竞赛保研 基于深度学的图像修复 图像补全
  • 【Python_PySide6学习笔记(三十一)】基于PySide6实现自定义串口设备连接界面类:可实现串口连接断开、定时发送等功能
  • 入门Docker1: 容器技术的基础
  • 1 快速前端开发
  • 一致性协议浅析
  • 【wow-ts】前端学习笔记Typescript基础语法(一)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Android优雅地处理按钮重复点击
  • Apache的基本使用
  • C学习-枚举(九)
  • ERLANG 网工修炼笔记 ---- UDP
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java基本数据类型之Number
  • JS专题之继承
  • Laravel Telescope:优雅的应用调试工具
  • leetcode386. Lexicographical Numbers
  • LintCode 31. partitionArray 数组划分
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • rc-form之最单纯情况
  • ViewService——一种保证客户端与服务端同步的方法
  • vuex 笔记整理
  • Vue--数据传输
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 计算机常识 - 收藏集 - 掘金
  • 将回调地狱按在地上摩擦的Promise
  • 聊聊flink的BlobWriter
  • 聊聊redis的数据结构的应用
  • 入门到放弃node系列之Hello Word篇
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微服务框架lagom
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 原生 js 实现移动端 Touch 滑动反弹
  • 正则学习笔记
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • #Java第九次作业--输入输出流和文件操作
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (三)elasticsearch 源码之启动流程分析
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞