第三天
- 新增员工需求分析
1、页面发送ajax请求,将新增员工页面中输入的数据以json的形式提交到服务端 2、服务端Controller接收页面提交的数据并调用Service将数据进行保存 3、Service调用Mapper操作数据库,保存数据
- 在employeeController类编写新增员工的代码。
//新增员工 @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("新增员工成功!"); }
- 在新增员工中,如果新增相同的员工信息,代码会报错,因此新建一个全局报错类来,捕获错误,在common包下新建一个GlobalExceptionHandler类。
@ControllerAdvice(annotations = {RestController.class, Controller.class}) @ResponseBody @Slf4j public class GlobalExceptionHandler { //异常处理方法 @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("未知错误!"); } }
系统中的员工很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据,操作步骤如下:
1、页面发送ajax请求,将分页查询参数(page.pageSize、name)提交到服务端
2、服务端Controller接收页面提交的数据并调用Service查询数据
3、Service调用Mapper操作数据库,查询分页数据
4、Controller将查询到的分页数据响应给页面
5、页面接收到分页数据并通过ElementuI的Table组件展示到页面上
在config包下新建MybatisPlusConfig类,配置mybatisplus的分页插件。
//配置mybatisplus的分页插件 @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor mybatisPlusInterceptor=new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return mybatisPlusInterceptor; } }
- 在EmployeeController编写分页查询代码
//员工信息分页查询 @GetMapping("/page") public R<Page> page(int page,int pageSize,String name){ log.info("page={},pageSize={},name={}",page,pageSize,name); //构造分页构造器 Page pageinfo=new Page(page,pageSize); //构造条件构造器 LambdaQueryWrapper<Employee> queryWrapper=new LambdaQueryWrapper(); //添加过滤条件 queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name); //添加排序条件 queryWrapper.orderByDesc(Employee::getUpdateTime); //执行查询 employeeService.page(pageinfo,queryWrapper); return R.success(pageinfo); }
员工的启用和禁用
在执行修改代码时,根据id查找修改员工信息时,用long类型时,由于long类型精确到16位会产生id的偏差。
具体实现步骤:
1)提供对象转换器JacksonObjectMapper,基于Jackson进行Java对象到json数据的转换(资料中已经提供,直接复制到项目中使用)
2)在WebMvcConfig配置类中扩展Spring mvc的消息转换器,在此消息转换器中使用提供的对象转换器进行lava对象到json数据的转换。
在common包下导入jacksonObjectMapper类
- 在WebMvcConfig编写对象转换器代码
//扩展mvc框架的消息转换器 @Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { //创建消息转换器对象 MappingJackson2HttpMessageConverter messageConverter=new MappingJackson2HttpMessageConverter(); //设置对象转换器,底层使用jackson将java对象转换json messageConverter.setObjectMapper(new JacksonObjectMapper()); //将上面的消息转换器对象追加到mvc框架转换器集合中 converters.add(0,messageConverter); super.extendMessageConverters(converters); }
- 在EmployeeController下编写修改员工信息代码
//根据id修改员工信息 @PutMapping public R<String> update(HttpServletRequest request, @RequestBody Employee employee){ long empId=(long)request.getSession().getAttribute("employee"); employee.setUpdateTime(LocalDateTime.now()); employee.setUpdateUser(empId); employeeService.updateById(employee); return R.success("员工信息修改成功!"); }
11.编辑员工信息
1、点击编辑按钮时,页面跳转到add.html,并在url中携带参数[员工id]
2、在add.html页面获取url中的参数[员工id]
3、发送ajax请求,请求服务端,同时提交员工id参数
4、服务端接收请求,根据员工id查询员工信息,将员工信息以json形式响应给页面5、页面接收服务端响应的json数据,通过VUE的数据绑定进行员工信息回显
6、点击保存按钮,发送ajax请求,将页面中的员工信息以json方式提交给服务端7、服务端接收员工信息,并进行处理,完成后给页面响应
8、页面接收到服务端响应信息后进行相应处理
在EmployeeController下编写修改员工信息代码(编写根据id查询员工信息,调用update方法)
//根据id修改员工信息 @PutMapping public R<String> update(HttpServletRequest request, @RequestBody Employee employee){ long empId=(long)request.getSession().getAttribute("employee"); employee.setUpdateTime(LocalDateTime.now()); employee.setUpdateUser(empId); employeeService.updateById(employee); return R.success("员工信息修改成功!"); }