8、JavaWeb-案例-部门管理-员工管理

news2025/1/21 9:39:58

P135 案例-准备工作

依据案例,学习根据接口文档开发接口的能力。

完成部门管理和员工管理两部分。可以分析这两部分,一个部门可以有多个员工,一个员工归属一个部门。

准备数据库表,创建一个springboot工程,引入web开发起步依赖、mybatis相关依赖(mybatis起步依赖,mysql驱动)、简化实体类定义引入lombok,如下图
在这里插入图片描述

配置mybatis,准备对应实体类,准备三层架构的基础代码,之前的Dao就是mybatis下的数据访问层,mapper层。

采用面向接口的方式编程。

了解开发规范:基于当前主流的前后端分离进行开发,服务端运行在tomcat服务器上。开发规范定义在接口文档当中,前后端交互的时候是基于restful风格进行交互的。

开发规范Restful:Representational State Transfer,表述性状态转换,是一种软件架构风格。

描述网络资源有两种方式,

  • 传统风格,自己定义的url,请求方式也是不统一,例如user/getByid?id=1, user/saveUser,等等

在这里插入图片描述

  • restful风格,通过url定位资源,例如user/1, user/users,等等,这些url只知道是对user进行操作,具体是什么请求要通过HTTP动词描述操作,即请求方式的对应操作

    • GET查询操作

    • POST新增操作

    • PUT修改操作

    • DELETE删除操作

注意rest是风格,约定方式,可以打破;描述模块的功能通常使用复数,也就加s的格式描述,

基础环境已经准备好了,开发流程是怎么样的:

  • 查看页面原型,明确需求

  • 阅读接口文档

  • 思路分析

  • 接口开发

  • 接口测试

  • 前后端联调

P136 案例-部门管理-查询

只是仅仅进行查询数据并返回即可。理解整个流程处理请求调用mapper接口,执行查询后返回结果。

如果使用日志,可以如下:

private static Logger log = LoggerFactory.getLogger(DeptController.class);
log.info()

上述步骤可以简化为使用lombok中的注解,@Slf4j,然后直接使用log记录日志

使用@Requestmapping()需要指定Url和请求方式method=。

除此之外还有衍生注解更为方便:

  • GetMapping

  • PostMapping

  • PutMapping

在controller中是使用了service的方法,然后可以直接在这里快捷生成方法,然后再在serviceimpl中实现接口类,然后接口类中实现mapper方法,快速生成mapper方法,再到xml中定义sql语句。

P137 案例-部门管理-前后端联调

前端工程一般部署在nginx服务器当中的,将案例中部署好的nginx解压,然后双击nginx.exe即可运行,

P138 案例-部门管理-删除

回顾接收路径参数的方式,使用注解@Pathvariable,

 /**
     * 删除部门信息
     * @param id
     * @return
     */
    @DeleteMapping("/depts/{id}")
    public Result delete(@PathVariable Integer id){
        log.info("删除部门一条记录:"+id);
        // 执行删除操作
        deptService.delete();
        return Result.success();
    }

联调成功。

P139 案例-部门管理-新增部门

注意接口文档中的请求参数为application/json的格式,不是路径参数的格式。

回顾服务端接收json形式的方法,加上注解@RequestBody,使用实体类接收。

 @PostMapping("/depts")
    public Result insert(@RequestBody Dept dept){
        log.info("新增部门:{}", dept);
        deptService.insert(dept);

        return Result.success();
    }

分析,以上增删改查的路径都有公共的部分,可以抽取出公共的路径,放在类的前面使用Requestmapping。

P140 案例-员工管理-分页查询-分析

先不加条件,先实现查询出数据进行分页展示,

回顾:mysql分页查询基本语法,第一页索引从0开始,

select * from limit 起始索引, 查询返回的记录数

起始索引的计算公式,(页码 - 1)*每页展示记录数

获取总记录数的sql, select count(*) from emp

前端传递:page,pageSize

后端响应:list, total。两项数据建议使用map集合或者实体类封装进行返回,建议使用实体类封装。

P141 案例-员工管理-分页查询-实现

对于前端传递的page和pageSize,如果没有传递则后端要设置默认值,可以使用注解ReqeustParam进行默认值的设置,

分页查询的实现:

@Mapper
public interface EmpMapper {
    /**
     * 获取总记录数
     */
    public Long count();

    /**
     * 按分页查询返回结果
     */
    public List<Emp> page(Integer start, Integer pageSize);
}

业务逻辑处理实现:将两个结果封装

  @Override
    public PageBean page(Integer page, Integer pageSize) {
        // 获取总记录数
        Long count = empMapper.count();
        // 获取分页查询列表
        List<Emp> page1 = empMapper.page((page - 1) * pageSize, pageSize);
        // 封装pageBean
        PageBean pageBean = new PageBean();
        pageBean.setTotal(count);
        pageBean.setRows(page1);
        return pageBean;
    }

P142 案例-员工管理-分页插件PageHelper

分析上述的原始实现的分页查询,这类操作步骤固定、代码繁琐。较为流行的是PageHelper插件,简化这类操作。

我们只需要查询即可,查询第多少页,每页多少,则通过PageHelper进行设置,

将查询结果转为Page类型。

先引入依赖:注意版本1.4.6才能将后面查询到的list数据转成page数据

<!--        pagehelper依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.12</version>
        </dependency>

在Mapper接口中执行正常的查询即可,

然后将原始的逻辑处理进行修改,

   @Override
    public PageBean page(Integer page, Integer pageSize) {
        // 设置分页参数
        PageHelper.startPage(page, pageSize);
        // 执行正常的查询
        List<Emp> empList = empMapper.list();
        // 变为Page类型
        Page<Emp> p = (Page<Emp>) empList;

        //封装结果
        PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
        return pageBean;
    }

P143 案例-员工管理-分页条件查询

条件查询即sql语句中增加where条件,

select * from emp where name like concat('%', ${name},'%') and gender = 1 and entrydate between #{start} and #{end} order by update_time desc;

在上述分页查询的基础上增加查询条件,sql使用动态sql实现,
在这里插入图片描述

P144 案例-员工管理-删除

分单个删除和批量删除。

动态sql语句,使用到了foreach标签。

P145 案例-员工管理-新增员工

例如:

   @PostMapping
    public Result add(@RequestBody Emp emp){

        log.info("新增员工: {}", emp);
        empService.add(emp);

        return Result.success();
    }

小结:

如果是路径中参数,在函数参数定义中加上注解@Pathvariable

如果是json请求数据,在函数参数中加上注解@RequestBody

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第五十一回 李逵打死殷天赐 柴进失陷高唐州-AI发展历程和常用框架

朱仝说只要杀了李逵就上梁山&#xff0c;柴进就劝李逵先在庄上住一段时间&#xff0c;先让朱仝、雷横和吴用回了梁山。 李逵在柴进庄上住了一个月&#xff0c;碰到柴进的叔叔柴皇城病重来信叫他去一趟&#xff0c;于是李逵就随着柴进去了高唐州。 柴皇城被殷天锡气死&#xf…

微服务day05-Gateway网关

Gateway网关 为了防止微服务能被任何身份的人访问&#xff0c;需要对访问微服务的人做身份认证和权限校验。网关的功能就是对访问用户进行身份认证和权限校验。网关具有3种功能&#xff1a; 身份验证和权限校验&#xff1a;网关作为微服务入口&#xff0c;需要校验用户是是否…

自学高效备考2024年AMC10:2000-2023年1250道AMC10真题解析

我们今天继续来随机看5道AMC10真题&#xff0c;以及详细解析&#xff0c;这些题目来自1250道完整的官方历年AMC10真题库。通过系统研究和吃透AMC10的历年真题&#xff0c;参加AMC10的竞赛就能拿到好名次。 即使不参加AMC10竞赛&#xff0c;初中和高中数学一定会学得比较轻松、…

Java线程状态解析:多线程编程指南

&#x1f31f; 欢迎来到 我的博客&#xff01; &#x1f308; &#x1f4a1; 探索未知, 分享知识 !&#x1f4ab; 本文目录 &#x1f31f;1. 引言&#x1f31f;2. Java线程的生命周期&#x1f4a1;2.1 <font color "skyblue">新建&#xff08;New&#xff09;&…

去除PDF论文行号的完美解决方案

去除PDF论文行号的完美解决方案 1. 遇到的问题 我想去除论文的行号&#xff0c;但是使用网上的Adobe Acrobat裁剪保存后 如何去掉pdf的行编号&#xff1f; - 知乎 (zhihu.com) 翻译时依然会出现行号&#xff0c;或者是转成word&#xff0c;这样就大大损失了格式&#xff0c…

Python之Web开发初学者教程—ubuntu下vi的使用

Python之Web开发初学者教程—ubuntu下vi的使用 vi\vim 文本编辑器 i 切换到输入模式&#xff0c;以输入字符。 x 删除当前光标所在处的字符。 : 切换到底线命令模式&#xff0c;以在最底一行输入命令。 vi 保存并退出&#xff1a;esc键退出编辑-…

人工智能在信息系统安全中的运用

一、 概述 对于企业和消费者来讲&#xff0c;人工智能是非常有用的工具&#xff0c;那又该如何使用人工智能技术来保护敏感信息?通过快速处理数据并预测分析&#xff0c;AI可以完成从自动化系统到保护信息的所有工作。尽管有些黑客利用技术手段来达到自己的目的&#xff0c;但…

JAVA语言类与对象的关系

在Java语言中&#xff0c;类与对象是面向对象编程的核心概念&#xff0c;它们之间存在着紧密的关系。以下是关于Java语言中类与对象的关系的要点&#xff1a; 1. 类&#xff08;Class&#xff09;&#xff1a; 类是Java程序的基本构造块&#xff0c;它是一种用户自定义的数据…

OpenHarmony教程指南—Navigation开发 页面切换场景范例

简介 在应用开发时&#xff0c;我们常常遇到&#xff0c;需要在应用内多页面跳转场景时中使用Navigation导航组件做统一的页面跳转管理&#xff0c;它提供了一系列属性方法来设置页面的标题栏、工具栏以及菜单栏的各种展示样式。除此之外还拥有动态加载&#xff0c;navPathSta…

【信息系统项目管理师】--【信息技术发展】--【新一代信息技术及应用】--【虚拟现实】

文章目录 第二章 信息技术发展2.2 新一代信息技术及应用2.2.6 虚拟现实1.技术基础2.关键技术3.应用和发展 第二章 信息技术发展 信息技术是在信息科学的基本原理和方法下&#xff0c;获取信息、处理信息、传输信息和使用信息的应用技术总称。从信息技术的发展过程来看&#xff…

Google Earth Engine(GEE)——CCNL:DMSP-OLS (1992-2013) 的校正的夜间灯光数据集(全球夜间灯光数据)

CCNL: Consistent And Corrected Nighttime Light Dataset from DMSP-OLS (1992-2013) 描述 一致和校正的夜间灯光 (CCNL) 数据集是国防气象计划 (DMSP) 操作线扫描系统 (OLS) 第 4版的重新处理版本。采用一系列方法减轻年际不一致性、饱和度和开花效应的影响&#xff0c;提高数…

js节点操作

js节点操作 一.DOM节点二.查找节点三.增加节点3.1.创建节点3.2.追加节点3.3.克隆节点 四. 删除节点 一.DOM节点 DOM树里每一个内容都称之为节点 节点类型&#xff1a;元素节点&#xff08;所有的标签 比如 body&#xff0c;div等&#xff0c;html 是根节点&#xff09; 属性节…

C++STL【list链表】

list 1. list介绍 list文档&#xff08;非官方&#xff09; 官方文档list是双向带头循环链表&#xff0c;它可以在常数范围内的任意位置进行插入和删除操作。list的迭代器是双向迭代器(bidirectional iterator)&#xff0c;它可以前后双向迭代。 由容器的底层结构决定&#xf…

redis 性能优化一

目录 前言 尾延迟 前言 说到redis 性能优化&#xff0c;优化的目的是什么&#xff1f;提高响应&#xff0c;减少延迟。就要关注两点&#xff0c;一是尾延迟&#xff0c;二是Redis 的基线性能。只有指标&#xff0c;我们的优化&#xff0c;才有意义&#xff0c;才能做监控以及…

数智驱动“坐商”变“行商”,安通控股迈向综合物流服务新高度

在全球经济增长放缓的大环境下&#xff0c;集装箱运输市场也面临供需双弱的新挑战。 国内内贸集装箱物流企业TOP3——安通控股股份有限公司&#xff08;以下简称“安通控股”&#xff09;激流勇进&#xff0c;积极推进营销理念从“业务操作型”向“客户营销型”转变、从传统的…

英福康INFICON软件真空Tware32中文操作手册

英福康INFICON软件真空Tware32中文操作手册

列表吸顶分组之按首字母分组国家选区号

列表粘性分组之按首字母分组国家选区号 Android原生版本 直接先看UI图,效果如下 本来看起来也不难,我就想着上面常用区号那块不动,下面的列表滑动就行,但IOS说他滑动的时候上面也滑上去了,好吧,这也行;但最终效果做出来后,IOS滑动后会有按照国家名称首字母进行粘性分…

[CSAWQual 2019]Web_Unagi ---不会编程的崽

不知道刷了多少天了&#xff0c;又是一题关于xxe漏洞的。 web的习惯性操作。 1.功能点&cms 2.源代码 3.敏感文件泄露 当然这是我个人的习惯。这里进入界面后又upload功能&#xff0c;不会是传马吧。但是旁边给了上传文件格式。仅仅只看界面似乎没什么区别&#xff0c;源…

RabbitMQ 基本介绍

RabbitMQ 基本介绍 消息模型 所有 MQ 产品从模型抽象上来说都是一样的过程&#xff1a; 消费者&#xff08;consumer&#xff09;订阅某个队列。生产者&#xff08;producer&#xff09;创建消息&#xff0c;然后发布到队列&#xff08;queue&#xff09;中&#xff0c;最后…

软考66-上午题-【面向对象技术】-小结+杂题

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题4&#xff1a; 真题5&#xff1a; 真题6&#xff1a; 二、面向对象设计-总结 2-1、考题分析 选择题&#xff1a;11道&#xff08;11分&#xff09; 综合分析题&#xff1a;2道&#xff08;30分&#xff09; java程序设计…