当前位置: 首页 > 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);

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

http://www.lryc.cn/news/2392879.html

相关文章:

  • LangChain实战:MMR和相似性搜索技术应用
  • 第 1 章:学习起步
  • SQL查询——大厂面试真题
  • Linux-pcie ranges介绍
  • ⭐ Unity AVProVideo插件自带播放器 脚本重构 实现视频激活重置功能
  • 互联网大厂Java求职面试:云原生微服务架构设计与AI大模型集成实战
  • 详解K8s API Server 如何处理请求的?
  • 微调数据处理
  • ✨1.1.1 按位与运算替代求余运算优化场景
  • 解决开发者技能差距:AI 在提升效率与技能培养中的作用
  • XCTF-web-easyphp
  • Transformer 通关秘籍11:Word2Vec 及工具的使用
  • 【DAY34】GPU训练及类的call方法
  • Flutte ListView 列表组件
  • muduo库的初步认识和基本使用,创建一个简单查询单词服务系统
  • 电脑如何保养才能用得更久
  • Oracle的NVL函数
  • 【HTML/CSS面经】
  • git查看commit属于那个tag
  • 如何从ISO镜像直接制作Docker容器基础镜像
  • 网站缓存入门与实战:浏览器与Nginx/Apache服务器端缓存,让网站速度起飞!(2025)
  • mysql-mysql源码本地调试
  • PCIe— Legacy PCI
  • PostgreSQL数据库配置SSL操作说明书
  • MySQL 的 super_read_only 和 read_only 参数
  • 低碳理念在道路工程中的应用-预制路面
  • 12-后端Web实战(登录认证)
  • TIDB创建索引失败 mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directory.
  • Redis 插入中文乱码键
  • Mac OS 使用说明