JavaWeb Day10 案例-部门管理

目录

一、查询部门

(一)需求

(二)思路

(三)查询部门

(四)、前后端联调

二、删除

(一)需求

(二)思路

(三)删除部门

①controller层

②mapper层(接口)

③service层

1.接口

2.实现类

④结果

1.后端数据库

2.postman接口测试:注意请求路径/请求方式/请求参数

3.后端数据库(已删除)

4.前端操作

5.后端数据库

三、新增

(一)需求

(二)思路

(三)新增部门

①controller层

②service层

1.接口

2.实现类

③mapper层

④结果

1.后端数据库

2.postman接口测试:注意请求路径/请求方式/请求参数

3.后端数据库(已新增)

4.前端操作

5.后端数据库

四、修改

(一)需求

(二)思路

(三)修改部门

 ①Controller层

②Mapper层

③Service层

1.接口

2.实现类

④结果

1.后端数据库

2.postman接口测试:注意请求路径/请求方式/请求参数

3.后端数据库(失败)

5.后端数据库

五、简化

五、总结


一、查询部门

(一)需求

接口文档

(二)思路

前端发起查询部门的请求

该请求被DeptController进行处理,不能进行数据逻辑处理和服务操作,调用Service层DeptService

而Service是进行逻辑处理的,要操作数据库需要调用Mapper层

通过Mapper接口访问数据库,执行SQL语句,将回去的结果返回给Service

Service将结果进行逻辑处理再返回给Controller

Controller将查询结果封装在同一响应结果封装在Result中,响应给前端

(三)查询部门

①Controller层

DeptController.java

package com.itheima.controller;import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@Slf4j
public class DeptController {@Autowiredprivate DeptService deptService;@GetMapping("/depts")public Result list(){log.info("查询全部部门数据");List <Dept> deptList=deptService.list();return Result.success(deptList);}
}

1.注解

@RequestMapping需要指定请求路径和指定请求方式,较为繁琐

@GetMapping只需要指定请求路径即可(PostMapping/DeleteMapping/)

2.输出Mybatis日志

@Slf4j

调用log.Info()

3.调用方法

创建一个private私有的Service层对象deptService,调用其方法list()

②Service层

1.DeptService.java接口

package com.itheima.service;import com.itheima.pojo.Dept;
import java.util.List;public interface DeptService {/*** 查询全部部门数据* @return*/List<Dept> list();
}

在Service层的接口DeptService中声明方法即可 

2.DeptServiceImpl.java实现类

package com.itheima.service.impl;
import com.itheima.mapper.DeptMapper;
import com.itheima.pojo.Dept;
import com.itheima.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class DeptServiceImpl implements DeptService{@Autowiredprivate DeptMapper deptMapper;@Overridepublic List<Dept> list() {return deptMapper.list();}
}

在Service层的DeptServiceImpl实现类中定义list()方法体

创建一个Mapper层对象,调用其list()方法 

③Mapper层

DeptMapper.java接口

package com.itheima.mapper;import com.itheima.pojo.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** 部门管理*/
@Mapper
public interface DeptMapper {/*** 查询全部部门** @return*/@Select("select * from dept")List<Dept> list();
}

Mapper层仅仅是一个接口,面向注解编程,@Select中编写SQL语句即可

结果

PostMan报错

404:找不到资源,无非就是接口路径,提交方式、参数类型、返回结果类型有问题。
刚开始是请求路径写错了

500:检查数据库密码和名称是否配置正确

(四)、前后端联调

将前后端过程启动起来,然后访问前端工程,通过前端工程访问服务端程序,进而进行调试

二、删除

(一)需求

(二)思路

(三)删除部门

①controller层

DeptController.java

package com.itheima.controller;import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@Slf4j
public class DeptController {@Autowiredprivate DeptService deptService;@DeleteMapping("/depts/{id}")public Result delete(@PathVariable Integer id){log.info("根据id删除部门:{}",id);deptService.delete(id);//删除操作不需要返回数据,data返回null,调用successreturn Result.success();}
}

②mapper层(接口)

DeptMapper.java

package com.itheima.mapper;import com.itheima.pojo.Dept;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** 部门管理*/
@Mapper
public interface DeptMapper {/*** 根据id删除部门* @param id*/@Delete("delete from dept where id=#{id}")void deleteById(Integer id);
}

③service层

1.接口

DeptService.java

package com.itheima.service;import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;import java.util.List;public interface DeptService {/*** 根据id删除部门信息* @return*/void delete(Integer id);
}
2.实现类

DepyServiceImpl.java

package com.itheima.service.impl;
import com.itheima.mapper.DeptMapper;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class DeptServiceImpl implements DeptService{@Autowiredprivate DeptMapper deptMapper;@Overridepublic void delete(Integer id) {deptMapper.deleteById(id);}}

④结果

注意:同时启动前后端服务器

1.后端数据库

2.postman接口测试:注意请求路径/请求方式/请求参数

3.后端数据库(已删除)

4.前端操作

此时访问前端页面,id=5的部门已经删除

接下来在前端界面执行删除操作,删除id=4的部门

5.后端数据库

此时查看数据库,id=4的部门已删除

注意级联删除

三、新增

(一)需求

(二)思路

我们只需要接收页面传递过来的参数,将参数保存到数据库即可,底层就是Insert语句

(三)新增部门

①controller层

DeptController.java

package com.itheima.controller;import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@Slf4j
public class DeptController {@Autowiredprivate DeptService deptService;/*** 新增部门** @return*/@PostMapping("/depts")public Result add(@RequestBody Dept dept){log.info("新增部门:{}",dept);deptService.add(dept);return Result.success();}
}

②service层

1.接口

DeptService.java

package com.itheima.service;import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;import java.util.List;public interface DeptService {/*** 新增部门数据* @return*/void add(Dept dept);
}
2.实现类

DeptServiceImpl.java

package com.itheima.service.impl;
import com.itheima.mapper.DeptMapper;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;
import java.util.List;@Service
public class DeptServiceImpl implements DeptService{@Autowiredprivate DeptMapper deptMapper;@Overridepublic void add(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setUpdateTime(LocalDateTime.now());deptMapper.insert(dept);}}

③mapper层

DeptMapper.java

package com.itheima.mapper;import com.itheima.pojo.Dept;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** 部门管理*/
@Mapper
public interface DeptMapper {/*** 新增部门信息** @return*/@Insert("insert into dept (name,create_time,update_time)values(#{name},#{createTime},#{updateTime}) ")void insert(Dept dept);
}

④结果

注意:同时启动前后端服务器

1.后端数据库

2.postman接口测试:注意请求路径/请求方式/请求参数

3.后端数据库(已新增)

4.前端操作

此时访问前端页面,就业部已经新增

接下来在前端界面执行新增操作,

5.后端数据库

此时查看数据库,销售部已增加

四、修改

(一)需求


 

(二)思路

关于P139的修改问题,原理很简单,我们从控制台可以看到,当点击修改按钮时,会发送一个get查询id请求,

然后你需要返回那一个ID的单行数据,然后返回完之后会显示当前修改的部门名称,然后你就可以写修改部门的Put方法,对应了 编辑按钮和确定按钮的请求方式,前端的代码是不需要我们改的,参照接口文档写路径就行

(三)修改部门

 ①Controller层

DeptController.java

package com.itheima.controller;import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/depts")
@Slf4j
public class DeptController {@Autowiredprivate DeptService deptService;@GetMapping("/{id}")public Result getById(@PathVariable Integer id){log.info("查询部门:{}",id);Dept dept=deptService.getById(id);return Result.success(dept);}@PutMappingpublic Result update(@RequestBody Dept dept){log.info("修改部门信息:{}",dept);deptService.update(dept);return Result.success();}}

②Mapper层

DeptMapper.java

package com.itheima.mapper;import com.itheima.pojo.Dept;
import org.apache.ibatis.annotations.*;import java.util.List;/*** 部门管理*/
@Mapper
public interface DeptMapper {/*** 根据id查询部门信息* @param id* @return*/@Select("select * from dept where id=#{id}")Dept getById(Integer id);/*** 更新部门信息* @param dept*/@Update("update dept set name=#{name},create_time=#{createTime},update_time=#{updateTime} where id=#{id}")void update(Dept dept);
}

③Service层

1.接口

DeptService.java

package com.itheima.service;import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;import java.util.List;public interface DeptService {/*** 根据id查询部门信息* @param id* @return*/Dept getById(Integer id);/*** 更新部门信息* @param dept*/void update(Dept dept);
}
2.实现类

DeptServiceImpl.java

package com.itheima.service.impl;
import com.itheima.mapper.DeptMapper;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;
import java.util.List;@Service
public class DeptServiceImpl implements DeptService{@Autowiredprivate DeptMapper deptMapper;/*** 根据id查询部门信息* @param id* @return*/@Overridepublic Dept getById(Integer id) {return deptMapper.getById(id);}/*** 更新部门信息* @param dept*/@Overridepublic void update(Dept dept) {dept.setUpdateTime(LocalDateTime.now());deptMapper.update(dept);}}

④结果

注意:同时启动前后端服务器

1.后端数据库

2.postman接口测试:注意请求路径/请求方式/请求参数

按下编辑,根据id查询部门信息

按下确认修改信息

3.后端数据库(失败)

这里我也不知道为什么postman报错,而前端是正确的

按道理CreateTime不为空才对,@RequestBody把前端响应的JSON参数封装成Dept对象,只传递了id和name,要修改的只有name和updateTime,而前端请求的时候后端响应包括数据库都是在取得,这里我也不知道为什么????????

4.前端操作

点击编辑,发出查询请求,然后回显信息

接下来在前端界面执行修改操作,

5.后端数据库

此时查看数据库,学工部名称已修改

五、简化

公共路径抽取出来

RequestMapping既可以用在类上也可以用在方法上

五、总结

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复杂数据统计与R语言程序设计实验二

1、创建一个对象&#xff0c;并进行数据类型的转换、判别等操作&#xff0c;步骤如下。 ①使用命令清空工作空间&#xff0c;创建一个对象x&#xff0c;内含元素为序列&#xff1a;1&#xff0c;3&#xff0c;5&#xff0c;6&#xff0c;8。 ②判断对象x是否为数值型数据。 ③…

本地开发环境和服务器传输数据的几种方法

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Vulkan渲染引擎开发教程 一、开发环境搭建

一 安装 Vulkan SDK Vulkan SDK 就是我们要搞的图形接口 首先到官网下载SDK并安装 https://vulkan.lunarg.com/sdk/home 二 安装 GLFW 窗口库 GLFW是个跨平台的小型窗口库&#xff0c;也就是显示窗口&#xff0c;图形的载体 去主页下载并安装&#xff0c;https://www.glfw.…

C语言的由来与发展历程

C语言的起源可以追溯到上世纪70年代&#xff0c;由Dennis Ritchie在贝尔实验室开发出来。C语言的设计目标是提供一种简洁、高效、可移植的编程语言&#xff0c;以便于开发底层的系统软件。在那个时代&#xff0c;计算机技术正在迅速发展&#xff0c;出现了多种高级编程语言&…

html使用天地图写一个地图列表

一、效果图&#xff1a; 点击左侧地址列表&#xff0c;右侧地图跟着改变。 二、代码实现&#xff1a; 一进入页面时&#xff0c;通过body调用onLoad"onLoad()"函数&#xff0c;确保地图正常显示。 <body onLoad"onLoad()"><!--左侧代码-->…

QCheckBox样式表

1、QCheckBox选择器和指示器类型 选择器类型描述QCheckBoxQCheckBox 的默认选择器。QCheckBox::indicatorQCheckBox 的指示器,即复选框的标记部分。QCheckBox::indicator:checkedQCheckBox 选中状态下的指示器。QCheckBox::indicator:uncheckedQCheckBox 未选中状态下的指示器…

MyBatis逆向工程

新建Maven工程 <build><plugins><plugin><!--mybatis代码自动生成插件--><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.6</version><confi…

2023年中职“网络安全“—Web 渗透测试②

2023年中职“网络安全“—Web 渗透测试② Web 渗透测试任务环境说明&#xff1a;1.访问http://靶机IP/web1/,获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b;2.访问http://靶机IP/web2/,获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b;3.访问http://靶机IP/web…

ClickHouse建表优化

1. 数据类型 1.1 时间字段的类型 建表时能用数值型或日期时间型表示的字段就不要用字符串&#xff0c;全String类型在以Hive为中心的数仓建设中常见&#xff0c;但ClickHouse环境不应受此影响。 虽然ClickHouse底层将DateTime存储为时间戳Long类型&#xff0c;但不建议存储Long…

[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案

原文&#xff1a;[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案 一飞开源&#xff0c;介绍创意、新奇、有趣、实用的开源应用、系统、软件、硬件及技术&#xff0c;一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区&#xff0…

【数据结构初阶】链表OJ

链表OJ 题目一&#xff1a;移除链表元素题目二&#xff1a;反转链表题目三&#xff1a;链表的中间节点题目四&#xff1a;链表中倒数第k个结点题目五&#xff1a;合并两个有序链表题目六&#xff1a;链表分割题目七&#xff1a;链表的回文结构题目八&#xff1a;相交链表题目九…

遗传算法GA-算法原理与算法流程图

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一、遗传算法流程图 1.1. 遗传算法流程图 二、遗传算法的思想与机制 2.1 遗传算法的思想 2.2 遗传算法的机制介绍 三、 遗传算法的算法流程 3.1 遗传算法的算法…

Ubuntu20.04 安装微信 【优麒麟的镜像源方式安装】

缺点&#xff1a;是网页版本的嵌入&#xff0c;功能少。 推荐wine方式安装&#xff1a;Ubuntu20.04 安装微信 【wine方式安装】推荐 从优麒麟的镜像源安装原生微信 应用下载-优麒麟&#xff5c;Linux 开源操作系统 新建文件software.list sudo vi /etc/apt/sources.list.d/…

损失函数(Loss Function)与代价函数(Cost Function)、目标函数(Objective Function)区别

损失函数定义在单个样本上&#xff0c;算的是一个样本的误差。 代价函数定义在整个训练集上&#xff0c;是所有样本误差的平均&#xff0c;也就是损失函数的平均。 目标函数定义为最终需要优化的函数&#xff0c;等于经验风险 结构风险&#xff08;也就是Cost Function 正则化…

提升工作效率,打造精细思维——OmniOutliner 5 Pro for Mac

在当今快节奏的工作环境中&#xff0c;如何高效地组织和管理我们的思维和任务成为了关键。而OmniOutliner 5 Pro for Mac正是为此而生的一款强大工具。无论你是专业写作者、项目经理还是学生&#xff0c;OmniOutliner 5 Pro for Mac都能帮助你提升工作效率&#xff0c;打造精细…

【开源】基于JAVA的服装店库存管理系统

项目编号&#xff1a; S 052 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S052&#xff0c;文末获取源码。} 项目编号&#xff1a;S052&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…

正则表达式入门教程

一、本文目标 让你明白正则表达式是什么&#xff0c;并对它有一些基本的了解&#xff0c;让你可以在自己的程序或网页里使用它。 二、如何使用本教程 文本格式约定&#xff1a;专业术语 元字符/语法格式 正则表达式 正则表达式中的一部分(用于分析) 对其进行匹配的源字符串 …

Kafka的重要组件,谈谈流处理引擎Kafka Stream

系列文章目录 上手第一关&#xff0c;手把手教你安装kafka与可视化工具kafka-eagle Kafka是什么&#xff0c;以及如何使用SpringBoot对接Kafka 架构必备能力——kafka的选型对比及应用场景 Kafka存取原理与实现分析&#xff0c;打破面试难关 防止消息丢失与消息重复——Kafka可…

CentOS挂载:解锁文件系统的力量

目录 引言1 挂载简介2 挂载本地分区3 挂载网络共享文件系统4 使用CIFS挂载结论 引言 在CentOS&#xff08;一种基于Linux的操作系统&#xff09;上挂载文件系统是一项常见而重要的任务&#xff0c;无论是将新的磁盘驱动器添加到系统&#xff0c;还是挂载网络共享资源&#xff…