菜鸟之路Day36一一Web开发综合案例(部门管理)

news2025/6/3 2:04:09

菜鸟之路Day36一一Web开发综合案例(部门管理)

作者:blue

时间:2025.5.28

文章目录

  • 菜鸟之路Day36一一Web开发综合案例(部门管理)
    • 一.环境搭建
    • 二.开发规范
    • 三.部门管理
      • 3.1查询
      • 3.2删除
      • 3.3新增
      • 3.3修改
        • 根据id来查询当前部门
        • 修改部门当前部门

文章内容学习自黑马程序员BV1m84y1w7Tb

一.环境搭建

准备数据库表(dept,emp)

在这里插入图片描述

创建springboot工程,引入对应的起步依赖(web,mybatis,mysql驱动,lombok)

在这里插入图片描述

配置文件application.properties中引入mybatis的配置信息,准备对应的实体类

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306
spring.datasource.username=root
spring.datasource.password=1234

#配置mybatis的日志,指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

#开启mybatis的驼峰命名自动映射开关 a_column ----> aColumn
mybatis.configuration.map-underscore-to-camel-case=true

准备对应的Mapper,Service(接口),Controller基础结构

在这里插入图片描述

二.开发规范

REST:表述性状态转换,它是一种软件架构风格

REST风格用url来定位资源,HTTP动词描述操作

REST风格
http://localhost:8080/users/1        GET:查询id为1的用户
http://localhost:8080/users			POST:新增用户
http://localhost:8080/users			PUT:修改用户
http://localhost:8080/users/1		DELETE:删除id为1的用户

REST是风格,是约定方式,约定不是规定,可以打破

描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如:users,emps,books…

前后端交互统一响应结果Result

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
    private Integer code;//响应码 1代表成功;0代表失败
    private String msg;//响应信息 描述字符串
    private Object data;//返回的数据
    public static Result success() {//增删改 成功响应
        return new Result(1,"success",null);
    }

    public static Result success(Object data) {//查询 成功响应
        return new Result(1,"success",data);
    }

    public static Result error(String msg) {//失败响应
        return new Result(0,msg,null);
    }
}

三.部门管理

3.1查询

需求查询全部部门的信息

分析:首先Controller层应该先接收到前端请求,然后调用Service层的实体类对象,调用其中查询全部对象的方法来查询全部部门的信息。查询全部部门信息很显然是一个数据库操作,所以Service的实现类中应该调用Dao层的实体类对象,利用其中的查询,与数据库做交互,获得数据库中的数据。

下方的业务逻辑图很好的展示了整个过程的业务逻辑

实际业务逻辑过程

在这里插入图片描述

DeptController

@Slf4j//使用这个注解可以获得一个logback的对象一一log可以用以记录日志
@RestController//这个注解会把返回给前端的值包装成HTTP响应体
public class DeptController {

    @Autowired
    private DeptService deptService;//依赖注入,获得一个deptService对象

    @GetMapping("/depts")
    public Result list(){
        log.info("查询全部部门数据");

        List<Dept> deptList= deptService.list();

        return new Result(1,"success",deptList);
    }
}

IoC 容器管理:IOC容器中的对象会被注册到 Spring 的应用上下文中,你可以通过依赖注入(如 @Autowired)直接使用它们,无需手动 new

DeptServiceImpl

@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;//依赖注入获得一个dept对象

    @Override
    public List<Dept> list() {
        return deptMapper.list();
    }
}

@Service 注解是 Spring 框架中的一个组件注解,它的作用是告诉 Spring:“这个类是一个服务层组件,请在应用启动时自动创建它的实例,并将其作为 Bean 注册到 Spring 的 IoC 容器中”。这就很好的解释了为什么在Controller层可以直接获得deptService对象,因为IOC容器中已经有了deptService的bean。

DeptMapper

@Mapper
public interface DeptMapper {

    //查询全部部门
    @Select("select * from dept")//此处查询语句比较简单,采用注解方式来完成
    public List<Dept> list();
}

@Mapper 注解在运行时会为 DAO 层的接口自动生成代理实现类,并将其作为 Bean 注册到 Spring 的 IoC 容器中。

运行SpringBoot程序,发送请求,获得了全部部门的信息

在这里插入图片描述

前后端联调

可以看到部门信息已经被加载到页面中了

在这里插入图片描述

3.2删除

该功能的业务逻辑照上一业务并无大变化,依然是一个类似的过程

DeptController

    /*
    * 根据删除部门条目
    * */
    @DeleteMapping("/depts/{id}")
    public Result delete(@PathVariable Integer id){

        log.info("根据id删除部门:{}",id);

        deptService.delete(id);

        return Result.success();
    }

@PathVariable 是 Spring MVC 框架中的一个注解,用于从 URL 路径中提取变量值并绑定到控制器方法的参数上。它主要用于创建 RESTful API,使 URL 更加直观和灵活。

核心作用

  1. 路径变量绑定
    将 URL 中的动态部分(如 /{id})映射到方法参数。
  2. RESTful 支持
    支持创建符合 REST 风格的 API,例如通过 ID 查询资源:/users/{id}
  3. 类型自动转换
    自动将路径变量转换为方法参数的类型(如 LongInteger 等)。

DeptServiceImpl

    @Override
    public void delete(Integer id) {
        deptMapper.delete(id);
    }

DeptMapper

/*
* 删除部门
* */
@Delete("delete from dept where id = #{id}")
void delete(int id);

3.3新增

DeptController

    /*
    * 新增部门条目
    */
    @PostMapping("/depts")
    public Result add(@RequestBody Dept dept){
        log.info("新增部门");

        deptService.add(dept);

        return Result.success();
    }

@RequestBody 是 Spring MVC 框架中的一个注解,用于将 HTTP 请求体中的内容(如 JSON、XML 等)反序列化为 Java 对象。它主要用于处理 RESTful API 中的 POST、PUT 等需要传递复杂数据的请求。

核心作用

  1. 请求体解析
    将 HTTP 请求体中的数据(如 JSON 字符串)自动转换如 JSON 字符串)自动转换为 Java 对象。
  2. 类型适配
    支持多种消息转换器(如 Jackson、Gson),根据请求的 Content-Type 自动选择合适的转换器。
  3. 简化参数绑定
    无需手动解析请求体,直接获取对象实例。

DeptServiceImpl

    @Override
    public void add(Dept dept) {
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.add(dept);
    }

DeptMapper

    /*
    * 新增部门
    * */
    @Insert("insert into dept(name,create_time,update_time) values (#{name},#{createTime},#{updateTime})")
    void add(Dept dept);

优化Controller层的路径

一个完整的请求路径,应该是类上的@RequestMapping的value属性+方法上的@RequestMapping的value属性

在这里插入图片描述

3.3修改

修改其实涉及到两步操作

一步是点击编辑时,要根据id来查询当前部门

一步是点击保存时,修改部门当前部门

根据id来查询当前部门

DeptController

    /*
    * 根据id查询部门信息
    * */
    @GetMapping("/{id}")
    public Result selectById(@PathVariable Integer id){
        log.info("根据id查询单个部门:{}",id);

        Dept dept = deptService.selectById(id);

        return Result.success(dept);
    }

DeptServiceImpl

    @Override
    public Dept selectById(Integer id) {
        return deptMapper.selectById(id);
    }

DeptMapper

    /*
    * 根据ID查询单个部门
    * */
    @Select("select * from dept where id = #{id}")
    Dept selectById(Integer id);
修改部门当前部门

DeptController

    /*
    * 修改部门信息
    * */
    @PutMapping
    public Result updateDept(@RequestBody Dept dept){
        log.info("修改部门");

        deptService.updateDept(dept);

        return Result.success();
    }

DeptServiceImpl

    @Override
    public void updateDept(Dept dept) {
        deptMapper.updateDept(dept);
    }

DeptMapper

    /*
    * 修改部门
    * */
    @Update("update dept set name=#{name} where id=#{id}")
    void updateDept(Dept dept);

至此部门管理的功能就全部实现

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

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

相关文章

第 1 章:学习起步

1. React Native前置知识要求 在开始学习React Native之前&#xff0c;有一些前置知识你需要了解。不过别担心&#xff0c;我会带你逐步掌握这些内容&#xff0c;让你顺利入门。 1.1. JavaScript是必须掌握的 学习React Native&#xff0c;JavaScript是基础。你需要了解Java…

SQL查询——大厂面试真题

前言 本文总结了SQLite数据库的核心操作要点&#xff1a;1. 基础语法&#xff1a;SQL语句不区分大小写&#xff0c;多语句需用分号分隔&#xff0c;支持多种注释方式2. 表操作&#xff1a;包括创建表&#xff08;定义主键、非空约束等&#xff09;、插入/更新/删除数据、添加/…

Linux-pcie ranges介绍

参考链接&#xff1a;https://elinux.org/Device_Tree_Usage#PCI_Host_Bridge pcie bar高低端BAR起始地址介绍 pcie设备树节点 / {compatible "rockchip,rk3588";interrupt-parent <&gic>;#address-cells <2>;#size-cells <2>;pcie3x4: p…

⭐ Unity AVProVideo插件自带播放器 脚本重构 实现视频激活重置功能

一、功能概述 本笔记记录直接修改插件自带的场景播放其中 原始的 MediaPlayerUI 脚本,实现激活时自动重置播放器的功能。 我用的插件版本是 AVPro Video - Ultra Edition 2.7.3 修改后的脚本将具备以下特性: 激活 GameObject 时自动重置播放位置到开头 可配置是否在重置后自…

详解K8s API Server 如何处理请求的?

详解K8s API Server 如何处理请求的? Kubernetes(K8s)是一个强大的容器编排系统,而API Server(kube-apiserver) 是它的核心组件之一。 如果把 K8s 比作一个国家,API Server 就是政府机构,所有资源的创建、修改、删除都要经过它审批! 🎯 API Server 的作用 📌 A…

微调数据处理

1. 数据爬取 我们将爬取的1G文件都保存到all_m_files目录下 查看原始数据文件数量&#xff1a; find /root/all_m_files -type f | wc -l 2. 数据预处理 仅保留UTF-8 格式文件&#xff0c;且所有保留的代码文件长度必须大于20行 import os import pandas as pddef try_read…

解决开发者技能差距:AI 在提升效率与技能培养中的作用

企业在开发者人才方面正面临双重挑战。一方面&#xff0c;IDC 预测&#xff0c;到2025年&#xff0c;全球全职开发者将短缺400万人&#xff1b;另一方面&#xff0c;一些行业巨头已暂停开发者招聘&#xff0c;转而倚重人工智能&#xff08;AI&#xff09;来满足开发需求。这不禁…

XCTF-web-easyphp

解析 第一个条件&#xff08; k e y 1 &#xff09;&#xff1a; i s s e t ( key1&#xff09;&#xff1a;isset( key1&#xff09;&#xff1a;isset(a) && intval(KaTeX parse error: Expected EOF, got & at position 14: a) > 6000000 &̲& strl…

Transformer 通关秘籍11:Word2Vec 及工具的使用

将文字文本转换为词向量(word embedding&#xff09;的过程中&#xff0c;一个非常著名的算法模型应该就是 Word2Vec 了。 相信大家或多或少都听说过&#xff0c;本节就来简单介绍一下 Word2Vec 。 什么是 Word2Vec &#xff1f; Word2Vec 可以非常有效的创建词嵌入向量&…

【DAY34】GPU训练及类的call方法

内容来自浙大疏锦行python打卡训练营 浙大疏锦行 知识点&#xff1a; CPU性能的查看&#xff1a;看架构代际、核心数、线程数GPU性能的查看&#xff1a;看显存、看级别、看架构代际GPU训练的方法&#xff1a;数据和模型移动到GPU device上类的call方法&#xff1a;为什么定义前…

Flutte ListView 列表组件

目录 1、垂直列表 1.1 实现用户中心的垂直列表 2、垂直图文列表 2.1 动态配置列表 2.2 for循环生成一个动态列表 2.3 ListView.builder配置列表 列表布局是我们项目开发中最常用的一种布局方式。Flutter中我们可以通过ListView来定义列表项&#xff0c;支持垂直和水平方向展示…

muduo库的初步认识和基本使用,创建一个简单查询单词服务系统

小编在学习完muduo库之后&#xff0c;觉得对于初学者&#xff0c;muduo库还是有点不好理解&#xff0c;所以在此&#xff0c;小编来告诉大家muduo库的初步认识和基本使用&#xff0c;让初学者也可以更快的上手和使用muduo库。 Muduo由陈硕大佬开发&#xff0c;是⼀个基于 非阻塞…

【HTML/CSS面经】

HTML/CSS面经 HTML1. script标签中的async和defer的区别2. H5新特性&#xff08;1 标签语义化&#xff08;2 表单功能增强&#xff08;3 音频和视频标签&#xff08;4 canvas和svg绘画&#xff08;5 地理位置获取&#xff08;6 元素拖动API&#xff08;7 Web Worker&#xff08…

git查看commit属于那个tag

1. 快速确认commit原始分支及合入tag # git describe 213b4b3bbef2771f7a1b8166f6e6989442ca67c8 查看commit合入tag # git describe 213b4b3bbef2771f7a1b8166f6e6989442ca67c8 --all 查看commit原始分支 2.查看分支与master关系 # git show --all 0.5.67_0006 --stat 以缩…

mysql-mysql源码本地调试

前言 先进行mysql源码本地编译&#xff1a;mysql源码本地编译 1.本地调试 这里以macbook为例 1.使用vscode打开mysql源码 2.创建basedir目录、数据目录、配置文件目录、配置文件 cd /Users/test/ mkdir mysqldir //创建数据目录和配置目录 cd mysqldir mkdir conf data …

PCIe— Legacy PCI

Legacy Model ​​ 该器件通过将其引脚置位到控制器来生成中断。 在较旧的系统中&#xff0c;这个控制 器通常是Intel 8259 PIC&#xff0c;有15个IRQ输入和一个INTR输出。 然后&#xff0c;PIC将断 言INTR以通知CPU一个或多个中断正在挂起。 一旦CPU检测到INTR的断言…

PostgreSQL数据库配置SSL操作说明书

背景&#xff1a; 因为postgresql或者mysql目前通过docker安装&#xff0c;只需要输入主机IP、用户名、密码即可访问成功&#xff0c;这样其实是不安全的&#xff0c;可能会通过一些手段获取到用户名密码导致数据被窃取。而ES、kafka等也是通过用户名/密码方式连接&#xff0c;…

低碳理念在道路工程中的应用-预制路面

一、引子 在上一篇文章里&#xff0c;给大家介绍了预制基层的应用&#xff0c;有人提出&#xff0c;既然基层能够预制&#xff0c;那么&#xff0c;道路面层能不能预制呢&#xff0c;有没有相关的研究成果和应用实例呢&#xff1f;答案是肯定的&#xff0c;在本篇文章中&#x…

12-后端Web实战(登录认证)

在前面的课程中&#xff0c;我们已经实现了部门管理、员工管理的基本功能&#xff0c;但是大家会发现&#xff0c;我们并没有登录&#xff0c;就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的&#xff0c;所以我们今天的主题就是登录认证。最终要实现的效果是&#…

4.2.2 Spark SQL 默认数据源

在本实战概述中&#xff0c;我们探讨了如何在 Spark SQL 中使用 Parquet 格式作为默认数据源。首先&#xff0c;我们了解了 Parquet 文件的存储特性&#xff0c;包括其二进制存储方式和内嵌的 Schema 信息。接着&#xff0c;通过一系列命令&#xff0c;我们演示了如何在 HDFS 上…