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 {
    @Autowired
    private 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{
    @Autowired
    private DeptMapper deptMapper;
    @Override
    public 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 {
    @Autowired
    private DeptService deptService;
   
    @DeleteMapping("/depts/{id}")
    public Result delete(@PathVariable Integer id){
        log.info("根据id删除部门:{}",id);
        deptService.delete(id);
        //删除操作不需要返回数据,data返回null,调用success
        return 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{
    @Autowired
    private DeptMapper deptMapper;
   
    @Override
    public 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 {
    @Autowired
    private 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{
    @Autowired
    private DeptMapper deptMapper;

    @Override
    public 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 {
    @Autowired
    private DeptService deptService;

    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id){
        log.info("查询部门:{}",id);
        Dept dept=deptService.getById(id);
        return Result.success(dept);
    }

    @PutMapping
    public 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{
    @Autowired
    private DeptMapper deptMapper;
   
    /**
     * 根据id查询部门信息
     * @param id
     * @return
     */
    @Override
    public Dept getById(Integer id) {
        return deptMapper.getById(id);
    }

    /**
     * 更新部门信息
     * @param dept
     */
    @Override
    public 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既可以用在类上也可以用在方法上

五、总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

zabbix之邮箱告警,钉钉告警,电话告警

安装zabbix的服务器 zabbix-server 192.168.231.219 zabbix-agent 192.168.231.217 &#xff0c;已安装nginx 前提 Zabbix告警是指当监控项的值超过了预设的阈值时&#xff0c;Zabbix会向管理员发送告警信息&#xff0c;以便管理员及时处理问题。 浏览器访问 192.168.231.219…

肝了一周,整理了Python 从0到1学习路线(附思维导图和PDF下载)

前段时间&#xff0c;我们陆续分享了一些关于Python基础知识&#xff0c;以及现在比较流行的Python各领域的学习知识&#xff0c;后台有很多小伙伴反馈&#xff0c;想要系统的自学Python&#xff0c;希望我们可以提供一个框架&#xff0c;方便作为参考&#xff0c;学习Python。…

Using Definition View 使用定义视图

You use Definition view to create definitions within a defined hierarchical structure, in which nodes represent the definitions. A node is the visual representation of a section, step, or action that you can select, collapse,modify, and so on. 您可以使用“…

找风景视频素材,就上这5个网站。

找风景视频素材那一定要上这6个网站&#xff0c;免费下载&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富&#xff0c;网站主要还是以设计类素材为主&#xff0c;高清视频素材也很多&#xff0c;像风景…

网站分类seo怎么优化(如何调整有利于SEO排名)

网站分类seo怎么优化&#xff08;如何调整有利于SEO排名&#xff09; 这期分享一篇关于网站seo优化中关于网页分类排名优化的文章&#xff0c;看看原文来自 蝙蝠侠IT &#xff0c;原文标题网站分类&#xff0c;没有SEO标题&#xff0c;怎么办的文章介绍。 理想与现实总是充满矛…

学c语言可以过CCT里的c++吗?

学习 C 语言可以为学习 C 奠定一些基础&#xff0c;但它们是不同的语言&#xff0c;有各自独特的特点和用途。最近很多小伙伴找我&#xff0c;说想要一些c语言的资料&#xff0c;然后我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「c语言资料…

Linux控制---进程程序替换

前言&#xff1a;前面我们学洗了Linux进程退出的相关知识&#xff0c;了解了什么是进程退出&#xff0c;已经进程等待的相关话题&#xff0c;今天&#xff0c;我们来学习Linux中的进程程序替换&#xff0c;进程程序替换在Linux中可以用于实现新程序的启动、程序升级、多进程程序…

利用Vue+Echarts完成可视化任务

文章目录 任务一&#xff1a;用柱状图展示消费额最高的省份&#xff08;一&#xff09;提出任务&#xff08;二&#xff09;准备工作1、利用postman访问接口数据2、安装node.js3、输入更换镜像源为淘宝源4、清除npm缓存5、安装vue脚手架6、创建vue项目7、启动vue项目 任务一&am…

C语言判断闰年(ZZULIOJ1028: I love 闰年!)

题目描述 根据一个年份&#xff0c;判断是否是闰年。 输入&#xff1a;输入为一个整数&#xff0c;表示一个年份。 输出&#xff1a;如果是闰年&#xff0c;输出"Yes"&#xff0c;否则输出"No"。输出单独占一行。 样例输入 Copy 2012 样例输出 Copy Yes 分…

UE5 - UI Material Lab 学习笔记

1、学习资料收集 UI Material Lab : https://www.unrealengine.com/marketplace/zh-CN/product/ui-material-lab 视频1&#xff1a;https://www.bilibili.com/video/BV1Hm4y1t7Kn/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 视…

关闭RecyclerView惯性滚动,以及多个RecyclerView在嵌套滚动中的注意事项

前言&#xff1a; 当前RecyclerView 下拉到顶部 或者 上拉到底部时&#xff0c;虽然滚动列表停止了&#xff0c;但惯性任务并没有结束&#xff0c;一些特殊需求可能受到影响&#xff0c;需要手动停止。 1. RecyclerView源码 调用 rv.stopScroll() 停止&#xff1b; 2. Recycl…

网工内推 | 急聘网络运维,周末双休,厂商认证优先

01 湖北华特信息技术有限公司 招聘岗位&#xff1a;网络运维工程师&#xff08;双休急聘&#xff09; 职责描述&#xff1a; 1、 负责局域网交换机、路由器、防火墙等设备维护&#xff1b; 2、熟悉OSPF动态路由协议&#xff0c;有实施或维护经验&#xff1b; 3、 熟悉网络架构…

Java方法中不使用的对象应该手动赋值为NULL吗?

在java方法中&#xff0c;不使用的对象是否应该手动赋值为null&#xff1f;我们先来通过一个示例看一下。 垃圾回收示例一 public class GuoGuoTest {public static void main(String[] args) {byte[] placeholder new byte[64 * 1024 * 1024];System.gc();} } 上面代码向内…

Radiology 谈人工智能在放射学领域的10个预测方向 [文献阅读]

人工智能(AI)和信息学正在改变放射学。十年前&#xff0c;没有哪个专家会预测到今天放射人工智能行业的蓬勃发展&#xff0c;100多家人工智能公司和近400种放射人工智能算法得到了美国食品和药物管理局(FDA)的批准。 不到一年前&#xff0c;即使是最精明的预言家也不会相信这些…

kubernetes资源管理

资源管理 资源管理介绍 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管理kubernetes。 kubernetes的本质上就是一个集群系统&#xff0c;用户可以在集群中部署各种服务&#xff0c;所谓的部署服务&#xff0c;其实就是在kubernetes集…

Java设计模式-结构型模式-适配器模式

适配器模式 适配器模式应用场景案例类适配器模式对象适配器模式接口适配器模式适配器模式在源码中的使用 适配器模式 如图&#xff1a;国外插座标准和国内不同&#xff0c;要使用国内的充电器&#xff0c;就需要转接插头&#xff0c;转接插头就是起到适配器的作用 适配器模式&…

unity使用vs进行c#代码提示,查看F12unity元代码

unity关联vs 在vs中让cs.meta显示&#xff0c;鼠标右键&#xff0c;包含在内 提示GameObject类了 感谢下面这位的提示https://zhuanlan.zhihu.com/p/551119106

esp-01刷固件/下载软件到内部单片机的方法

此文章为转载&#xff0c;非原创 一、准备 需要准备三个东西&#xff1a; 1.esp模块。ESP-01 和 ESP-01s 的引脚及 flash 容量基本完全兼容&#xff0c;只是内部硬件设计粗糙与否的区别&#xff0c;所以理论上都适用。 2.官方固件。此部分可以从安信可官方教程中下载&#xff0…

腾讯待办停止运营怎么办?导出的ics文件数据怎么打开查看

待办提醒类工具是日常办公及生活中必不可少的工具&#xff0c;使用待办提醒类工具可以记录很多容易忘记的事情&#xff0c;其可以帮助大家轻松管理各项事务和提高办事的效率。而随着工作的不断变动&#xff0c;大家选择待办提醒类工具也会不断的发生改变。 比如就拿我自己的使…

【算法总结】归并排序专题(刷题有感)

思考 一定要注意归并排序的含义&#xff0c;思考归并的意义。 主要分为两个步骤&#xff1a; 拆分 每次对半分(mid l r >> 1)输入&#xff1a;raw整块&#xff0c;输出&#xff1a;raw左块 raw右块 合并 每次都要对raw左块、 raw右块按照某种规则进行合并输入&#xf…