【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);
相关推荐
YL200404261 小时前
027合并两个有序链表
java·数据结构·算法·链表
维诺菌1 小时前
claude code安装
java·开发语言·ai编程·calude
谙弆悕博士1 小时前
快速学C语言—— 第0章:C语言简介
c语言·开发语言·经验分享·笔记·程序人生·课程设计·学习方法
顶点多余2 小时前
自定义协议、序列化、反序列化实现
java·linux·开发语言·c++·tcp/ip
小新同学^O^2 小时前
简单学习 --> SpringAOP
java·学习·spring·aop
风味蘑菇干2 小时前
使用接口定义规范,实现类完成具体逻辑。
java·开发语言
MATLAB代码顾问2 小时前
【智能优化】无穷优化算法(INFO)原理与Python实现
开发语言·python·算法
Zephyr_02 小时前
java数据结构
java·数据结构
2401_833269302 小时前
Java多线程:从入门到进阶
java·开发语言