瑞吉外卖项目

简介: 第三天新增员工需求分析在employeeController类编写新增员工的代码。在新增员工中,如果新增相同的员工信息,代码会报错,因此新建一个全局报错类来,捕获错误,在common包下新建一个GlobalExceptionHandler类。

第三天

  1. 新增员工需求分析
 1、页面发送ajax请求,将新增员工页面中输入的数据以json的形式提交到服务端
2、服务端Controller接收页面提交的数据并调用Service将数据进行保存
3、Service调用Mapper操作数据库,保存数据


  1. 在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("新增员工成功!");
}
  1. 在新增员工中,如果新增相同的员工信息,代码会报错,因此新建一个全局报错类来,捕获错误,在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;
    }
}
  1. 在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类


image.png

  1. 在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);
    }
  1. 在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("员工信息修改成功!");
}


相关文章
|
7月前
|
Java 关系型数据库 MySQL
基于SpringBoot华强北二手手机商城系统
基于SpringBoot华强北二手手机商城系统
|
6月前
|
JSON 前端开发 Java
瑞吉外卖业务开发(2)
瑞吉外卖业务开发
52 3
|
6月前
|
运维 前端开发 测试技术
瑞吉外卖业务开发(1)
瑞吉外卖业务开发
77 3
|
6月前
|
JSON 前端开发 安全
瑞吉外卖业务开发(4)
瑞吉外卖业务开发
41 2
|
6月前
|
存储 JSON 前端开发
瑞吉外卖业务开发(3)
瑞吉外卖业务开发
47 1
|
6月前
|
存储 SQL 前端开发
瑞吉外卖精华部分总结(1)
瑞吉外卖精华部分总结(1)
173 0
|
6月前
|
缓存 Java 应用服务中间件
苍穹外卖知识点总结(springboot)
苍穹外卖知识点总结(springboot)
817 0
|
7月前
|
Java 数据库 Android开发
基于SpringBoot校园外卖服务系统设计与实现
基于SpringBoot校园外卖服务系统设计与实现
|
7月前
|
前端开发 Java 关系型数据库
零食商城|基于springboot的零食商城(一)
零食商城|基于springboot的零食商城
118 0
|
7月前
|
Java
零食商城|基于springboot的零食商城(二)
零食商城|基于springboot的零食商城