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

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

菜鸟之路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 {@Autowiredprivate 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 {@Autowiredprivate DeptMapper deptMapper;//依赖注入获得一个dept对象@Overridepublic 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

    @Overridepublic 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

    @Overridepublic 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

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

DeptMapper

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

DeptController

    /** 修改部门信息* */@PutMappingpublic Result updateDept(@RequestBody Dept dept){log.info("修改部门");deptService.updateDept(dept);return Result.success();}

DeptServiceImpl

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

DeptMapper

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

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

相关文章:

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

菜鸟之路Day36一一Web开发综合案例&#xff08;部门管理&#xff09; 作者&#xff1a;blue 时间&#xff1a;2025.5.28 文章目录 菜鸟之路Day36一一Web开发综合案例&#xff08;部门管理&#xff09;一.环境搭建二.开发规范三.部门管理3.1查询3.2删除3.3新增3.3修改根据id来…...

LangChain实战:MMR和相似性搜索技术应用

导读&#xff1a;在当今大数据和人工智能快速发展的背景下&#xff0c;向量数据库的搜索技术正成为技术人员必须掌握的核心技能。本文将深入探讨LangChain框架与Milvus向量数据库的整合实践&#xff0c;重点对比分析相似度搜索与最大边际相关性&#xff08;MMR&#xff09;搜索…...

第 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 时自动重置播放位置到开头 可配置是否在重置后自…...

互联网大厂Java求职面试:云原生微服务架构设计与AI大模型集成实战

互联网大厂Java求职面试&#xff1a;云原生微服务架构设计与AI大模型集成实战 面试场景设定 人物设定&#xff1a; 李明&#xff08;技术总监&#xff09;&#xff1a;拥有15年分布式系统架构经验&#xff0c;主导过多个亿级用户系统的重构&#xff0c;对云原生和AI融合有深…...

详解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…...

✨1.1.1 按位与运算替代求余运算优化场景

在计算机编程中&#xff0c;使用按位与运算&#xff08;&&#xff09;替代求余运算&#xff08;%&#xff09;可以提高效率的特殊场景是&#xff1a;当除数是 2 的整数次幂&#xff08;即 ( b 2^n )&#xff0c;其中 ( n ) 为自然数&#xff09;时。例如&#xff0c;( b …...

解决开发者技能差距: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;是⼀个基于 非阻塞…...

电脑如何保养才能用得更久

在这个数字化的时代&#xff0c;电脑已经成为了我们生活和工作中不可或缺的伙伴。无论是处理工作文档、追剧娱乐&#xff0c;还是进行创意设计&#xff0c;电脑都发挥着至关重要的作用。那么&#xff0c;如何让我们的电脑“健康长寿”&#xff0c;陪伴我们更久呢&#xff1f;今…...

Oracle的NVL函数

Oracle的NVL函数是一个常用的空值处理函数&#xff0c;主要用于在查询结果中将NULL值替换为指定的默认值。以下是关于NVL函数的详细说明&#xff1a; ‌基本语法‌ NVL(expr1, expr2) 如果expr1为NULL&#xff0c;则返回expr2如果expr1不为NULL&#xff0c;则返回expr1本身 ‌…...

【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 以缩…...

如何从ISO镜像直接制作Docker容器基础镜像

引言 这段最值得总结的经验知识,就是如何在ISO镜像的基础上&#xff0c;直接做出docker base image&#xff0c;无需联网! 特别地&#xff0c;对于一些老旧OS系统&#xff0c;都能依此做出docker base image&#xff01; 例如,某些老旧系统&#xff0c;CentOS 6&#xff0c;…...

网站缓存入门与实战:浏览器与Nginx/Apache服务器端缓存,让网站速度起飞!(2025)

更多服务器知识&#xff0c;尽在hostol.com 嘿&#xff0c;各位站长和网站管理员朋友们&#xff01;咱们精心打造的网站&#xff0c;内容再好&#xff0c;设计再炫&#xff0c;如果用户打开它的时候&#xff0c;加载速度慢得像“老牛拉破车”&#xff0c;那体验可就大打折扣了…...

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;…...

MySQL 的 super_read_only 和 read_only 参数

MySQL 的 super_read_only 和 read_only 参数 一、参数基本概念 1. read_only 参数 作用&#xff1a;控制普通用户是否只能读取数据影响范围&#xff1a;所有非SUPER权限的用户默认值&#xff1a;OFF&#xff08;可读写&#xff09; 2. super_read_only 参数 作用&#xf…...

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

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

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

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

TIDB创建索引失败 mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directory.

TIDB创建索引失败&#xff1a;解决“mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directory”问题 在使用 TIDB 数据库时&#xff0c;我们有时会遇到创建索引失败的问题。常见的错误信息为&#xff1a; mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directo…...

Redis 插入中文乱码键

Java 代码&#xff1a; Bean// 静态代理模式: Redis 客户端代理类增强public StringRedisTemplateProxy stringRedisTemplateProxy(RedisKeySerializer redisKeySerializer,StringRedisTemplate stringRedisTemplate,RedissonClient redissonClient) {stringRedisTemplate.setK…...