项目管理开发实战

项目管理开发实战

前言

        在前两集,我们已经完成了SpringBoot3.X + MybatisPlus逆向工程和SpringBeanUtil工具类封装的工作。

        这一集我们将完成项目管理的开发。

ProjectController

        我们需要思考,项目管理的Controller需要有哪些API供人使用,它负责处理与项目相关的API请求。

  •         获取项目列表
  •         保存项目信息
  •         更新项目信息
  •         删除制定项目

思考完,我们就来完善一下项目代码。

list
/**
     * 获取项目列表。
     *
     * @return 包含项目列表的JsonData对象。
     */
    @GetMapping("/list")
    public JsonData list() {
        return JsonData.buildSuccess(projectService.list());
    }
save
/**
     * 保存项目信息。
     *
     * @param req 包含待保存项目信息的请求体。
     * @return 表示操作结果的JsonData对象。
     */
    @PostMapping("/save")
    public JsonData save(@RequestBody ProjectSaveReq req) {
        return JsonData.buildSuccess(projectService.save(req));
    }
update
/**
     * 更新项目信息。
     *
     * @param req 包含待更新项目信息的请求体。
     * @return 表示操作结果的JsonData对象。
     */
    @PostMapping("/update")
    public JsonData update(@RequestBody ProjectUpdateReq req) {
        return JsonData.buildSuccess(projectService.update(req));
    }

del

/**
     * 删除项目。
     *
     * @param req 包含待删除项目ID的请求体。
     * @return 表示操作结果的JsonData对象。
     */
    @PostMapping("/del")
    public JsonData delete(@RequestBody ProjectDelReq req) {
        return JsonData.buildSuccess(projectService.delete(req.getId()));
    }
完整代码
/**
 * 项目控制器,负责处理与项目相关的API请求。
 */
@RestController
@RequestMapping("/api/v1/project")
public class ProjectController {

    /**
     * 注入项目服务层,用于处理业务逻辑。
     */
    @Resource
    private ProjectService projectService;

    /**
     * 获取项目列表。
     *
     * @return 包含项目列表的JsonData对象。
     */
    @GetMapping("/list")
    public JsonData list() {
        return JsonData.buildSuccess(projectService.list());
    }

    /**
     * 保存项目信息。
     *
     * @param req 包含待保存项目信息的请求体。
     * @return 表示操作结果的JsonData对象。
     */
    @PostMapping("/save")
    public JsonData save(@RequestBody ProjectSaveReq req) {
        return JsonData.buildSuccess(projectService.save(req));
    }

    /**
     * 更新项目信息。
     *
     * @param req 包含待更新项目信息的请求体。
     * @return 表示操作结果的JsonData对象。
     */
    @PostMapping("/update")
    public JsonData update(@RequestBody ProjectUpdateReq req) {
        return JsonData.buildSuccess(projectService.update(req));
    }

    /**
     * 删除项目。
     *
     * @param req 包含待删除项目ID的请求体。
     * @return 表示操作结果的JsonData对象。
     */
    @PostMapping("/del")
    public JsonData delete(@RequestBody ProjectDelReq req) {
        return JsonData.buildSuccess(projectService.delete(req.getId()));
    }
}

可以看到完整代码如上,这就是项目管理的Controller,也是十分的简单。

当然,大家可以看到有些函数有名为ProjectSaveReq、ProjectUpdateReq、ProjectDelReq等参数。其实这是自定义请求体类,这是RESTful编程常见的做法,既增强了可读性又增强了可维护性。

接下来我会提供这三个自定义请求体类的代码,大家有自己的想法,不一定这个写法是最好的。

ProjectSaveReq
@Data
public class ProjectSaveReq {
    private String name;
    private String description;
}
ProjectUpdateReq
@Data
public class ProjectUpdateReq {
    private Long id;
    private String name;
    private String description;
}
ProjectDelReq
@Data
public class ProjectDelReq {
    private Long id;
}

那么完成了Controller的代码,我们就要继续下去完成Service代码了。

ProjectService

public interface ProjectService {
    /**
     * 获取用户的项目列表
     * @return
     */
    List<ProjectDTO> list();
    /**
     * 保存项目
     * @param projectSaveReq
     * @return
     */
    int save(ProjectSaveReq projectSaveReq);

    /**
     * 更新项目
     * @param projectUpdateReq
     * @return
     */
    int update(ProjectUpdateReq projectUpdateReq);
    /**
     * 删除项目
     * @param id
     * @return
     */
    int delete(Long id);
}

ProjectServiceImpl

这里会使用到SpringBeanUtil这个工具类,一定要理清楚什么时候是DO,什么时候是DTO,两者互相转换,我们要获取我们想要的数据结构。

list
public List<ProjectDTO> list() {
        List<ProjectDO> projectDOS = projectMapper.selectList(null);
        return SpringBeanUtil.copyProperties(projectDOS, ProjectDTO.class);
    }
save
public int save(ProjectSaveReq projectSaveReq) {
        ProjectDO projectDO = SpringBeanUtil.copyProperties(projectSaveReq, ProjectDO.class);
        return projectMapper.insert(projectDO);
    }
update
public int update(ProjectUpdateReq projectUpdateReq) {
        ProjectDO projectDO = SpringBeanUtil.copyProperties(projectUpdateReq, ProjectDO.class);
        return projectMapper.updateById(projectDO);
    }
delete
public int delete(Long id) {
        return projectMapper.deleteById(id);
    }
完整代码
@Service
@Slf4j
public class ProjectServiceImpl implements ProjectService {
    @Resource
    private ProjectMapper projectMapper;

    @Override
    public List<ProjectDTO> list() {
        List<ProjectDO> projectDOS = projectMapper.selectList(null);
        return SpringBeanUtil.copyProperties(projectDOS, ProjectDTO.class);
    }

    @Override
    public int save(ProjectSaveReq projectSaveReq) {
        ProjectDO projectDO = SpringBeanUtil.copyProperties(projectSaveReq, ProjectDO.class);
        return projectMapper.insert(projectDO);
    }

    @Override
    public int update(ProjectUpdateReq projectUpdateReq) {
        ProjectDO projectDO = SpringBeanUtil.copyProperties(projectUpdateReq, ProjectDO.class);
        return projectMapper.updateById(projectDO);
    }

    @Override
    public int delete(Long id) {
        return projectMapper.deleteById(id);
    }
}

这里的DO,我们在逆向工程的时候就会生成,所以我这里就不会再给出代码,但是DTO是没给出的,所以以下是DTO的代码

ProjectDTO
@Data
public class ProjectDTO {
    private Long id;

    private Long projectAdmin;

    private String name;

    private String description;

    private Date gmtCreate;

    private Date gmtModified;
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 10:44:06       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 10:44:06       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 10:44:06       58 阅读
  4. Python语言-面向对象

    2024-07-13 10:44:06       69 阅读

热门阅读

  1. 【AI原理解析】—知识图谱(KG)原理

    2024-07-13 10:44:06       18 阅读
  2. 0139__TCP协议

    2024-07-13 10:44:06       20 阅读
  3. sqlmap常用参数及示例

    2024-07-13 10:44:06       24 阅读
  4. 软件测试面试200问【答案+文档】

    2024-07-13 10:44:06       24 阅读
  5. C++之STL简介

    2024-07-13 10:44:06       23 阅读
  6. Linux——多路IO

    2024-07-13 10:44:06       25 阅读
  7. 【C++】C++中的extern用法

    2024-07-13 10:44:06       21 阅读
  8. 如何理解李彦宏说的“不要卷模型,要卷应用”

    2024-07-13 10:44:06       17 阅读
  9. 2024年,SEC对加密监管的格局将继续演变

    2024-07-13 10:44:06       20 阅读
  10. Python热门面试题一

    2024-07-13 10:44:06       20 阅读
  11. 从零开始学习嵌入式----C语言数组指针

    2024-07-13 10:44:06       26 阅读
  12. 项目开源能够带来什么?从中得到了什么?

    2024-07-13 10:44:06       19 阅读