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

article/2025/8/28 3:50:39

菜鸟之路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);

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


http://www.hkcw.cn/article/TRLtPZRXfL.shtml

相关文章

一周学会Pandas2之Python数据处理与分析-Pandas2数据合并与对比-df.compare():差异高亮

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili df.compare()&#xff1a;差异高亮 df.compare() 是 pandas 中用于 高效比较两个 DataFrame 差异 的方法&#xff0…

uniapp安卓App自定义相机(身份证相机)

效果图&#xff1a; 实现思路&#xff1a; 本人也是第一次做app的自定义相机功能&#xff0c;找了相关文章后&#xff0c;发现uniapp自带的相机组件是不能实现在app中自定义相机的功能&#xff0c;因为不支持。按照前辈们的思路&#xff0c;是使用uniapp中的live-pusher直播组…

【软件安装】非华为手机安装华为电脑管家(14.0.5.8 C233)(附带安装包下载地址)

前言 华为电脑管家是一款专为华为电脑用户设计的综合管理软件&#xff0c;提供了多种实用功能&#xff0c;旨在优化电脑性能并提升用户体验。其拥有以下特色功能&#xff1a; 互传功能&#xff1a; 快速传输&#xff1a;华为电脑管家支持与华为手机之间的快速文件传输。用户可…

明基RD280U编程显示器深度测评:码农的「第二块键盘」竟然会发光?

文章目录 前言一、开箱篇&#xff1a;当理工男遇到「俄罗斯套娃式包装」二、外观篇&#xff1a;深空灰的「代码容器」1. 桌面变形记2. 保护肩颈的人体工学设计 三、显示篇&#xff1a;给代码做「光子嫩肤」1. 28寸超大大屏 3:2屏比 4K超清2.专业编程模式&#xff0c;让代码一…

一次电脑感染Synaptics Pointing Device Driver病毒的经历,分享下经验

没想到作为使用电脑多年的老司机也会电脑中病毒&#xff0c;周末玩电脑的时候突然电脑很卡&#xff0c;然后自动重启&#xff0c;奇怪&#xff0c;之前没出现这个情况。 重启后电脑开机等了几十秒&#xff0c;打开任务管理器查看开机进程&#xff0c;果然发现有个Synaptics Po…

给出一个基于 ESP32(Espressif ESP-IDF)来连接并向蓝牙耳机发送音频的方案示例。该方案的核心思路是让 ESP32 充当「A2DP Source」(与手机类似)

下面给出一个基于 ESP32&#xff08;Espressif ESP-IDF&#xff09;来连接并向蓝牙耳机发送音频的方案示例。该方案的核心思路是让 ESP32 充当「A2DP Source」&#xff08;与手机类似&#xff09;&#xff0c;而蓝牙耳机则是「A2DP Sink」。这样&#xff0c;ESP32 能够像手机一…

2025真正可行的手机安装Kali Linux方法!

很久前&#xff0c;我出了一期termux安装kali linux视频&#xff0c;有很多问题&#xff0c;这次加以记录和整理&#xff0c;总体来说&#xff0c;大多是国际网络问题和linux命令错误&#xff0c;就算实现了国际网络&#xff0c;但你的安装程序不一定通过国际网络进行&#xff…

程序员编程利器一明基RD280U显示器

目录 ​编辑 一、引言 二、开箱验货 三、丝滑极致深度体验 独特屏比&#xff0c;让代码阅读如鱼得水 超大巨幕&#xff0c;释放监控细节 专业编程模式&#xff0c;打造舒适视觉环境 强大护眼功能&#xff0c;呵护眼睛健康 丰富扩展功能&#xff0c;提升工作便捷性 智…

程序员六一八干什么?种草很久的专业编程显示器终于能入了

文章目录 引言一、 显示器热门活动1.1 明基RD系列编程显示器&#xff1a;程序员的护眼利器1.2 限时优惠来袭&#xff0c;程序员换机好时机 二、极致编程体验2.1 3:2屏幕比和超4K分辨率2.2 专业编程色彩模式2.3 护眼技术和功能2.3.1 硬件滤蓝光2.3.2 抗反射面板2.3.3 MoonHalo舒…

C盘爆满?一键清理恢复极速体验!“小番茄C盘清理”彻底解放你的电脑

目录 前言 C盘变红&#xff1f;&#xff01;那么你的电脑将会出现下面糟糕的情况&#xff1a; 一、小番茄C盘清理介绍——拯救你的C盘爆红&#xff01; 二、安装登录小番茄C盘清理 2.1 安装小番茄C盘清理 2.2 登录—拥有专属自己电脑的小番茄C盘清理 三、手把手教你深度…

联想电脑麦克风阵列问题及解决办法!!!

前两天即将面试时候进入到腾讯会议出现了这样问题&#xff1a;检测到麦克风阵列异常。如果你也遇到麦克风问题&#xff0c;可以参考我的总结&#xff1a; 时间紧急&#xff0c;我首先是怀疑自己之前跟着网上买的工具做电脑清灰打开后盖碰到了麦克风模块什么的影响到了系统检查不…

oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】

oracle goldengate实现postgresql 到 postgresql的实时同步 源端&#xff1a;postgresql1 -> postgresql2 流复制主备同步 目标端&#xff1a;postgresql 数据库版本&#xff1a;postgresql 12.14 ogg版本&#xff1a;21.3 架构图&#xff1a; 数据库安装以及流复制主备…

服务器带宽基础知识

服务器带宽基础知识详解 一、带宽的定义与基本概念 服务器带宽&#xff08;Bandwidth&#xff09;是指服务器与互联网之间在单位时间内传输数据的能力&#xff0c;通常以 Mbps&#xff08;兆比特每秒&#xff09; 或 Gbps&#xff08;吉比特每秒&#xff09; 为单位衡量。它决…

如何在本地部署小智服务器:从源码到全模块运行的详细步骤

小智聊天机器人本地后台服务器源码全模块部署 作者&#xff1a;林甲酸 -不是小女子也不是女汉子 是大女子 更新日期&#xff1a;2025年4月29日 &#x1f3af; 前言&#xff1a;为什么要写这篇教程&#xff1f; 上周按照虾哥小智服务器的教程去部署本地后台&#xff0c;我用的是…

【Linux实践系列】:进程间通信:万字详解命名管道实现通信

&#x1f525; 本文专栏&#xff1a;Linux Linux实践项目 &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 与其等待完美的风&#xff0c;不如学会在逆风中调整帆的角度——所有伟大航程都始于此刻出发的勇气 ★★★ 本文前置知…

nginx配置反向代理服务器,实现在https网站中请求http资源

文章目录 一、前言二、Nginx反向代理的工作原理三、Nginx反向代理的主要功能‌四、Nginx反向代理的配置和使用场景五、实战配置5.1 首先&#xff0c;修改宝塔面板配置5.2 接着配置代理服务器5.3 完成上面所有配置后5.4最后还要在原来的index.html文件里添加5.5 或者可以操作服务…

鲲鹏服务器+昇腾卡(Atlas 300I pro)搭建DeepSeek-R1-Distill-Qwen-7B(自己存档详细版)

参考文章&#xff1a;https://modelers.cn/models?namedeepseek&page1&size16 https://www.hiascend.com/software/modelzoo/models/detail/11aa2a48479d4d229a9830b8e41fc011 当前服务器配置为&#xff1a;2 * 鲲鹏920 2 * Atlas 300I pro 系统&#xff1a;open Eul…

Tongweb7049M4有关SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱的处理方案(by lqw)

前提条件&#xff1a;Tongweb7049M4已在http通道里配置了https&#xff08;如何配置https可以参考这个帖子&#xff1a;东方通TongWEB添加Https证书&#xff0c;开启SSL&#xff09; 遇到客户在配置了https后&#xff0c;扫描漏洞提示&#xff1a; 有关SSL/TLS 服务器瞬时 Dif…

[原因和较为完美的解决方法]远程主机可能不符合 glibc 和 libstdc++ Vs code 服务器的先决条件

省流&#xff1a;把vscode降低到1.98版本并关闭自动更新 今天打开vscode&#xff0c;突然发现连接不了本地的虚拟主机ubuntu了&#xff0c;并且报了本文标题所示的错误。 vscode的具体报错如下&#xff1a; 原因是&#xff1a;&#xff08;从别人的文章摘过来的&#xff09; 通…

金蝶K3服务器安装与配置方法详细图解手册

金蝶K3服务器安装与配置方法详细图解手册 【下载地址】金蝶K3服务器安装与配置方法详细图解手册 本开源项目提供了一份详尽的《金蝶K3服务器安装与配置方法》图文教程&#xff0c;帮助用户轻松掌握金蝶K3系统的安装与配置。教程涵盖了服务器硬件配置、K3中间件、客户端以及数据…