【 苍穹外卖学习日记 |day02】

🌈个人主页 :一条泥憨鱼 (欢迎各位大佬莅临)

🎬精选专栏:数据结构与算法JavaSE,苍穹外卖日记AI学习

产品原型:

员工账号唯一,手机号合法11位,身份证合法18位,密码默认123456

接口设计:

本项目约定:

管理端发出的请求统一使用/admin作为前缀

用户端发出的请求统一使用/user作为前缀

前端提交的数据和实体类中对应的属性差别较大时,用DTO封装数据

java.io.Serializable 是 Java 中的一个标记接口 (空接口,没有任何方法),它的核心作用是:让一个类的对象支持 序列化 和 反序列化

  • 序列化 :把内存中的 Java 对象 转换成字节流(可以存文件、发网络、存数据库)
  • 反序列化 :把字节流 还原回内存中的 Java 对象

简单说:Serializable = 允许对象被 "保存 / 传输"

一般采用接口文档进行功能测试

先让项目运行起来,然后在浏览器进入接口文档

要进行新增员工,先在员工登录界面发送请求,获取token令牌,复制获得的令牌,去到新增员工界面

将token放到请求头中,选择head类型,在请求参数中设置员工信息

发送请求,可回到数据库employee表中检查是否添加成功

坑点:

字段与value的个数应当相同

新增员工爆500时可能就是因为我字段和value个数不同,前面是爆401,应该是token过期了,重新设置了一下

此时可以在前端界面添加员工

代码完善:

存在的问题1:录入的用户名已存在,抛出异常后没有处理

在接口文档新增已存在的员工,状态码为500,回到idea中发现有异常

我们可以在异常处理器中进行操作(注释内为异常的关键信息,我们下面取字段'zhangsan'),在有异常的情况下,如果异常字段包含duplicate entry,则说明添加重复了,在前端返回已存在,如果不包含,则是其他未知错误

此时再去接口文档新增员工,就会看到返回的字段,响应码也变成了200,说明操作没有问题

存在的问题2:新增员工时,创建人id和修改人id设置为了固定值

此时我们就需要通过某种方式动态获取当前登录员工的id

后续请求中,前端会携带jwt令牌,通过jwt令牌解析出当前员工登录id,但是我们该如何把id传递给Server的save方法?

threadlocal:并不是一个THREAD,而是他的局部变量,为每个线程提供单独的空间,且具有隔离的效果,只有在线程内才能获取到对应的值

在save方法里面我们调用相关方法就可以解决了

员工的分页查询:

需求分析和设计

路径为admin前缀,请求方法用get方法。

注意,这里的请求参数并不是json格式,而是query格式

|-------|---------------------------|-----------------|
| 对比维度 | DTO(Data Transfer Object) | VO(View Object) |
| 数据流向 | 前端->后端 | 后端->前端 |
| 核心用途 | 接受请求参数 | 响应页面展示 |
| 对应数据库 | 和表无关 | 和表无关 |
| 例子 | 登录参数DTO,下单参数DTO | 订单详情VO,员工列表VO |
| 敏感处理 | 接收明文密码 | 绝不返回密码 |

完整流程:

1.前端页面输入账号密码,封装成DTO传给后端

2.Controller接收DTO,传给Service层处理登录

3.Service层查数据库,拿到员工数据

4.后端把员工数据过滤并封装成VO

5.VO返回给前端,页面渲染展示员工信息

在本项目中后端返回给前端的数据都是result类型,所以在分页查询中统一封装成pageresult对象

total和records与上图的data中的数据可对应起来

查看apifox中的接口文档

controller层中的代码设计

在service层中的代码设计

这里用到了pagehelper插件

选中方法名按住Ctrl+回车,点击select,就会在xml文件中自动创建sql语句

接着编写动态sql语句

对其他地方进行优化

Serializable接口

  • 这是序列化接口
  • 作用:让这个对象可以被网络传输、缓存、存储
  • 企业项目里DTO、实体类都必须加

我们在接口文档中进行测试时,返回的日期类似于数组格式,我们可以对其进行代码优化

推荐使用方法二:"一劳永逸"

启用和禁用员工账号:

请求方法为post,{status}为路径参数,传入id为query类型

老规矩,先在controller层中进行操作,后续对爆红行Alt+回车去service层中实现

接口文档中的路径,直接复制过去

impl中的快捷实现

编辑员工

根据id查询员工信息:

是查询,所以为get方法

编辑员工信息:

为修改操作,所以方法为put

code必须返回,1成功,0失败

老规矩,先在controller层操作,alt回车进到service层中进行方法扩展

接着去impl实现类把这个方法实现

Alt+回车把方法扩展在mapper之中

由于操作比较简单,可以直接在注解写死sql语句,所以不用再对xml文件进行操作

查询完了,进行修改

以下是前端传过来的参数信息。controller方法编写时传递DTO参数

接着去到service,impl层扩展方法

附:xml文件中之前写好的update方法

impl中的扩展

至此,修改的代码已经开发完毕

后续测试使用swagger接口测试或者前后端联调测试

导入分类管理功能代码

业务规则:

1.分类名称必须是唯一

2.分类按照类型可以分为菜品分类套餐分类

3.新添加的分类状态默认为"禁用"

接下来导入代码,从Mapper层开始导入可以防止代码报错

day02,至此结束。

今天的学习就暂时告一段落啦,如果文章对您有用的话,还请留下一个免费的小心心和关注哦!

祝您工作顺利,生活愉快。我们下期再见!

相关推荐
H__Rick18 小时前
C51单片机学习-DAY3
单片机·学习·mongodb
yoothey19 小时前
异常学习笔记:为什么自定义异常后还要 throw?
笔记·学习
sulikey20 小时前
数据库系统概论4 - 更新与视图 期末速成课笔记
数据库·笔记·考试·期末速成·数据库系统概论
WangN220 小时前
【通识】宇树G1_29DOF速度跟踪训练—逐章学习手册
人工智能·python·学习·机器人·具身智能
لا معنى له20 小时前
NeoVerse: Enhancing 4D World Model with in-the-wild Monocular Videos
人工智能·笔记·机器学习·语言模型
黄毛火烧雪下20 小时前
Java 基础笔记:文件、递归与字符编码
java·开发语言·笔记
学计算机的计算基21 小时前
链表算法上篇:LeetCode 206/234/141/142/160/21 题解与易错点
java·笔记·算法·链表
lazy H21 小时前
Spring Boot 项目如何连接 Redis?新手入门配置和常见错误总结
ide·spring boot·redis·后端·学习·intellij-idea
雾沉川21 小时前
Flutter 入门开发环境完整搭建教程
学习·flutter
二哈赛车手1 天前
新人笔记---idea索引失效问题解决方案
java·笔记·spring·elasticsearch·intellij-idea