# Group2-day9 **Repository Path**: ItHouChenHui/group2-day9 ## Basic Information - **Project Name**: Group2-day9 - **Description**: 非常好的项目啦啦啦啦 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-09-11 - **Last Updated**: 2023-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 【模板】: 接口分析: 请求路径: 请求方式: 请求参数: 响应数据: 代码准备工作: controller: service: mapper: 思路分析: controller: service: mapper: day02: 新增员工: 接口分析: 请求路径:/admin/employee 请求方式:POST 请求参数:json格式 {"id":....,"name":..} -->使用DTO封装 响应数据:Result data:null 思路分析: controller: 在EmployeeController中定义一个新增方法: 1.直接调用service的新增方法 2.返回成功结果 service: 在EmployeeService接口中定义一个新增方法,并在实现类中实现: 1.补充基础属性:创建时间、更新时间、创建人、更新人 2.补充密码字段:通过md5加密再补充 3.调用mapper的新增方法 mapper: 在EmployeeMapper接口定义一个新增方法: 1.基于注解 @Insert 2.sql: insert into ... 存在问题: 1.Duplicate entry 'wangwu' for key 'employee.idx_username' 解决方法:捕获异常,并且返回自定义的异常信息 2.创建人和更新人写死了,需要动态获取(获取当前登陆人的id) 解决方法:通过ThreadLocal解决 员工分页查询 接口分析: 请求路径:/admin/employee/page 请求方式:GET 请求参数:page=1&pageSize=10&name=aaa 普通参数 用EmployeePageQueryDTO封装 响应数据:Result data:PageResult 思路分析: controller: 在EmployeeController中定义一个分页查询方法: 1.调用service的分页查询方法,获取分页对象PageResult 2.返回结果 service: 在EmployeeService接口中定义一个分页查询方法,并在实现类中实现: //使用分页插件--导入分页插件依赖 1.设置分页参数 PageHelper.startPage... 2.调用mapper的条件查询 Page<> 3.封装分页对象PageResult,并返回 mapper: 在EmployeeMapper接口定义一个条件查询方法: 1.基于xml方式开发,动态SQL 2.Sql: select * from .... 员工启用|禁用 接口分析: 请求路径:/admin/employee/status/{status} 请求方式:POST 请求参数:路径参数 status, 普通参数 id 响应数据:Resutl data:null 思路分析: controller: service: 注意:更新员工需要构造员工对象,补充更新时间和更新人 mapper: 基于xml,为了兼容后续的编辑员工操作 编辑员工 回显--根据id查询员工 接口分析: 请求路径:/admin/employee/{id} 请求方式:GET 请求参数:路径参数 id 响应数据:Resutl data:员工对象 思路分析: controller: service: mapper: 更新员工 接口分析: 请求路径:/admin/employee 请求方式:PUT 请求参数:json格式--使用EmployeeDTO封装 响应数据:Resutl data:null 思路分析: controller: service: mapper: day03 修改密码: 接口分析: 请求路径:/admin/employee/editPassword 请求方式:PUT 请求参数:{oldPassword: "123456", newPassword: "111111"} //需要自己补充员工id 响应数据:Result data:null 思路分析: controller: 调用service service: 1.需要自己补充员工id--从哪里获取?需要动态获取(获取当前登陆人的id) -- ThreadLocal存了id,从ThreadLocal获取 2.对比数据库中的密码和前端传递过来的旧密码(加密之后对比)是否一致 3.如果一致,对新密码进行加密 4.调用mapper层的更新方法 mapper: update employee set password = 111111 where id = ? 公共字段自动填充: 问题分析: 在员工模块、分类模块、菜品模块等,在做新增和更新操作的时候,都需要补充基础属性(创建人、创建时间、更新人、更新时间) 导致代码冗余、不方便后期维护 解决思路:使用公共字段自动填充功能 使用AOP技术--面向切面(特定方法)编程 1.使用什么通知?--前置通知 2.切入点咋写?两种方式?--使用注解方式,在需要增强的方法上面打上注解即可 2.1 自定义注解 3.定义切面类 @Aspect @Component 定义一个方法,在方法上打上@Before(使用自定义方式写切入点) 1.获取方法对象 2.获取到方法对象上面的注解对象, 获取到注解里面的属性值 3.根据注解属性值, 判断新增还是更新操作 4.定义枚举类, 定义两个参数(新增\更新) //public static final String UPDATE = "update" //public static final String INSERT = "update" public enum AutoFill{ UPDATE, INSERT; } 5.获取方法的参数 6.通过反射知识获取参数对象的方法对象 7.调用方法,为其赋值 7.1 如果是新增,那就赋值(创建时间 更新时间 创建人 更新人) 7.2 如果是更新,那就赋值(更新时间 更新人) 使用到的知识: AOP\枚举\自定义注解\反射 菜品模块: 新增菜品 根据类型查询分类列表 [已完成] 文件上传 [待完成] 接口分析: 请求路径:/admin/common/upload 请求方式:POST 请求参数:multipart/form-data格式 file 响应数据:Result 新增菜品 [待完成] 接口分析: 请求路径:/admin/dish 请求方式:POST 请求参数:json格式--使用DishDTO封装 响应数据:Result 数据模型: 菜品表dish\ 菜品口味表dish_flavor 代码准备: controller:DishController service:DishService\DishServiceImpl mapper:DishMapper \ DishFlavorMapper 菜品分页查询: 注意: 需要展示分类名称,需要关联分类表,根据分类id查询分类名称 [批量]删除菜品 注意: 涉及到三张表的操作 dish dish_falvor setmeal_dish dish : dish_falvor = 1 对 多 dish : setmeal_dish = 1 对 多 修改菜品 涉及到的请求有三个: 1.根据分类类型查询分类列表 [已完成] 2.文件上传 [已完成] 3.根据id查询菜品信息 [待完成] 4.修改菜品 [待完成] day04: 项目实战--完成套餐管理模块 day05: 店铺营业状态设置:--基于redis存状态数据,不需要数据表 1.设置店铺营业状态 接口分析: 请求路径:/admin/shop/{status} 请求方式:PUT 请求参数:路径参数 status 响应数据:Result data:null 2.管理端获取营业状态 接口分析: 请求路径:/admin/shop/status 请求方式:GET 请求参数:无 响应数据:Result data:status 3.用户端获取营业状态 接口分析: 请求路径:/user/shop/status 请求方式:GET 请求参数:无 响应数据:Result data:status day06: 微信登录: 接口定义: 请求路径:/user/user/login 请求方式:POST 请求参数:json格式 {"code":xx} --UserLoginDTO 响应数据:Result data:UserLoginVO 思路: 1.准备好配置文件:配置appid、appsecret, 配置jwt信息 2.controller定义接口 3.实现登录功能 商品浏览功能需求分析: 涉及四个接口 1.查询分类 接口分析: 请求路径:/user/category/list 请求方式:GET 请求参数:type 可选参数 响应数据:Result data:List 2.根据分类id查询菜品 接口分析: 请求路径:/user/dish/list 请求方式:GET 请求参数:categoryId 响应数据:Result data: 3.根据分类id查询套餐 接口分析: 请求路径:/user/setmeal/list 请求方式:GET 请求参数:categoryId 响应数据:Result data: 4.根据套餐id查询包含的菜品 接口分析: 请求路径:/user/setmeal/dish/{id} 请求方式:GET 请求参数:路径参数 id 响应数据:Result data: day07: 购物车 添加购物车 接口分析: 请求路径:/user/shoppingCart/add 请求方式:POST 请求参数:{"setmealId":45} | {"dishFlavor":"不要蒜","dishId":51} 响应数据:Result 查看购物车 接口分析: 请求路径:/user/shoppingCart/list 请求方式:GET 请求参数:无 --注意:需要构造请求条件【用户id】 响应数据:Result data:购物车列表 清空购物车 接口分析: 请求路径:/user/shoppingCart/clean 请求方式:DELETE 请求参数:无 --注意:需要构造请求条件【用户id】 响应数据:Result data:null