# java_group_bo **Repository Path**: machine-gmam/java_group_bo ## Basic Information - **Project Name**: java_group_bo - **Description**: 这是一个外卖项目,个人的。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-12 - **Last Updated**: 2023-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 【模板】: 接口分析: 接口分析: 请求路径: 请求方式: 请求参数: 响应数据: 代码准备工作: controller service mapper day02🐏: 新增员工: 接口分析: 请求路径: /admin/employee 请求方式:POST 请求参数:json 格式: {id..idNumber..name..phone..sex...username} ---> 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 'niuniu' for key 'employee.idx_username' SQLIntegrityConstraintViolationException 解决方法: 捕获异常,并且返回自定义的异常信息 2. 创建人和更新人写死了,需要动态去获取,在token里。 解决方法: ThreadLocal 拦截器 --> 控制器 --> service --> mapper 拦截器 --- set service -- get 接口分析: 员工分页查询: 请求路径:page 请求方式:GET 请求参数:page pageSize (Query普通) EmployeePageQueryDTO 来接收 响应数据:Result data: PageResult 代码准备工作: controller 在EmployeeController中定义一个查询分页方法; 1.调用service的分页查询方法,获取分页对象PageResult 2.返回结果 service 在EmployeeService接口中定义一个分页查询方法,并在实现类中实现; 使用分页插件--导入分页插件依赖 PageHelper 1.设置分页参数 PageHelper.startPage... 2.调用mapper的条件查询 Page<> 3.封装分页对象PageResult,并返回 mapper 在EmployeeMapper接口定义一个条件查询方法 1.基于xml方式开发,动态sql ---> 倒序 2.Sql: select * from employee where name like ''; 员工启动、禁用: 接口分析: 请求路径:/admin/employee/status/{status} 请求方式:POST 请求参数:路径参数 status,普通参数, id 响应数据:Result data : null 代码准备工作: controller 1.调用service员工状态方法 service 1.补充基本信息,根据员工对象的更新时间,更新人 2.调用mapper方法 mapper 基于xml方式开发,为了兼容后面的员工编辑操作 根据id查询员工[回显] 接口分析: 请求路径:/admin/employee/{id} 请求方式:GET 请求参数: id 响应数据: Result data : employee 代码准备工作: controller 1.调用service根据id查询员工方法 2.返回结果 service 1.调用mapper根据id查询员工方法 mapper 基于注解的方式来开发 @Select 编辑员工信息 接口分析: 请求路径:/admin/employee 请求方式:PUT 请求参数:JSON EmployeeDTO 来接收 @RequestBody 响应数据:Result data : EmployeeDTO 代码准备工作: controller 1.调用service更新员工方法 2.返回结果 service 1.补充基本字段、更新时间、更新人 Thread 2.调用mapper更新员工方法 mapper 基于xml方式开发,动态sql 修改员工密码 接口分析: 请求路径:/admin/employee/editPassword 请求方式:PUT 请求参数:json --PasswordEditDTO 封装 响应数据:Result data : null 代码准备工作: controller 1.调用servrice更改密码方法 2.返回结果 service 1.进行一个判断,判断旧密码是否与数据库的密码一致? 2.旧密码与数据库的密码不一致就报错 密码修改错误 throw new PasswordEditFailedException(MessageConstant.PASSWORD_EDIT_FAILED) mapper 更新(编辑)员工 -- 动态sql的方法 🐒哥 day03 公共字段自动填充: 问题分析: 在员工模块、分类模块、菜品模块等,在做新增和更新时,需要补充基础属性(create_user,create_time,update_time,update_user) 导致代码臃余了,维护困难。 解决思路:使用公共字段主动填充功能(mybatis plus 有这个功能--后面学) 0.导入aop相关依赖 1.使用什么通知?--前置通知@Before 2.什么方式写? execution() @annotation √ 3.定义一个类 @Aspect @Component @Before:方法在目标方法前执行 4.定义没枚举类、定义两个参数(新增/更新) public static final String UPDATE = 'update' public static final String INSERT = 'insert' public enum AutoFill{ UPDATE,INSERT; } 5.获取方法的参数 6.通过反射知识获取参数对象的方法对象 7.调用方法,为其赋值 如果是新增,赋值(update_time,create_time,create_user,create_time) 如果是更新,赋值(update_time,update_user) 使用到的知识: AOP/枚举/自定义注解/反射 day03 菜品模块: 新增菜品 根据类型查询分类列表[已完成] 文件上传 接口分析: 请求路径:/admin/dish 请求方式:POST 请求参数:json dishDTO -->封装 响应数据:Result data : dish 代码准备工作: controller 1.调用mapper新增菜品/包含口味方法 service 1.构建菜品数据,将菜品基本信息保存到dish表 2.将口味信息保存到dish_flavor表 【重点】 mapper 数据模型: 菜品表dish -- 菜品口味表 dish_flavor day03 --- 分类模块 根据id查询分类[回显] 接口分析: 请求路径:/admin/category/{id} 请求方式:GET 请求参数: id 响应数据: Result data : category 代码准备工作: controller 1.调用service根据id查询分类方法 2.返回结果 service 1.调用mapper根据id查询分类方法 mapper 基于注解的方式来开发 @Select 修改分类: 接口分析: 请求路径:/admin/category 请求方式:PUT 请求参数:json categoryDTO 响应数据:Result data: null 代码准备工作: controller service mapper