【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);
相关推荐
AZaLEan__5 小时前
多源 BFS
java·开发语言·算法
程序员卷卷狗5 小时前
Java转Go面试速记:Go基础22问,一篇理清高频易错点一篇理清高频易错点
java·面试·golang
zzzzz3695 小时前
快速搭建SpringAi项目 集成智能问答,RAG,FUINCTION_CALLING等功能
java·ai编程
笨蛋不要掉眼泪5 小时前
Java并发编程 :深入剖析LinkedBlockingQueue
java·开发语言·网络·并发
不会C语言的男孩5 小时前
C++ Primer Plus 第10章:对象和类
开发语言·c++
不会C语言的男孩5 小时前
C++ Primer Plus 第11章:使用类
开发语言·c++
未若君雅裁6 小时前
算法复杂度与数据结构:Java 集合篇的第一块基石
java·数据结构·算法
致Great6 小时前
Claude Code 上线 Dynamic Workflows:一句话调度 1000 个子智能体并行干活
java·linux·服务器
yujunl6 小时前
NetCore常用的中间件说明
开发语言
一个做软件开发的牛马6 小时前
Java 常用类:String不可变、新时间API与包装类陷阱
java·后端