关于苍穹外卖的学习,今天继续添加功能
第一个功能启用/禁用员工账号
首先查看接口文档

在控制层写,路径参数注解后面的status可省略(在两者名字相同时),这个项目我们约定修改的返回值Result无需使用泛型,而查询的需要使用泛型。
1 2 3 4 5 6 7 8 9 10 11
|
@PostMapping("/status/{status}") @ApiOperation("启用禁用员工账号") public Result startOrStop(@PathVariable("status") Integer status, Long id) { log.info("启用禁用员工账号:{},{}",status,id); employeeService.startOrStop(status,id); return Result.success(); }
|
service层加接口,写实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public void startOrStop(Integer status, Long id) {
Employee employee = Employee.builder() .status(status) .id(id) .build(); employeeMapper.update(employee); }
|
这里想着可能传递的参数不只是状态和id,也有可能是其他的,于是在持久层mapper里面写的update方法的形参是一个对象,包含了所有可能传递的参数。所以持久层mapper写:
1 2 3 4 5
|
void update(Employee employee);
|
它的具体实现由于是动态sql所以不用注解实现而是写在配置文件 EmployeeMapper.xml 里:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <update id="update" parameterType="Employee"> update employee <set> <if test="name != null">name = #{name},</if> <if test="username != null">username = #{username},</if> <if test="password != null">password = #{password},</if> <if test="phone != null">phone = #{phone},</if> <if test="sex != null">sex = #{sex},</if> <if test="idNumber != null">id_Number = #{idNumber},</if> <if test="updateTime != null">update_Time = #{updateTime},</if> <if test="updateUser != null">update_User = #{updateUser},</if> <if test="status != null">status = #{status},</if> </set> where id = #{id} </update>
|
特别注意:
这里的字段名字,数据库采用的是蛇形命名(如id_number),这里也需要加下划线变成id_Number。
最后提交推送分支。
第二个功能编辑员工信息
涉及两个接口,一个是根据员工id查询员工信息,
一个是修改员工信息

第一个接口,控制层:
1 2 3 4 5 6 7 8 9 10 11
|
@GetMapping("/{id}") @ApiOperation("根据id查询员工信息") public Result<Employee> getById(@PathVariable Long id) { Employee employee = employeeService.getById(id); return Result.success(employee); }
|
业务逻辑层:这里把密码字段为了安全性重新设置为星号,不给前端传密码
1 2 3 4 5 6 7 8 9 10
|
public Employee getById(Long id) { Employee employee = employeeMapper.getById(id); employee.setPassword("****"); return employee; }
|
持久层mapper:
1 2 3 4 5 6 7
|
@Select("select * from employee where id = #{id}") Employee getById(Long id);
|
测试
正常返回,开发第二个接口:

根据接口定义写控制层:
1 2 3 4 5 6 7 8 9 10 11 12
|
@PutMapping @ApiOperation("编辑员工信息") public Result update(@RequestBody EmployeeDTO employeeDTO) { log.info("编辑员工信息:{}", employeeDTO); employeeService.update(employeeDTO); return Result.success(); }
|
业务逻辑层:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public void update(EmployeeDTO employeeDTO) { Employee employee = new Employee(); BeanUtils.copyProperties(employeeDTO, employee); employee.setUpdateTime(LocalDateTime.now()); employee.setUpdateUser(BaseContext.getCurrentId()); employeeMapper.update(employee); }
|