zoukankan      html  css  js  c++  java
  • 【测试开花】二、项目管理-后端-实现新增接口

    基于 springboot+vue 的测试平台开发继续更新。

    接下来开发项目管理,是一个很常规的功能:有列表页、查询、新增、编辑,删除暂时先不做。

    首先来做新增项目的功能,先实现后端接口。

    一、编写实体类 Project

    定义实体类的属性,对应着数据库对应表里的字段。

    package com.pingguo.bloomtest.pojo;
    
    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import lombok.Data;
    
    import java.util.Date;
    
    @Data
    public class Project {
    
        @TableId(type = IdType.AUTO)
        private Long id;
    
        private String projectName;
    
        private String description;
    
        @TableField(fill = FieldFill.INSERT)        // 新增的时候填充数据
        private Date createTime;
        @TableField(fill = FieldFill.INSERT_UPDATE) // 新增或修改的时候填充数据
        private Date updateTime;
    
        private String createUser;
    
    }
    

    二、创建数据表

    CREATE TABLE `project` (
      `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `projectName` varchar(30) DEFAULT NULL COMMENT '项目名称',
      `description` varchar(255) DEFAULT NULL COMMENT '描述',
      `createTime` datetime NOT NULL DEFAULT '1900-01-01 00:00:00' COMMENT '创建时间',
      `updateTime` datetime NOT NULL DEFAULT '1900-01-01 00:00:00' COMMENT '更新时间',
      `createUser` varchar(30) DEFAULT NULL COMMENT '创建人',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='项目表';
    

    修改 application.properties 中的配置

    # mybatis-plus,关闭自动转化驼峰和下划线
    mybatis-plus.configuration.map-underscore-to-camel-case=false
    

    这里添加一个 mybatis-plus 的配置,默认 true,设置为 false 。

    • true:比如 Project 类中的属性 projectName,映射到表里的字段名就是 project_name 。
    • false:关闭自动转化驼峰和下划线,projectName 映射到表里还是 projectName 。

    三、编写 ProjectDAO 接口

    package com.pingguo.bloomtest.dao;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.pingguo.bloomtest.pojo.Project;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface ProjectDAO extends BaseMapper<Project> {
    }
    

    四、编写 ProjectService 类

    在这里,实现添加项目的方法。

    package com.pingguo.bloomtest.service;
    
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.pingguo.bloomtest.common.BtException;
    import com.pingguo.bloomtest.dao.ProjectDAO;
    import com.pingguo.bloomtest.pojo.Project;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.Date;
    
    
    @Service
    public class ProjectService {
        @Autowired
        ProjectDAO projectDAO;
    
        public void addProject(Project project) {
            if (StringUtils.isBlank(project.getProjectName())) {
                BtException.throwException("项目名称为空");
            }
            QueryWrapper<Project> wrapperProject = new QueryWrapper<>();
            wrapperProject.eq("projectName", project.getProjectName());
            if (projectDAO.selectCount(wrapperProject) != 0) {
                BtException.throwException("项目名称已存在");
            }
            project.setCreateTime(new Date());
            project.setUpdateTime(new Date());
            projectDAO.insert(project);
        }
    }
    

    注意,在这里加入了新的代码,比如BtException.throwException("项目名称为空");,当项目名称为空的时候抛出我自定义的异常。

    自定义异常类

    这里写了一个自定义异常类 BtException ,方便抛出自定义的异常。

    package com.pingguo.bloomtest.common;
    
    public class BtException extends RuntimeException{
        private BtException(String message) {
            super(message);
        }
    
        public static void throwException(String message) {
            throw new BtException(message);
        }
    }
    

    五、编写 ProjectController 类

    编写控制器类,接收前端过来的请求。

    package com.pingguo.bloomtest.controller;
    
    import com.pingguo.bloomtest.common.Result;
    import com.pingguo.bloomtest.pojo.Project;
    import com.pingguo.bloomtest.service.ProjectService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("project")
    public class ProjectController {
        @Autowired
        ProjectService projectService;
    
        @PostMapping("/add")
        public Result addProject(@RequestBody Project project) {
            try {
                projectService.addProject(project);
                return Result.success();
            } catch (Exception e) {
                return Result.fail(e.toString());
            }
        }
    }
    

    在这里调用projectService.addProject()方法时候,加了 try catch,来捕获 service 层抛出的异常,为了统一的返回结果。

    当不捕获时,报错之后就是这样:

    捕获之后,就是这样:

    六、测试新增接口 /project/add

    正常新增的场景。

    重复新增的场景。

    入参项目名称为空。

    刷新数据表。

    数据新增成功。

    --不要用肉体的勤奋,去掩盖思考的懒惰--
  • 相关阅读:
    数据字典的设计
    2005年9月全国计算机等级考试二级C语言笔试试题
    2005年4月全国计算机等级考试二级C语言笔试试题
    2004年4月全国计算机等级考试二级C语言笔试试题
    2003年9月全国计算机等级考试二级C语言笔试试卷
    2006年4月全国计算机等级考试二级C语言笔试试题
    2004年9月全国计算机等级考试二级C语言笔试试题
    2006年9月全国计算机等级考试二级C笔试真题及参考答案
    2003年4月全国计算机等级考试二级C语言笔试试题
    2002年9月全国计算机等级考试二级C语言笔试试题
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/15273138.html
Copyright © 2011-2022 走看看