day 01
git:1.创建本地git仓库 2.commit 3.创建远程仓库 4.push推送到远程
1. 断点调试,此时controller传进来的是账号密码
2.在Contrller调用service层之后,除了登录成功会讲员工实体返回,其他情况都将抛出异常
3. 通过配置属性类 来将配置属性封装成一个配置对象
4. 通过builder来构造对象,封装在 EmployeeLoginVO 类型的对象中
5. nginx反向代理+负载均衡
6.MD5加密处理+完善登录
7.TODO 待完成任务标记
8.开发流程
接口:地址, 方式 ,请求和响应的数据格式
9.Swagger
启动项目,开启了静态资源映射之后可以访问接口文档
加了Api注解就会影响接口文档的生成
day 02
员工管理和分类管理
1. 需求分析
2. 全局参数
添加全局参数
每次请求自动携带token,方便调试
3 处理异常
获取异常信息:ex.getMessage();
通过确认返回的异常现象中是否包含Dulicate entry 来确定异常类型(用户已存在)
再用split函数分割,获取到用户名,加入异常信息中
4 请求流程
登录成功时返回Token给前端,每次操作时都需要去校验拦截器中的 JWT令牌(可以获得用户信息)
5 ThreadLocal
需求:解析JWT令牌之后获得的id如何传给Service层?(新增员工时获取创建人(此时登录者))
答案:同一线程共享数据
在这里插入图片描述
6 分页查询
查询时将参数封装成DTO实体传给后端,因为时Query类型,不能加@Requestbody
7 错误点()
401:校验没通过
@requestbody用于json格式!,Query直接传参数就行
8 日期格式化(使得返回到前端的时间格式化)
java对象转换为json对象称为序列化,json对象转换为Java对象称为反序列化
消息转换器
修改状态,修改时传过去的参数是要修改成的参数
day 03
1 公共字段自动填充(Aop)
问题:代码冗余,不便于后续维护
切入点:@Pointcut——精确到需要作用的方法(含参数)
2 AOP应用点(公共字段自动填充)
1 自定义注解 @AutoFill, 后续将这个注解加到需要拦截的方法上
2 切面类
3 给方法加上自定义注解
4 公共字段自动填充
3 菜品
4 文件上传
1.Oss 配置类
2.OSs工具类
3. OSs读取配置类(从配置文件中读取OSs的配置)
利用Oss读取配置类当作参数传给Oss配置类来创建OSS工具类
配置 - application-dev.yml:
配置类 AliOssProperties(负责读取配置):
OssConfiguration(负责自动创建工具类(含@Bean),从AliOssProperties中拿到参数)
Controller层中
5 关于 插入数据时一个json中含有多张表的插入情况
DishDTO类(传入的JSON):
Dish类:
DishFlavor类(一个菜品可以有多个口味 ,所以在Dish类中DishFlavor是集合形式):
Controller层:此处传入的Json对象,里面的属性涵盖两张表的内容
Service层
要点1:菜品表和口味表需要同时生效,所以该插入方法是事务,需要加上@Transaction
要点2:拷贝数据到Dish对象
要点3:获取dishId属性值需要在XML文件中设置属性
DishMapper.xml:
DishFlavorMapper.XML:
要点1:由于传入给DishFlavorMapper层的是个集合对象,所以要进行集合遍历,分别插入口味表中
6 关于查询时查一张表含有另一张表的外键
7 删除菜品时的要点
要点一:有些情况不能删除,例如正在售卖中的菜品不可删除,关联了套餐的也不可以删除,删除不了就抛出异常
7.1批量删除注意点
Service层:判断是否关联了套餐获取到的是此菜品和哪些套餐关联的一个集合。
Mapper层:
MapperXML层:collection是从Mapper中传过来的dishID值,然后拼接成一个括号包起来的数组表示。
注意:批量删除时传过来一个list集合,然后在XMl层进行foreach遍历,用 XX in (xx,xx,xx) 来表示
8
@PathVariable 路径参数