代码拉取完成,页面将自动刷新
【模板】 接口定义: 请求路径: 请求方式: 请求参数: 响应数据: 思路分析: controller: service: mapper: day02: 员工模块:employee 1.新增员工: 接口定义: 请求路径:/admin/employee 请求方式:POST 请求参数:json格式--> {"username":"xxx","name":"xxx"...} 使用DTO封装 响应数据:Result data:null 思路分析: controller: 在EmployeeController中定义一个新增方法: 1.打印日志 2.调用service的新增方法 3.返回结果对象 service: 在EmployeeService接口中定义一个新增方法,并在实现类中实现该方法: 0.补充基础属性 1.密码加密之后再插入到数据库 2.调用mapper的insert方法 mapper: 在EmployeeMapper接口中定义一个新增方法: --基于注解写sql句: insert into employee values(null,#{},#{},#{},#{},#{},#{}) 存在的问题: 1.java.sql.SQLIntegrityConstraintViolationException: Duplicate entry 'lisi' for key 'employee.idx_username' 原因:因为username在表中设置了唯一约束,添加相同的用户名会报上述的错 解决方案:通过全局异常处理器处理该异常,返回响应的错误信息 2.设置创建人和更新人的时候,id直接写死了 解决方案:通过jwt令牌解析之后,获取当前登录人id,给创建人和更新人赋值 TheadLocal 2.员工分页: 接口定义: 请求路径:/admin/employee/page 请求方式:GET 请求参数:?name=xx&page=xx&pageSize=xx 响应数据:Result<PageResult> 思路分析: controller: 在EmployeeController中定义一个分页查询方法: 1.调用service的分页查询方法,获取分页结果对象PageResult 2.返回结果 service: 在EmployeeService接口中定义一个分页方法,并在实现类中实现该方法: //使用分页插件完成分页 0.导入分页插件依赖 1.设置分页参数 PageHelper.startPage(x,x) 2.调用mapper的条件分页查询 3.强转Page类型 4.封装PageResult对象,并返回 mapper: 在EmployeeMapper接口中定义一个条件分页方法: 基于xml开发--动态sql <if> sql语句:select * from employee where name like concat('%',#{name},'%') order by create_time desc 【扩展】修改密码: 接口分析: 请求路径:/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 = ? day03: 公共字段自动填充: 思路分析: 选择用AOP技术实现 0.导入aop相关依赖 1.定义切面类,在类中定义方法(通知--选择前置通知@Before) 2.在方法上面打上注解,并且写上表达式(使用注解的方式) 2.1 自定义一个注解 3.方法体逻辑分析: 3.1 根据连接点,获取到方法签名,根据方法签名,拿到方法的参数对象 Employee 3.2 判断方法的操作类型(根据注解里面的属性值判断)---注解的属性类型选择枚举类型 如果是新增,那么赋值四个字段(创建时间、更新时间、创建人、更新人) 如果是更新,那么赋值两个字段(更新时间、更新人) 3.2 通过反射,可以拿到字节码对象,根据字节码对象获取方法对象,调用方法对象,赋值 通过反射,可以拿到字节码对象,根据字节码对象获取成员变量,设置该变量的值 注解里面定义两个变量 public class XXX{ public static final String INSERT = "insert"; public static final String UPDATE = "update"; } 用枚举类 public Enum Opreation { INSERT,UPDATE } 涉及的技术点:AOP、自定义注解、反射、枚举 删除菜品: 接口定义: 请求路径:/admin/dish 请求方式:DELETE 请求参数:ids=1,2,3.. 响应数据:Result data:null 思路分析: controller: service: //0.开启事务 1.启售中的菜品不能删除,查dish 2.被套餐关联的菜品不能删除,查setmeal_dish 3.先删菜品 4.再删口味 mapper: sql语句: delete from dish where id in (1,2,3); delete from dish_flavor where dish_id in (1,2,3); 修改菜品: 根据id查询菜品 接口定义: 请求路径:/admin/dish/{id} 请求方式:GET 请求参数:路径参数 id 响应数据:Result data:DishVO 根据类型查询分类【已完成】 文件上传【已完成】 修改菜品 接口定义: 请求路径:/admin/dish 请求方式:PUT 请求参数:json 使用DishDTO封装 响应数据:Result data:null 思路分析: 菜品启售停售:【作业】 接口定义: 请求路径:/admin/dish/status/{status} 请求方式:POST 请求参数:路径参数status+普通参数id 响应数据:Result data:null 思路分析: 菜品停售,则包含菜品的套餐同时停售 controller: 在DishController中定义一个启售停售方法: 1.调用service的方法 2.返回结果 service: 在DishService接口中定义一个启售停售方法,并在实现类中实现: 1.构造Dish对象,调用mapper更新方法,更新状态 2.如果是停售,需要将关联的套餐也停售 2.1 根据菜品id查询套餐信息(联表查询dish、setmeal、setmeal_dish) 2.2 如果能查出套餐,则调用套餐mapper,修改套餐状态为停售 注意:此处涉及到多张表的修改操作,所以需要开启事务 mapper: 在DishMapper中定义更新方法 在SetmealMapper中定义查询方法和更新方法 --------------------------------------------------------------------------------------- day04: 项目实战--完成套餐管理 - 新增套餐 - 套餐分页查询 - 删除套餐 - 修改套餐 - 起售停售套餐 --------------------------------------------------------------------------------------- 1.新增套餐 1.1 文件上传【已完成】 1.2 根据分类类型查询分类列表【已完成】 1.3 根据分类id或菜品名称查询菜品 接口定义: 请求路径:/admin/dish/list 请求方式:GET 请求参数:categoryId \ name 响应参数:Result data:菜品对象dish 1.4 新增套餐 接口定义: 请求路径:/admin/setmeal 请求方式:POST 请求参数:json格式 使用SetmealDTO封装 响应参数:Result data:null 2.套餐分页查询 接口定义: 请求路径:/admin/setmeal/page 请求方式:GET 请求参数:page=1&pageSize=10&name=test&categoryId=13&status=1 响应参数:Result data:套餐分页列表 PageResult 3.删除套餐 接口定义: 请求路径:/admin/setmeal 请求方式:DELETE 请求参数:ids (数组参数) 响应参数:Result data:null 4.修改套餐 4.1 根据id查询套餐 接口定义: 请求路径:/admin/setmeal/{id} 请求方式:GET 请求参数:路径参数 id 响应参数:Result data: SetmealVO 4.2 根据类型查询分类(已完成) 4.3 根据分类id查询菜品(已完成) 4.4 图片上传(已完成) 4.5 修改套餐 接口定义: 请求路径:/admin/setmeal 请求方式:PUT 请求参数:json格式 封装到SetmealDTO 响应参数:Result data: null 5.起售停售套餐 接口定义: 请求路径:/admin/setmeal/status/{status} 请求方式:POST 请求参数:路径参数 status + 普通参数 id 响应参数:Result data: null day05: 店铺营业状态设置--基于redis存在状态 思路分析: controller: 在ShopController中定义一个设置状态的方法: 1.注入RedisTemplate对象,通过对象获取ValueOperations对象 2.通过ValueOperations对象操作String类型数据 3.直接往redis中设置一个字符串类型,value就是状态值 service: 无 mapper: 无 管理端-店铺营业状态获取--基于redis获取状态 思路分析: controller: 在ShopController中定义一个查询状态的方法: 1.通过RedisTemplate对象获取ValueOperations对象 2.通过ValueOperations对象获取SHOP_STATUS 3.将得到的value值响应给前端 service: 无 mapper: 无 day06: 微信登录 接口定义: 请求地址:/user/user/login 请求方式:POST 请求参数:json格式 {"code":"xxx"} DTO封装 响应数据:Result Data:xxxVO封装 day07: 缓存菜品: 1.查询的时候,给每个分类下的菜品缓存到redis中 2.增删改的时候,需要清理缓存 情况一:新增菜品的时候,只清除当前菜品所属分类下的缓存菜品数据 情况二:修改菜品和更新菜品的时候,全部清除所有分类下的菜品缓存数据 购物车: 添加购物车 接口定义: 请求路径:/user/shoppingCart/add 请求方式:POST 请求参数:{"dishId":"xxx","dishFlavor":"xxx",...} JSON格式,使用DTO封装 响应数据:Result data:null 查看购物车 接口定义: 请求路径:/user/shoppingCart/list 请求方式:GET 请求参数:无 【注意:根据用户id查询购物车】 响应数据:Result data:List<ShoppingCart> 清空购物车 接口定义: 请求路径:/user/shoppingCart/clean 请求方式:DELETE 请求参数:无 【注意:需要根据用户id进行删除】 响应数据:Result data:null
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。