【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);
相关推荐
C++、Java和Python的菜鸟几秒前
第9章 后端Web进阶(AOP)
java·开发语言·前端
软萌萌的16 分钟前
Python零基础从入门到精通详细教程-数据类型
开发语言·windows·python
东北赵四13 分钟前
关于Java泛型的知识点及其相关面试题
java·windows·python
姓蔡小朋友14 分钟前
Java线程并发
java·开发语言·python
执笔画流年呀30 分钟前
⾃动化测试常⽤函数
java·dubbo
我星期八休息38 分钟前
扩展— TCP 全连接队列与 tcpdump 抓包
linux·服务器·开发语言·前端·网络·tcp/ip·tcpdump
疯狂打码的少年38 分钟前
【面向对象】UML概述(基本构造块:事物/关系/图)
java
小小代码狗1 小时前
PHP 常用函数与变量参考文档
开发语言·安全·php
一水1 小时前
TTFT优化:一个方案的5次推倒重来
java·ai·状态模式
编程阿峰1 小时前
Python 环境配置(二)安装jupyter、matplotlib、numpy库
开发语言·python·jupyter·numpy·matplotlib