DAY01
nginx反向代理
MD5加密
拓展:spring security + jwt 提供了更强大灵活安全的身份验证
yapi进行接口导入
Swagger介绍
帮助后端生成接口文档并进行测试
knife4j对swagger进行了封装
在配置类中加入相关配置 设置静态资源映射
接口文档测试
j加入api相关注解后的效果
DAY02
新增员工
需求分析和设计
写相关代码
controller service mapper层
测试(1. 后端文档测试 2. 前后端联调
在全局参数设置中设置token(否则会被拦截器拦截直接返回401error)
代码完善
- 由于username唯一 因此应该设置全局异常处理器对异常进行处理
- 解决问题2
**思考:**解析出登录员工id后,如何传递给Service的save方法?
通过ThreadLocal进行传递。
用户登录请求后,后续请求头再次请求时就会携带一个JWT token ,用这个JWTtoken,在拦截器中就能解析出当前登录用户id并将其放入内存,之后在serviceImpl中就可以将其取出
客户端发起的每一次请求 都是一个线程
在拦截器存进去
在serviceImpl里取出来
员工分页查询
DAY01 02涉及到的知识
Yapi 和Swagger
全局异常处理
ThreadLocal
DAY03
阿里云OSS
事务注解 @Transactional
.builder()
DAY04
新增套餐–不懂的点
根据分类id查询菜品时我们是如何将分类id传进去的 查询到菜品后返回的是dish类型 如何将返回的dish对象变为新增套餐时请求参数中的setmealDishes
基本和DAY03涉及的知识点基本一样
DAY05
Redis-- 存储状态值status
常用数据类型
@SpringBootTest注解
Day06
HttpClient
在java中通过编码方式发送http请求
在引入aliyun.oss的时候已经将其依赖传递
流程图
复习jwt令牌
DAY07
使用redis缓存,减少数据库查询操作
需要修改redis中缓存的数据的情况
新增/修改/删除菜品 起售停售菜品
Spring-cache进行缓存优化
底层基于代理技术
@CachePut注解
@Cacheable注解
在方法执行前先通过controller创建的代理对象去查询redis中有没有数据,有则直接返回,controller.java中的方法就不会被执行;没有 则需要通过反射调用这个方法 到数据库中去查询数据 并将查询到的数据放入redis缓存
@CacheEvict
通过controller创建的代理对象 在这个代理对象中动态的将要删除的key计算出来,计算出来之后通过代理对象操作redis,最终将缓存数据清理
缓存套餐开发代码中的应用
/user/SetmealController中用到
@Cacheable(cacheNames = “setmealCache”,key = “#categoryId”) //key: setmealCache::100
/admin/SetmealController和/admin/DishController中用到
@CacheEvict(cacheNames = “setmealCache”, allEntries = true)
添加购物车
冗余字段的作用–空间换时间
避免了多表联查 提高查询速度
冗余字段一般不能大量使用 一般使用冗余字段的属性都比较稳定,不会经常变化
需解决的问题
要插入的数据如果已经存在了,只需要将此类物品的数量进行更新
如果不存在 才需要进行插入操作
根据用户id来查询不同用户的购物车
涉及到jwt token ThreadLocal 拦截器 相关知识
因为ShoppingCartDTO中并没有登录用户id,所以我们需要从token中获取
在用户登录后 我们每次发请求后会携带一个token 在拦截器中会解析这个token,这个token中就包含登录用户id,并通过ThreadLocal将这个登录用户id就绑定好了,因此我们在controller中就可以通过ThreadLocal将其取出
在获取登录用户的id 即userId的过程中
代码有点小bug
以下3条会各自记录成不同数据 而不会number+1
DAY08
用户下单
@Transactional事务注解
在用户下单功能的serviceImpl中
出现的问题是在order表中插入数据成功而因为在orderDetail的mapper.xml中sql语句编写的错误导致orderDetail表中插入数据失败,因此此时需要事务回滚
订单支付
在订单支付过程中 一些过程对安全性要求比较高,
如何保证数据安全呢------加密解密 签名多种方式
微信后台如何调用商户系统–内网穿透
当前我们商户系统的ip是一个自己笔记本电脑的Ip,即局域网中的一个ip地址,此时微信后台调用不到;要实现调用的话就要求我们的这个笔记本获取到一个公网ip