苍穹外卖day2总结

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.日期规范化

最开始返回的时间是一个数组。

解决方式:

方式一:在属性上加入注解,对日期进行格式化(每次都要设置,所以一般选择第二种方式)
方式二:在 WebMvcConfiguration 中扩展 Spring MVC 的消息转换器,统一对日期类型进行格式化处理
最后得到如下效果:

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);
    }

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值