1.新增员工
1.接收前端提交的参数
由于是json格式,所以有@RequestBody注解;
@PostMapping后没有写地址是因为在Controller最初就已经写了"/admin/employee",看接口设计中可以知道本身新增员工就是用的这个接口。(这里注意一个点,就是不要把EmplpyeeDTO 写成了loginDTO不然测试时会发现示例参数是loginDTO的参数。)
2.实现新增员工方法
BeanUtils.copyProperties实现属性拷贝;
DigestUtils.md5DigestAsHex实现明文转为密文;
不要直接用常数写在代码中,应该用constant文件管理。
3.EmployeeMapper中声明insert方法
这里一定要设置能识别mysql,不然有报错,而且必须连接数据库。
由于连接数据库需要用到database,所以最好还是下个idea专业版(网上可以找到教程)。
数据库导入后记得刷新一下,不然也许会报错。
4.JWT令牌校验失效
在测试时,会出现测试报错,这是因为JWT令牌校验失败,导致EmployeeController的save方法没有被调用。
所以需要将合法的token添加到全局参数中。
5.uername是unique的错误处理
当新增员工,username重名会出现SQLIntegrityConstraintViolationException错误,
所以通过全局异常处理器来处理。
6.动态获取用户id,完善过往TODO
由于登录成功过后,会生成JWT返回给前端,而通过JWT可以解析出当前登录员工的id。
所以通过在拦截器中解析出当前登录员工id,并放入线程局部变量中。
这里是在初始化工程中已经用BaseContext封装了ThreadLocal。
这里设置了id值,所以可以通过BaseContext.getCurrentId()获取当前用户id。
2.员工分页查询
1.PageHelper插件
在 EmployeeServiceImpl 中实现 pageQuery 方法:
注意:此处使用 mybatis 的分页插件 PageHelper 来简化分页代码的开发。底层基于 mybatis 的拦截器实现。(pom.xml中)
在 EmployeeMapper 中声明 pageQuery 方法。
由于会用到动态SQL所以不使用注解,在 EmployeeMapper.xml 中编写SQL(注意下载mybatisx插件)。
2.日期规范化
最开始返回的时间是一个数组。
解决方式:
3.启用禁用员工账号
1.EmployeeController 中创建启用禁用员工账号的方法
类似查询等接口,需要返回data所以需要设置Result<泛型>,但是这个启用禁用,我们本身只需要返回code所以可以不设置泛型。
由于是路径参数所以要设置注解@PathVariable。
2.EmployeeServiceImpl 中实现启用禁用员工账号的业务方法
public void startOrStop(Integer status, Long id) { //实际这个方法是想实现:updata employee set status=? where id=? //为了实现update的通用性和动态性,所以在持久层mapper中编写SQL //由于直接传status和id给update不太优雅,所以我们要创建一个实体对象传给他 //第一张:常规写法 // Employee employee = new Employee(); // employee.setStatus(status); // employee.setId(id); //第二种:由于Employee加了@Builder注解,所以可以采用链式编程 Employee employee = Employee.builder() .status(status) .id(id) .build(); employeeMapper.update(employee); }
3.在 EmployeeMapper.xml 中编写SQL
为了实现update的通用性,所以这里把employee可能修改的属性都写出来了。
4.编辑员工
1.根据id查询员工信息
没什么要注意的,就是不知道哪里输错了还是怎么,特别卡,前端测试后端的时候。
2.编辑员工信息
mapper中已经编写update方法时,就可以直接在EmployeeServiceImpl中直接用
public void update(EmployeeDTO employeeDTO) {
//由于在启用禁用员工账号中已经给mapper设置了update方法,
// 但是要注意的是当时update方法设置的参数是employee,而这里是employeeDTO所以需要做转化
Employee employee = new Employee();
BeanUtils.copyProperties(employeeDTO,employee);
employee.setUpdateTime(LocalDateTime.now());
employee.setUpdateUser(BaseContext.getCurrentId());
employeeMapper.update(employee);
}