【JaveWeb教程】(29)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(2)部门管理的实现

目录

  • SpringBootWeb案例02
    • [2. 部门管理](#2. 部门管理)
      • [2.1 查询部门](#2.1 查询部门)
        • [2.1.1 原型和需求](#2.1.1 原型和需求)
        • [2.1.2 接口文档](#2.1.2 接口文档)
        • [2.1.3 思路分析](#2.1.3 思路分析)
        • [2.1.4 功能开发](#2.1.4 功能开发)
        • [2.1.5 功能测试](#2.1.5 功能测试)
      • [2.2 前后端联调](#2.2 前后端联调)
      • [2.3 删除部门](#2.3 删除部门)
        • [2.3.1 需求](#2.3.1 需求)
        • [2.3.2 接口文档](#2.3.2 接口文档)
        • [2.3.3 思路分析](#2.3.3 思路分析)
        • [2.3.4 功能开发](#2.3.4 功能开发)
        • [2.3.5 功能测试](#2.3.5 功能测试)
        • [2.3.6 前后端联调](#2.3.6 前后端联调)
      • [2.4 新增部门](#2.4 新增部门)
        • [2.4.1 需求](#2.4.1 需求)
        • [2.4.2 接口文档](#2.4.2 接口文档)
        • [2.4.3 思路分析](#2.4.3 思路分析)
        • [2.4.4 功能开发](#2.4.4 功能开发)
        • [2.4.5 功能测试](#2.4.5 功能测试)
        • [2.4.6 前后端联调](#2.4.6 前后端联调)
        • [2.4.7 请求路径](#2.4.7 请求路径)

SpringBootWeb案例02

本章的主要内容为部门管理

2. 部门管理

我们按照前面学习的开发流程,开始完成功能开发。首先按照之前分析的需求,完成部门管理的功能开发。

开发的部门管理功能包含:

  1. 查询部门
  2. 删除部门
  3. 新增部门
  4. 更新部门(不讲解,自己独立完成)

2.1 查询部门

2.1.1 原型和需求

查询的部门的信息:部门ID、部门名称、修改时间

通过页面原型以及需求描述,我们可以看到,部门查询,是不需要考虑分页操作的。

2.1.2 接口文档

部门列表查询

  • 基本信息

    请求路径:/depts
    
    请求方式:GET
    
    接口描述:该接口用于部门列表数据查询
    
  • 请求参数

  • 响应数据

    参数格式:application/json

    参数说明:

    参数名 类型 是否必须 备注
    code number 必须 响应码,1 代表成功,0 代表失败
    msg string 非必须 提示信息
    data object[ ] 非必须 返回的数据
    |- id number 非必须 id
    |- name string 非必须 部门名称
    |- createTime string 非必须 创建时间
    |- updateTime string 非必须 修改时间

    响应数据样例:

    json 复制代码
    {
      "code": 1,
      "msg": "success",
      "data": [
        {
          "id": 1,
          "name": "学工部",
          "createTime": "2022-09-01T23:06:29",
          "updateTime": "2022-09-01T23:06:29"
        },
        {
          "id": 2,
          "name": "教研部",
          "createTime": "2022-09-01T23:06:29",
          "updateTime": "2022-09-01T23:06:29"
        }
      ]
    }
2.1.3 思路分析
2.1.4 功能开发

通过查看接口文档:部门列表查询

请求路径:/depts

请求方式:GET

请求参数:无

响应数据:json格式

DeptController

java 复制代码
@Slf4j
@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;

    //@RequestMapping(value = "/depts" , method = RequestMethod.GET)
    @GetMapping("/depts")
    public Result list(){
        log.info("查询所有部门数据");
        List<Dept> deptList = deptService.list();
        return Result.success(deptList);
    }
}

@Slf4j注解源码:

DeptService(业务接口)

java 复制代码
public interface DeptService {
    /**
     * 查询所有的部门数据
     * @return   存储Dept对象的集合
     */
    List<Dept> list();
}

DeptServiceImpl(业务实现类)

java 复制代码
@Slf4j
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;
    
    @Override
    public List<Dept> list() {
        List<Dept> deptList = deptMapper.list();
        return deptList;
    }
}    

DeptMapper

java 复制代码
@Mapper
public interface DeptMapper {
    //查询所有部门数据
    @Select("select id, name, create_time, update_time from dept")
    List<Dept> list();
}
2.1.5 功能测试

功能开发完成后,我们就可以启动项目,然后打开postman,发起GET请求,访问 :http://localhost:8080/depts

2.2 前后端联调

完成了查询部门的功能,我们也通过postman工具测试通过了,下面我们再基于前后端分离的方式进行接口联调。具体操作如下:

1、将资料中提供的"前端环境"文件夹中的压缩包,拷贝到一个没有中文不带空格的目录下

2、拷贝到一个没有中文不带空格的目录后,进行解压(解压到当前目录)

3、启动nginx

4、打开浏览器,访问:http://localhost:90

5、测试:部门管理 - 查询部门列表

说明:只要按照接口文档开发功能接口,就能保证前后端程序交互

  • 后端:严格遵守接口文档进行功能接口开发
  • 前端:严格遵守接口文档访问功能接口

2.3 删除部门

查询部门的功能我们搞定了,下面我们开始完成删除部门的功能开发。

2.3.1 需求

点击部门列表后面操作栏的 "删除" 按钮,就可以删除该部门信息。 此时,前端只需要给服务端传递一个ID参数就可以了。 我们从接口文档中也可以看得出来。

2.3.2 接口文档

删除部门

  • 基本信息

    请求路径:/depts/{id}
    
    请求方式:DELETE
    
    接口描述:该接口用于根据ID删除部门数据
    
  • 请求参数

    参数格式:路径参数

    参数说明:

    参数名 类型 是否必须 备注
    id number 必须 部门ID

    请求参数样例:

    /depts/1
    
  • 响应数据

    参数格式:application/json

    参数说明:

    参数名 类型 是否必须 备注
    code number 必须 响应码,1 代表成功,0 代表失败
    msg string 非必须 提示信息
    data object 非必须 返回的数据

    响应数据样例:

    json 复制代码
    {
        "code":1,
        "msg":"success",
        "data":null
    }
2.3.3 思路分析

接口文档规定:

  • 前端请求路径:/depts/{id}
  • 前端请求方式:DELETE

问题1:怎么在controller中接收请求路径中的路径参数?

@PathVariable

问题2:如何限定请求方式是delete?

@DeleteMapping
2.3.4 功能开发

通过查看接口文档:删除部门

请求路径:/depts/{id}

请求方式:DELETE

请求参数:路径参数 {id}

响应数据:json格式

DeptController

java 复制代码
@Slf4j
@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;

    @DeleteMapping("/depts/{id}")
    public Result delete(@PathVariable Integer id) {
        //日志记录
        log.info("根据id删除部门");
        //调用service层功能
        deptService.delete(id);
        //响应
        return Result.success();
    }
    
    //省略...
}

DeptService

java 复制代码
public interface DeptService {

    /**
     * 根据id删除部门
     * @param id    部门id
     */
    void delete(Integer id);

    //省略...
}

DeptServiceImpl

java 复制代码
@Slf4j
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Override
    public void delete(Integer id) {
        //调用持久层删除功能
        deptMapper.deleteById(id);
    }
    
    //省略...
}

DeptMapper

java 复制代码
@Mapper
public interface DeptMapper {
    /**
     * 根据id删除部门信息
     * @param id   部门id
     */
    @Delete("delete from dept where id = #{id}")
    void deleteById(Integer id);
   
    //省略...
}
2.3.5 功能测试

删除功能开发完成后,重新启动项目,使用postman,发起DELETE请求:

2.3.6 前后端联调

打开浏览器,测试后端功能接口:

2.4 新增部门

我们前面已完成了查询部门删除部门两个功能,也熟悉了开发的流程。下面我们继续完成新增部门功能。

2.4.1 需求

点击 "新增部门" 按钮,弹出新增部门对话框,输入部门名称,点击 "保存" ,将部门信息保存到数据库。

2.4.2 接口文档

添加部门

  • 基本信息

    请求路径:/depts
    
    请求方式:POST
    
    接口描述:该接口用于添加部门数据
    
  • 请求参数

    格式:application/json

    参数说明:

    参数名 类型 是否必须 备注
    name string 必须 部门名称

    请求参数样例:

    json 复制代码
    {
    	"name": "教研部"
    }
  • 响应数据

    参数格式:application/json

    参数说明:

    参数名 类型 是否必须 备注
    code number 必须 响应码,1 代表成功,0 代表失败
    msg string 非必须 提示信息
    data object 非必须 返回的数据

    响应数据样例:

    json 复制代码
    {
        "code":1,
        "msg":"success",
        "data":null
    }
2.4.3 思路分析

接口文档规定:

  • 前端请求路径:/depts
  • 前端请求方式:POST
  • 前端请求参数 (Json格式):{ "name": "教研部" }

问题1:如何限定请求方式是POST?

java 复制代码
@PostMapping

问题2:怎么在controller中接收json格式的请求参数?

java 复制代码
@RequestBody  //把前端传递的json数据填充到实体类中
2.4.4 功能开发

通过查看接口文档:新增部门

请求路径:/depts

请求方式:POST

请求参数:json格式

响应数据:json格式

DeptController

java 复制代码
@Slf4j
@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;

    @PostMapping("/depts")
    public Result add(@RequestBody Dept dept){
        //记录日志
        log.info("新增部门:{}",dept);
        //调用service层添加功能
        deptService.add(dept);
        //响应
        return Result.success();
    }

    //省略...
}

DeptService

java 复制代码
public interface DeptService {

    /**
     * 新增部门
     * @param dept  部门对象
     */
    void add(Dept dept);

    //省略...
}

DeptServiceImpl

java 复制代码
@Slf4j
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Override
    public void add(Dept dept) {
        //补全部门数据
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        //调用持久层增加功能
        deptMapper.inser(dept);
    }

    //省略...
}

DeptMapper

java 复制代码
@Mapper
public interface DeptMapper {

    @Insert("insert into dept (name, create_time, update_time) values (#{name},#{createTime},#{updateTime})")
    void inser(Dept dept);

    //省略...
}
2.4.5 功能测试

新增功能开发完成后,重新启动项目,使用postman,发起POST请求:

2.4.6 前后端联调

打开浏览器,测试后端功能接口:

2.4.7 请求路径

我们部门管理的查询删除新增功能全部完成了,接下来我们要对controller层的代码进行优化。

首先我们先来看下目前controller层代码:

以上三个方法上的请求路径,存在一个共同点:都是以/depts作为开头。(重复了)

在Spring当中为了简化请求路径的定义,可以把公共的请求路径,直接抽取到类上,在类上加一个注解@RequestMapping,并指定请求路径"/depts"。代码参照如下:

优化前后的对比:


注意事项:一个完整的请求路径,应该是类上@RequestMapping的value属性 + 方法上的 @RequestMapping的value属性

相关推荐
七星静香6 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员7 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU8 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie611 分钟前
在IDEA中使用Git
java·git
数据与后端架构提升之路12 分钟前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
一行121 分钟前
电脑蓝屏debug学习
学习·电脑
Elaine20239126 分钟前
06 网络编程基础
java·网络
G丶AEOM28 分钟前
分布式——BASE理论
java·分布式·八股
落落鱼201329 分钟前
tp接口 入口文件 500 错误原因
java·开发语言
想要打 Acm 的小周同学呀30 分钟前
LRU缓存算法
java·算法·缓存