【JavaWeb | 第七篇】部门管理项目实战

目录

一、删除部门

[1.1 简单请求参数接收的三种方式](#1.1 简单请求参数接收的三种方式)

[1.2 三层架构实现](#1.2 三层架构实现)

二、新增部门

[2.1 Json格式的请求参数的接收​编辑](#2.1 Json格式的请求参数的接收编辑)

[2.2 三层架构实现](#2.2 三层架构实现)

三、修改部门

[3.1 路径参数的接收](#3.1 路径参数的接收)

[3.2 查询回显](#3.2 查询回显)

[3.3 修改数据](#3.3 修改数据)


一、删除部门

1.1 简单请求参数接收的三种方式

在之前的文章当中,我们基本上实现的都是后端不接收参数的功能实现,如果我们想要接收前端带来的参数,比如要实现删除部门的操作,我们需要一个id来唯一标识想要删除的部门,那么这个id值后端的Controller层应该如何接收呢?

有三种接收简单请求参数的方式:

方式一 :通过原始的HttpServletRequest对象获取请求参数。

java 复制代码
    @DeleteMapping("/depts")
    public Result delete(HttpServletRequest request) {
        String idStr = request.getParameter("id");
        int id = Integer.parseInt(idStr);
        System.out.println("要删除的部门id为:" + id);
        return Result.success();
    }

通过HttpServletRequest对象接收的参数类型是String类型,需要手动转换类型,步骤繁琐。

方式二:通过Spring提供的**@RequestParam** 注解,将请求参数绑定给形参。

java 复制代码
    /*
    方式二:通过Spring提供的@RequestParam注解将接收的参数绑定给形参
    */
    @DeleteMapping("/depts")
    public Result delete(@RequestParam("id") Integer deptId){
        System.out.println("要删除的部门id为:" + deptId);
        return Result.success();
    }

方式三 :如果 **请求参数名** 和 **形参变量名** 相同,直接定义方法形参即可接收,省略@RequestParam 注解。

java 复制代码
    @DeleteMapping("/depts")
    public Result delete(Integer id){
        deptService.deleteById(id);
        return Result.success();
    }

1.2 三层架构实现

Controller层在上面已经实现了,接下来应该实现业务逻辑层Service层,以及数据持久化层Mapper层。

Service层:

java 复制代码
    @Override
    public void deleteById(Integer id) {
        deptMapper.deleteById(id);
    }

Mapper层:

在这里使用预编译SQL,来防止SQL注入问题。

java 复制代码
    @Delete("delete from tilas.dept where id = #{id}")
    void deleteById(Integer id);

二、新增部门

2.1 Json格式的请求参数的接收

JSON格式的参数,通常会使用一个实体对象进行接收。

规则:JSON数据的 键名 与方法形参 对象的属性名 相同,并需要使用**@RequestBody**注解标识。

2.2 三层架构实现

Controller层:

java 复制代码
    @PostMapping("/depts")
    public Result add(@RequestBody Dept dept){
        System.out.println("添加部门信息为:" + dept);
        deptService.add(dept);
        return Result.success();
    }

Service层:

由于只接收到了name属性,createTime和updateTime未接收到,需要在Service层中进行设置。

java 复制代码
    @Override
    public void add(Dept dept) {
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());

        deptMapper.add(dept);
    }

Mapper层:

java 复制代码
    @Insert("insert into tilas.dept(name, create_time, update_time) VALUES (#{name}, #{createTime}, #{updateTime})")
    void add(Dept dept);

三、修改部门

3.1 路径参数的接收

路径参数:通过请求URL直接传递参数,使用**{...}**来标识该路径参数,需要使用 @PathVariable 获取。

如果方法形参的参数名与PathVariable的value值相同,value可以省略。

3.2 查询回显

Controller层:

java 复制代码
    @GetMapping("/depts/{id}")
    public Result getInfo(@PathVariable Integer id){
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }

Service层:

java 复制代码
    @Override
    public Dept getById(Integer id) {
        return deptMapper.getById(id);
    }

Mapper层:

java 复制代码
    @Select("select id, name, create_time, update_time from tilas.dept where id = #{id}")
    Dept getById(Integer id);

3.3 修改数据

Controller层:

接收的数据格式为:

java 复制代码
{
    "id" : "8",
    "name" : "财务部"
}

需要使用*@RequestBody**注解接收JSON格式,并封装成Dept对象。*

java 复制代码
    @PutMapping("/depts")
    public Result update(@RequestBody Dept dept){
        deptService.update(dept);
        return Result.success();
    }

Service层:

由于进行了修改,updateTime字段值也要进行修改。

java 复制代码
    @Override
    public void update(Dept dept) {
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.update(dept);
    }

Mapper层:

java 复制代码
    @Update("update tilas.dept set name = #{name}, update_time = #{updateTime} where id = #{id}")
    void update(Dept dept);
相关推荐
云和数据.ChenGuang几秒前
光哥说Python 循环导入(Circular Import)深度解析:成因、排查与解决方案
开发语言·前端·人工智能·python·langchain
星夜离尘563 分钟前
MATLAB 工程实验:滞回加持续时间报警,把 UNKNOWN 留在状态机里
开发语言·matlab
avi91114 分钟前
【AI教人】在Inspector显示所有Delegate-Odin Inspector之三
java·前端·算法·delegate·inspector·editor扩展·unity editor
fengci.16 分钟前
BUUCTF(困难部分)
android·开发语言·前端·学习·php
Highcharts.js19 分钟前
BI可视化图表“维护难”问题的解决方案
开发语言·前端·javascript·编辑器·ecmascript·bi·highcharts
青春不朽51229 分钟前
Python 的 list append 为什么是均摊 O(1)?拆开过度分配那张表,看容量翻倍背后的暗账
java·python·list
yixun_gdas1 小时前
政企网站错敏巡查:错敏都藏在哪些位置?
开发语言·前端·javascript·内容运营
小羊没烦恼!1 小时前
.NET 11 Runtime Async 详解
java·运维·开发语言·javascript·python
Дерек的学习记录1 小时前
Unreal Engine 5:开关门实现和流程控制
开发语言·学习·ue5
哇嘎呀1 小时前
RHCSA题目
java·服务器·前端