苍穹外卖Day02——总结2

前期文章

文章标题 地址
苍穹外卖Day01------总结1 https://blog.csdn.net/qq_43751200/article/details/135466359?spm=1001.2014.3001.5501
苍穹外卖Day01------解决总结1中存在的问题 https://lushimeng.blog.csdn.net/article/details/135473412

总结2

  • 前期文章
  • [1. 新增员工模块](#1. 新增员工模块)
    • [1.1 C(Create)、U(Update)、R(Retrivev)、 D(Delete)](#1.1 C(Create)、U(Update)、R(Retrivev)、 D(Delete))
    • [1.2 分页查询接口设计](#1.2 分页查询接口设计)
    • [1.3 分页查询代码实现](#1.3 分页查询代码实现)
  • [2. 分类管理模块](#2. 分类管理模块)
    • [2.1 C(Create)、U(Update)、R(Retrivev)、D(Delete)](#2.1 C(Create)、U(Update)、R(Retrivev)、D(Delete))
  • [3. 总结](#3. 总结)
  • [4. 待补充内容....](#4. 待补充内容....)

1. 新增员工模块

员工管理整体界面效果

添加员工效果

修改员工信息效果

1.1 C(Create)、U(Update)、R(Retrivev)、 D(Delete)

对于新增员工信息接口,一定要确定好以下内容:

  1. 请求接口路径设计;
  2. 请求方式;
  3. 请求的参数;
  4. 接口返回的结果;

确定好上面四步后,以及MVC模型很容易进行接口开发。

例如下面是请求接口设计:

返回数据:

1.2 分页查询接口设计

在进行代码撰写的时候,发现分页查询还是存在不熟练问题,下面进行详细的流程阐述:

业务规则

  • 根据页码展示员工信息
  • 每页展示10条数据
  • 分页查询时可以根据需要,输入员工姓名进行查询

依据1.1中接口设计的四原则确定接口:

注意事项:

  • 请求参数类型为Query,不是json格式提交,在路径后直接拼接。/admin/employee/page?name=zhangsan
  • 返回数据中records数组中使用Employee实体类对属性进行封装。

1.3 分页查询代码实现

设计前端传值到后端的DTO:

java 复制代码
package com.sky.dto;

import lombok.Data;

import java.io.Serializable;

@Data
public class EmployeePageQueryDTO implements Serializable {

    //员工姓名
    private String name;

    //页码
    private int page;

    //每页显示记录数
    private int pageSize;

}

封装PageResult: 后面所有的分页查询,统一都封装为PageResult对象。

java 复制代码
package com.sky.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 封装分页查询结果
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult implements Serializable {

    private long total; //总记录数

    private List records; //当前页数据集合

}

员工信息分页查询后端返回的对象类型为: Result

java 复制代码
package com.sky.result;

import lombok.Data;

import java.io.Serializable;

/**
 * 后端统一返回结果
 * @param <T>
 */
@Data
public class Result<T> implements Serializable {

    private Integer code; //编码:1成功,0和其它数字为失败
    private String msg; //错误信息
    private T data; //数据

    public static <T> Result<T> success() {
        Result<T> result = new Result<T>();
        result.code = 1;
        return result;
    }

    public static <T> Result<T> success(T object) {
        Result<T> result = new Result<T>();
        result.data = object;
        result.code = 1;
        return result;
    }

    public static <T> Result<T> error(String msg) {
        Result result = new Result();
        result.msg = msg;
        result.code = 0;
        return result;
    }

}

Controller层

java 复制代码
/**
     * 员工分页查询
     * @param employeePageQueryDTO
     * @return
     */
    @GetMapping("/page")
    @ApiOperation("员工分页查询")
    public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){
        log.info("员工分页查询,参数为:{}", employeePageQueryDTO);
        PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);//后续定义
        return Result.success(pageResult);
    }

Service层接口

java 复制代码
/**
     * 分页查询
     * @param employeePageQueryDTO
     * @return
     */
    PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);

Service层实现类

java 复制代码
/**
     * 分页查询
     *
     * @param employeePageQueryDTO
     * @return
     */
    public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
        // select * from employee limit 0,10
        //开始分页查询
        PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());

        Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);//后续定义

        long total = page.getTotal();
        List<Employee> records = page.getResult();

        return new PageResult(total, records);
    }

Mapper层

java 复制代码
/**
     * 分页查询
     * @param employeePageQueryDTO
     * @return
     */
    Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO);

在 src/main/resources/mapper/EmployeeMapper.xml 中编写SQL:

java 复制代码
<select id="pageQuery" resultType="com.sky.entity.Employee">
        select * from employee
        <where>
            <if test="name != null and name != ''">
                and name like concat('%',#{name},'%')
            </if>
        </where>
        order by create_time desc
    </select>

2. 分类管理模块

分类管理前端页面

新增菜品分类 和 新增套餐分类

修改分类

2.1 C(Create)、U(Update)、R(Retrivev)、D(Delete)

依据接口设计的四原则

  1. 确定接口请求路径设计;
  2. 确定请求方式;
  3. 确定请求的参数;
  4. 去顶接口返回的结果;

3. 总结

  1. 后端的主要任务是进行CURD操作,依据MVC模型,层层递进;
  2. 一般企业会先进行接口设计:会确认请求方式、请求参数以及返回数据类型。在前端数据插入到后端时一般需要DTO类型数据,后端数据传到前端需要VO数据类型;
  3. 为了统一返回类型,一般使用自定义类Result:(code,msg,data);
  4. 常量类设计,一般进行统一的封装,便于统一进行修改。

4. 待补充内容...

  1. BeanUtils类:在项目中使用了该对象属性拷贝方法copyProperties;
  2. DigestUtils类:对用户密码进行MD5加密之后再插入到数据库中;
  3. LocalDateTime类;
  4. ThreadLocal类:在项目中主要是在添加人员信息时需要获取创建人id,使用ThreadLocal类可以访问登录人员的id信息;
  5. 了解扩展Spring MVC框架的消息转化器;
相关推荐
FF在路上36 分钟前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进43 分钟前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
众拾达人1 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
皓木.1 小时前
Mybatis-Plus
java·开发语言
不良人天码星1 小时前
lombok插件不生效
java·开发语言·intellij-idea
守护者1702 小时前
JAVA学习-练习试用Java实现“使用Arrays.toString方法将数组转换为字符串并打印出来”
java·学习
源码哥_博纳软云2 小时前
JAVA同城服务场馆门店预约系统支持H5小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
禾高网络2 小时前
租赁小程序成品|租赁系统搭建核心功能
java·人工智能·小程序
学会沉淀。2 小时前
Docker学习
java·开发语言·学习
如若1232 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python