瑞吉外卖项目

简介: 第三天新增员工需求分析在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("员工信息修改成功!");
}


相关文章
|
5天前
|
存储 小程序 算法
东郊到家预约系统开发|源码案例|小程序
区块链的最重要特性是去中心化,它不依赖于任何中心机构或第三方信任
|
9月前
|
开发框架 小程序 前端开发
东郊到家丨家政服务丨预约上门丨系统开发稳定版,家政服务丨预约上门丨东郊到家系统开发(开发案例)及源码技术
 随着人们对家政服务的需求不断增加,家政服务行业也变得越来越受欢迎。家政服务小程序和家政服务系统是两种常见的家政服务解决方案,它们可以为人们提供更加便捷和高效的家政服务体验。下面将详细介绍这两种解决方案。
|
5天前
|
安全 Java 数据库连接
首次面试经历(忘指导)当我在简历上写了苍穹外卖,瑞吉外卖时……
首次面试经历(忘指导)当我在简历上写了苍穹外卖,瑞吉外卖时……
351 1
|
8月前
|
负载均衡 Java 数据库连接
瑞吉外卖项目
瑞吉外卖项目
61 0
|
SQL 缓存 JSON
瑞吉外卖笔记
这是一份写给自己的笔记,主要记录瑞吉外卖项目中自己没有了解过的知识点。我将按照功能来分别解析
668 1
|
11月前
|
前端开发
瑞吉外卖项目(超详细)
新增套餐 在开发业务功能前,先将需要用到的类和接口基本结构创建好: 实体类SetmealDish
|
11月前
|
Java 数据库连接 mybatis
瑞吉外卖项目(超详细)
公共字段自动填充 Mybatis Plus公共字段自动填充,也就是在插入或者更新的时候为指定字段赋予指定的值,使用它的好处就是可以统一对这些字段进行处理,避免了重复代码。 实现步骤: 1、在实体类的属性上加入@TableField注解,指定自动填充的策略 2、按照框架要求编写元数据对象处理器,在此类中统一为公共字段赋值,此类需要实现MetaObjectHandler接口
|
11月前
|
SQL 前端开发 Java
学习瑞吉外卖项目
以当前热门的外卖点餐为业务基础,业务真实、实用、广泛。基于流行的Spring Boot、mybatis plus等技术框架进行开发。 第一天: 设计产品原型。 新建数据库,导入sql文件。
|
XML 前端开发 数据格式
点餐项目实现(三)
点餐项目实现(三)
174 0