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

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

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

http://www.xdnf.cn/news/9974.html

相关文章:

  • ARXML解析与可视化工具
  • 硬件学习笔记--64 MCU的ARM核架构发展及特点
  • CentOS 7 环境中部署 LNMP(Linux + Nginx + MySQL 5.7 + PHP)
  • AI科技前沿动态:5.26 - 5.30 一周速览
  • Jetson Orin Nano - SONY imx415 camera驱动开发
  • 2025年5月24号高项综合知识真题以及答案解析(第1批次)
  • redis未授权(CVE-2022-0543)
  • Jvm 元空间大小分配原则
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 下
  • SolidWorks 文件打开时电脑卡顿问题分析与解决
  • 脱发因素机器学习数据分析
  • Windows10下使用QEMU安装Ubuntu20.04虚拟机,并启用硬件加速
  • Numpy 数组操作:高效的数据处理利器
  • 【AI赋能,视界升级】智微智能S134 AI OPS,重构智慧大屏未来
  • 『uniapp』添加桌面长按快捷操作 shortcuts(详细图文注释)
  • uniapp使用Canvas生成电子名片
  • 华为交换机命令:display css status
  • IDEA 在公司内网配置gitlab
  • 数据湖 (特点+与数据仓库和数据沼泽的对比讲解)
  • cursor rules设置:让cursor按执行步骤处理(分析需求和上下文、方案对比、确定方案、执行、总结)
  • SpringCloud——Docker
  • vscode中让文件夹一直保持展开不折叠
  • Spring Boot3.4.1 集成 mybatis plus
  • Spring Boot 中 @RequestParam 和 @RequestPart 的区别详解(含实际项目案例)
  • 【maker-pdf 文档文字识别(包含ocr),安装使用完整教程】
  • 云原生时代 Kafka 深度实践:03进阶特性与最佳实践
  • 【题解-洛谷】P7795 [COCI 2014/2015 #7] PROSJEK
  • Hive在实际应用中,如何选择合适的JOIN优化策略?
  • 探索三维螺旋线的几何奥秘:曲率与挠率的计算与可视化
  • python学习day33