【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);
相关推荐
無a伟4 小时前
RabbitMq高级特性:TTL,死信队列,延迟队列
java·分布式·rabbitmq
geovindu4 小时前
CSharp: Strategy Pattern
开发语言·后端·c#·.net·.netcore·策略模式·行为模式
长谷深风1115 小时前
Agent 跑了 30 分钟宕机,如何从断点继续?
java·大数据·人工智能·ai·大模型·memory·aiagent
慧都小妮子5 小时前
DevExpress Java 文档处理 API 免费 CTP:PDF、PowerPoint、条码与跨平台部署
java·pdf·powerpoint·devexpress·文档处理·条码生成
泡海椒5 小时前
告别反射低效:JQuick-Java ASM动态调用链性能优化实战
java·python·性能优化
Tairitsu_H5 小时前
[C++] C++11新增构造:列表初始化和std::initializer_list
开发语言·c++·c++11·构造
土司大王5 小时前
LeetCode 17 电话号码的字母组合:Java 回溯模板、多叉决策树与复杂度分析
java·leetcode·决策树
宣宣猪的小花园.5 小时前
【嵌入式】故障与降级:看门狗、保护机制和工程可靠性的底线
开发语言·人工智能·嵌入式硬件·机器学习
shmily麻瓜小菜鸡5 小时前
JS/TS 易踩坑知识点 — 自动分号插入(ASI)
开发语言·javascript·ecmascript
CoderYanger5 小时前
前端基础——JavaScript(WebAPI)代码案例
java·开发语言·前端·javascript·css·前端框架·html5