项目管理开发实战
前言
在前两集,我们已经完成了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;
}