苍穹外卖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框架的消息转化器;
相关推荐
Violet_YSWY3 分钟前
任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存【示例】
java·数据结构
SimonKing10 分钟前
你的项目还在用MyBatis吗?或许这个框架更适合你:Easy-Query
java·后端·程序员
nice_lcj52010 分钟前
认识多线程:单例模式
java·开发语言·单例模式
货拉拉技术13 分钟前
从代码到配置:如何用SQL配置实现数据核对
java·后端
程序员小假35 分钟前
设计模式了解吗,知道什么是饿汉式和懒汉式吗?
java·后端
拾忆,想起36 分钟前
TCP粘包拆包全解析:数据流中的“藕断丝连”与“一刀两断”
java·网络·数据库·网络协议·tcp/ip·哈希算法
后端小张40 分钟前
【JAVA 进阶】穿越之我在修仙世界学习 @Async 注解(深度解析)
java·开发语言·spring boot·后端·spring·注解·原理
ChMao1 小时前
java解析word中的excel
java
百锦再1 小时前
第6章 结构体与方法
android·java·c++·python·rust·go
lang201509281 小时前
Maven 4:20年老工具的重生之路
java·maven