06、新增员工功能
6.1、需求分析
后台系统中可以管理员工信息,通过新增员工信息来添加后台系统用户。点击[添加员工]按钮跳转到新增页面,如下:
6.2、数据模型
1、新增员工,其实就是将我们新增页面录入的员工数据插入到employee表。需要注意,employee表中对username字段加入了唯一约束,因为username是员工的登录账号,必须是唯一的。
2、employee表中的status字段以及设置了默认值1,表示状态正常。
6.3、代码开发
1、在开发代码之前,需要梳理一下整个程序的执行过程:
- 页面发送ajax请求,将新增员工页面中输入的数据以json的形式提交到服务端
- 服务端Controller接收页面提交的数据并调用service将数据保存
- service调用mapper操作数据库,保存数据
2、页面中的ajax
如何发送请求的呢?
6.4、功能测试
6.4.1、新增员工
/**
* 新增员工
* @param request
* @param employee
* @return
*/
@PostMapping
public R<String> save(HttpServletRequest request, @RequestBody Employee employee) {
log.info("新增员工,员工信息:{}", employee.toString());
//设置初始密码123456,需要进行md5加密处理
employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
//设置创建时间
employee.setCreateTime(LocalDateTime.now());
//设置更新时间
employee.setUpdateTime(LocalDateTime.now());
//获得当前登录用户的id
Long empId = (Long) request.getSession().getAttribute("employee");
//设置创建用户
employee.setCreateUser(empId);
//设置更新用户
employee.setUpdateUser(empId);
employeeService.save(employee);
return R.success("新增员工成功");
}
6.4.2、处理用户名已存在的异常情况
/**
* 全局异常处理
*/
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {
/**
* 异常处理方法
* @param ex
* @return
*/
@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex) {
log.error(ex.getMessage());
if (ex.getMessage().contains("Duplicate entry")) {
String[] split = ex.getMessage().split(" ");
String msg = split[2] + "已存在";
return R.error(msg);
}
return R.error("未知错误");
}
}
呈现结果: