七、功能代码完善
(1)新增员工功能
1、控制层代码:
位置 :sky-take-out\\sky-server\\src\\main\\java\\com\\sky\\controller\\admin\\EmployeeController.java
/** * 新增员工 * @param employeeDTO * @return */ @PostMapping//添加这个注释是因为前端提交的数据格式是JSON,所以参数需要再使用@RequestBody注解 @ApiOperation("新增员工")//value已省略,功能描述注解,用于接口文档 public Result save(@RequestBody EmployeeDTO employeeDTO){ log.info("新增员工:{}",employeeDTO); employeeService.save(employeeDTO); return Result.success(); }
2、服务层接口代码:
位置:sky-server/src/main/java/com/sky/service/EmployeeService.java
/** * 新增员工 * @param employeeDTO */ void save(EmployeeDTO employeeDTO);
3、服务层实现代码:
位置:sky-take-out\\sky-server\\src\\main\\java\\com\\sky\\service\\impl\\EmployeeServiceImpl.java
/** * 新增员工 * @param employeeDTO */ public void save(EmployeeDTO employeeDTO) { Employee employee = new Employee(); //设置属性名 //方法一:调用自定义方法 // employee.setName(employeeDTO.getName()); //方法二:对象属性拷贝 //因为employeeDTO和employee中的部分属性名相同 BeanUtils.copyProperties(employeeDTO,employee);//由employeeDTO拷贝到employee //设置账号默认状态,1表示正常,0表示禁用 // employee.setStatus(1); //为代码规范,方便后续维护,将参数设置成自定义常量StatusConstant.ENABLE = 1 employee.setStatus(StatusConstant.ENABLE); //设置密码,默认为“123456”,需要对密码进行md5加密,PasswordConstant.DEFAULT_PASSWORD = "123456" employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes())); //设置创建时间和修改时间 employee.setCreateTime(LocalDateTime.now()); employee.setUpdateTime(LocalDateTime.now()); //设置创建人ID和修改人ID,目前先写死为一个固定值 //TODO 后期需要修改为登录人ID employee.setCreateUser(10L); employee.setUpdateUser(10L); //调用持久层mapper employeeMapper.insert(employee); }
4、mapper持久层(映射层)代码:
位置:sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java
/** * 插入员工数据 * @param employee */ @Insert("insert into employee(name, username, password, phone, sex, id_number, create_time, update_time, create_user, update_user) " + "values " + " (#{name}, #{username}, #{password}, #{phone}, #{sex}, #{idNumber}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})") void insert(Employee employee);
注意:填写参数前需要链接数据库,否则无法正常向数据库插入数据
方式:鼠标放在“insert into…”字段中,alt+enter,打开快捷方式栏,找到“language injection…”,选择"ID"为MySql
点击左上角图标,链接数据库,输入你的数据库账号密码,点击“Test connection”
选择需要链接的数据库“sky_take_out”,最后点击OK即可
建议:下载一个AI插件,便于自动为你补全代码,如Fitten
5,、功能测试
(1)通过接口文档测试:后端开发经常使用,因为前端网页可能未开发
方法一:使用keni4j自带的接口文档网页
打开页面苍穹外卖项目接口文档
直接点发送,会发现返回401(未授权),且后端控制台返回下图内容
原因:发送内容未通过JWT校验,即无合法令牌,解决方法如下
先从“员工登录”测试,从返回内容可见,其生成的合法令牌码token(token是开发文档要求的统一使用的JWT令牌名称)
复制token码->"文档管理"->"全局参数设置"->"添加参数"
注意:当响应码显示“401”时,即未授权,说明原来的JWT token已经过期需要更换,重复上面的步骤即可,更换请求头(header)即可
方法二:APIfox:添加全局参数设置,步骤基本一致
再次测试是,会出现默认的请求头部(header),出现200,表示发送成功
(2)前后端联调:通过前端网页测试添加员工功能是否完善
(3)检查数据库数据是否添加成功,已成功添加2、3、4,密码默认为123456
6、完善代码
位置:sky-server/src/main/java/com/sky/handler/GlobalExceptionHandler.java
说明:
具体代码:
/** * 捕获SQL异常 * @param ex * @return */ @ExceptionHandler public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){ //Duplicate entry 'zhangsan' for key 'employee.idx_username' String message = ex.getMessage(); if (message.contains("Duplicate entry")){ String[] split = message.split(" "); String username = split[2]; String msg = username + MessageConstant.ALREADY_EXISTS;//自定义常量“已存在” return Result.error(msg); }else { return Result.error(MessageConstant.UNKNOWN_ERROR);//自定义常量“未知错误” } }
7、完善代码2
说明:
步骤一:
在源文件中的三个位置添加一下代码:
位置一:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java
位置二:sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java
位置三:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java
添加的代码为:
System.out.println("当前现成的ID为:" + Thread.currentThread().getId());
示意图:
说明:由控制台输出可知,上面步骤验证客户端发送的每一次请求都是独立的线程
步骤二:
添加代码1
位置:sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java
具体代码:
//设置当前线程的员工id BaseContext.setCurrentId(empId);
示意图:
添加代码2
位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java
具体代码:
//修改为获取当前登录人ID employee.setCreateUser(BaseContext.getCurrentId()); employee.setUpdateUser(BaseContext.getCurrentId());
//改前代码为 //TODO 后期需要修改为登录人ID employee.setCreateUser(10L);//设置一个常量 employee.setUpdateUser(10L);
示意图:
至此,新增员工功能完成!
评论前必须登录!
注册