岳阳网站建设网站/班级优化大师app

岳阳网站建设网站,班级优化大师app,新蔡县城乡建设局网站,建设银行河南省分行网站目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功: 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具:Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…

目录

  • 一、在本地部署并启动Nginx服务
    • 1. 解压Nginx压缩包
    • 2. 启动Nginx服务
    • 3. 验证Nginx是否启动成功:
  • 二、导入接口文档
    • 1. 黑马程序员提供的YApi平台
    • 2. YApi Pro平台
    • 3. 推荐工具:Apifox
  • 三、Swagger
    • 1. 常用注解
      • 1.1 @Api与@ApiModel
      • 1.2 @ApiModelProperty与@ApiOperation
  • 四、DTO的使用原因
    • 1. 实体类 Employee
    • 2. DTO EmployeeDTO
    • 3. 使用 DTO 的场景
      • 3.1 查询员工信息
      • 3.2 更新员工信息
      • 3.3 新增员工
    • 4. DTO、VO和实体类的区别
  • 五、为什么使用 XML 注解而不是 MyBatis 注解
    • 1. 使用 XML 注解的原因
      • 1.1 动态 SQL 支持
      • 1.2 SQL 与代码分离
      • 1.3 复用性
      • 1.4 工具支持
    • 2. MyBatis 注解的局限性
      • 2.1 动态 SQL 支持有限
      • 2.2 可读性差
      • 2.3 维护困难
  • 六、Spring Boot 的请求映射规则
    • 1. 类级别路径
    • 2. 方法级别路径
      • 2.1 分页查询
      • 2.2 根据 ID 查询菜品
      • 2.3 修改菜品
      • 2.4 新增菜品
      • 2.5 批量删除菜品
    • 3. 如何区分不同的功能
    • 4. 示例请求
      • 4.1 新增菜品
      • 4.2 修改菜品
      • 4.3 批量删除菜品
      • 4.4 分页查询菜品
      • 4.5 根据 ID 查询菜品
  • 七、接口设计中的是否必须原则
    • 1. 请求参数说明
    • 2. Java代码片段分析
    • 3. XML映射文件分析
  • 八、阿里云OSS
  • 九、JWT令牌


视频链接:黑马程序员Java项目实战《苍穹外卖》,最适合新手的SpringBoot+SSM的企业级Java项目实战
网盘资料:苍穹外卖讲义&前后端源码

一、在本地部署并启动Nginx服务

在开发过程中,我们经常需要使用Nginx来部署前端项目或作为反向代理服务器。

1. 解压Nginx压缩包

首先,确保你已经从黑马程序员资料中下载了Nginx的压缩包。接下来,按照以下步骤解压:

选择解压路径

  • 将Nginx压缩包解压到一个全英文路径中。例如:
    D:\nginx
    
  • 注意:路径中不要包含中文或特殊字符,否则可能会导致Nginx无法正常运行。

2. 启动Nginx服务

解压完成后,按照以下步骤启动Nginx:

进入Nginx目录

  • 打开解压后的Nginx文件夹,找到nginx.exe文件。路径通常为:
    C:\nginx\nginx.exe
    

启动Nginx

  • 双击nginx.exe文件,启动Nginx服务。
  • 启动后,Nginx会在后台运行,你可以在任务管理器中看到nginx.exe进程。

3. 验证Nginx是否启动成功:

  • 打开浏览器,访问以下地址(其中80是默认端口可省略不写):
    http://localhost:80
    
  • 如果看到此页面,说明Nginx已成功启动。
    在这里插入图片描述
  • 注意:Nginx默认不会随系统自动启动,因此每次重启电脑后,都需要手动启动Nginx

二、导入接口文档

在开发过程中,接口管理平台是团队协作和项目管理的重要工具。以下是几个常用平台的对比:

1. 黑马程序员提供的YApi平台

  • 地址:http://yapi.smart-xwork.cn/
  • 状态:已弃用
  • 功能:适合用于接口管理和文档生成。

2. YApi Pro平台

  • 地址:https://yapi.pro/
  • 问题:需要挂梯子才能访问,且极易卡顿,使用体验不佳。

3. 推荐工具:Apifox

  • 地址:https://apifox.com/
  • 优势:
    • 无需梯子即可访问。
    • 性能流畅,支持接口文档、Mock数据、自动化测试等功能。
    • 支持导入YApi数据格式的接口文档,方便无缝迁移现有项目。

在这里插入图片描述


三、Swagger

Swagger 是一种用于设计、构建、记录和使用 RESTful Web 服务的开源框架。它提供了一套工具,帮助开发者设计、构建、文档化和测试 API。

启动服务:访问 http://localhost:8080/doc.html
在这里插入图片描述


1. 常用注解

通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:

注解说明
@Api用在类上,例如Controller,表示对类的说明
@ApiModel用在类上,例如entity、DTO、VO
@ApiModelProperty用在属性上,描述属性信息
@ApiOperation用在方法上,例如Controller的方法,说明方法的用途、作用

1.1 @Api与@ApiModel

在这里插入图片描述

在这里插入图片描述

1.2 @ApiModelProperty与@ApiOperation

在这里插入图片描述
在这里插入图片描述


四、DTO的使用原因

在项目中,Employee 是实体类(Entity),用于表示数据库中的员工记录,而 EmployeeDTO 是数据传输对象(DTO),用于在不同层之间传递数据。以下是使用 DTO 的主要原因和优势:

1. 实体类 Employee

package com.sky.entity;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;
import java.time.LocalDateTime;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Employee implements Serializable {private static final long serialVersionUID = 1L;private Long id;           // 员工IDprivate String username;   // 用户名private String name;       // 姓名private String password;   // 密码(敏感字段)private String phone;      // 手机号private String sex;        // 性别private String idNumber;   // 身份证号private Integer status;    // 状态private LocalDateTime createTime; // 创建时间(内部字段)private LocalDateTime updateTime; // 更新时间(内部字段)private Long createUser;   // 创建人(内部字段)private Long updateUser;   // 更新人(内部字段)
}

2. DTO EmployeeDTO

package com.sky.dto;import lombok.Data;
import java.io.Serializable;@Data
public class EmployeeDTO implements Serializable {private Long id;           // 员工IDprivate String username;   // 用户名private String name;       // 姓名private String phone;      // 手机号private String sex;        // 性别private String idNumber;   // 身份证号
}

3. 使用 DTO 的场景

3.1 查询员工信息

  • 前端只需要员工的基本信息(如 idusernamenamephonesexidNumber)。
  • 后端返回 EmployeeDTO,过滤掉敏感字段(如 password)和内部字段(如 createTime)。

3.2 更新员工信息

  • 前端传递 EmployeeDTO 作为请求体,后端根据 DTO 更新员工信息。
  • 避免前端传递不必要的字段(如 passwordcreateTime)。

3.3 新增员工

  • 前端传递 EmployeeDTO 作为请求体,后端将 DTO 转换为实体类并保存到数据库。
  • 避免前端传递内部字段(如 createTimeupdateTime)。

4. DTO、VO和实体类的区别

特性DTOVOEntity
目的数据传输数据展示或封装值表示数据库中的数据结构
使用场景跨层数据传输(如Controller-Service)展示层或领域模型数据库操作、业务逻辑
可变性可变(通常有setter)通常不可变(无setter)可变(用于持久化和业务逻辑)
字段与传输需求相关与展示或业务逻辑相关与数据库表字段严格对应
行为通常无行为可能包含简单行为(如格式化)包含业务逻辑和验证规则
示例UserDTOUserVOUserEntity

五、为什么使用 XML 注解而不是 MyBatis 注解

1. 使用 XML 注解的原因

1.1 动态 SQL 支持

  • XML 提供了强大的动态 SQL 支持,例如 <if><foreach><choose> 等标签。
  • 在复杂的查询场景中,动态 SQL 可以更灵活地构建 SQL 语句。

1.2 SQL 与代码分离

  • 将 SQL 语句写在 XML 文件中,可以使 SQL 与 Java 代码分离,便于维护和管理。
  • 对于复杂的 SQL 语句,XML 文件的可读性更高。

1.3 复用性

  • XML 文件中的 SQL 语句可以在多个 Mapper 接口中复用。
  • 例如,可以在不同的 Mapper 接口中引用同一个 SQL 片段。

1.4 工具支持

  • MyBatis 提供了丰富的工具支持 XML 文件的编写和调试。
  • 例如,MyBatis Generator 可以自动生成 XML 映射文件。

2. MyBatis 注解的局限性

2.1 动态 SQL 支持有限

  • MyBatis 注解对动态 SQL 的支持较弱,复杂的 SQL 语句难以用注解实现。
  • 例如,@Select 注解无法直接实现 <foreach> 这样的动态 SQL。
<select id="getSetmealIdsByDishIds" resultType="java.lang.Long">select setmeal_id from setmeal_dish where dish_id in<foreach collection="dishIds" item="dishId" separator="," open="(" close=")">#{dishId}</foreach>
</select>

2.2 可读性差

  • 复杂的 SQL 语句写在注解中会导致代码冗长,可读性差。
  • 例如,一个包含多个条件的查询语句会显得非常混乱。

2.3 维护困难

  • SQL 语句与 Java 代码混合在一起,维护起来不如 XML 文件方便。
  • 修改 SQL 语句时需要重新编译 Java 代码。

你提到的代码中有两个 @PutMapping 注解没有指定路径,这意味着它们默认映射到类级别的路径 /admin/dish。以下是对这个问题的详细解释:


六、Spring Boot 的请求映射规则

在 Spring Boot 中,请求的映射是通过 类级别的 @RequestMapping方法级别的 @PutMapping@GetMapping 等注解 共同决定的。

  • 类级别的 @RequestMapping
    • 定义了该类中所有方法的公共路径前缀。
    • 例如,@RequestMapping("/admin/dish") 表示该类中的所有方法都映射到 /admin/dish 路径下。
    • 管理端发出的请求,统一使用/admin作为前缀。
    • 用户端发出的请求,统一使用/user作为前缀。
  • 方法级别的 @PutMapping@GetMapping
    • 定义了具体的 HTTP 方法和路径。
    • 如果方法级别的注解没有指定路径,则默认使用类级别的路径。

1. 类级别路径

@RestController
@RequestMapping("/admin/dish")
public class DishController {// 方法定义...
}
  • 所有方法的公共路径前缀是 /admin/dish

2. 方法级别路径

2.1 分页查询

@GetMapping("/page")
public Result<PageResult> page(DishPageQueryDTO dishPageQueryDTO) {// 方法实现...
}
  • 完整路径是 /admin/dish/page

2.2 根据 ID 查询菜品

@GetMapping("/{id}")
public Result<DishVO> getById(@PathVariable Long id) {// 方法实现...
}
  • 完整路径是 /admin/dish/{id}

2.3 修改菜品

@PutMapping
public Result update(@RequestBody DishDTO dishDTO) {// 方法实现...
}
  • 由于 @PutMapping 没有指定路径,默认使用类级别的路径 /admin/dish

2.4 新增菜品

@PostMapping
public Result save(@RequestBody DishDTO dishDTO) {// 方法实现...
}
  • 由于 @PostMapping 没有指定路径,默认使用类级别的路径 /admin/dish

2.5 批量删除菜品

@DeleteMapping
public Result delete(@RequestParam List<Long> ids) {// 方法实现...
}
  • 由于 @DeleteMapping 没有指定路径,默认使用类级别的路径 /admin/dish

3. 如何区分不同的功能

Spring Boot 通过 HTTP 方法 来区分不同的功能。例如:

HTTP 方法路径功能
POST/admin/dish新增菜品
PUT/admin/dish修改菜品
DELETE/admin/dish批量删除菜品
GET/admin/dish/page分页查询菜品
GET/admin/dish/{id}根据 ID 查询菜品

4. 示例请求

4.1 新增菜品

  • HTTP 方法POST
  • URL/admin/dish
  • 请求体
    {"name": "宫保鸡丁","price": 38.0,"flavors": [{"name": "微辣","value": "少辣"}]
    }
    

4.2 修改菜品

  • HTTP 方法PUT
  • URL/admin/dish
  • 请求体
    {"id": 1,"name": "宫保鸡丁","price": 40.0,"flavors": [{"name": "微辣","value": "少辣"}]
    }
    

4.3 批量删除菜品

  • HTTP 方法DELETE
  • URL/admin/dish?ids=1,2,3
  • 请求参数ids=1,2,3

4.4 分页查询菜品

  • HTTP 方法GET
  • URL/admin/dish/page?page=1&pageSize=10
  • 请求参数page=1&pageSize=10

4.5 根据 ID 查询菜品

  • HTTP 方法GET
  • URL/admin/dish/1
  • 路径参数id=1

七、接口设计中的是否必须原则

在这里插入图片描述

参数的必需与非必需性是通过不同的方式来体现的,以下是具体案例


1. 请求参数说明

从接口文档中可以看到,请求参数包括以下几项:

参数名类型说明必需性示例值
categoryIdstring分类id可选101
namestring菜品名称可选官保鸡丁
pagestring页码必需1
pageSizestring每页记录数必需10
statusstring分类状态可选1
  • 必需参数

    • pagepageSize 是分页查询的必需参数,用于指定查询的页码和每页的记录数。
  • 可选参数

    • categoryIdnamestatus 是可选参数,用于过滤查询结果。

2. Java代码片段分析

在此 Java 代码中,DishPageQueryDTO 是一个数据传输对象(DTO),用于封装分页查询的参数。以下是代码的详细分析:

public PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO) {// 1. 使用 PageHelper 进行分页PageHelper.startPage(dishPageQueryDTO.getPage(), dishPageQueryDTO.getPageSize());// 2. 调用 Mapper 进行查询Page<DishVO> page = dishMapper.pageQuery(dishPageQueryDTO);// 3. 返回分页结果return new PageResult(page.getTotal(), page.getResult());
}
  • 必需参数
    • dishPageQueryDTO.getPage()dishPageQueryDTO.getPageSize() 是分页查询的必需参数。
    • 如果这两个参数为空或未提供,分页功能将无法正常工作。

3. XML映射文件分析

在 SQL 代码中,动态 SQL 语句根据传入的参数生成查询条件。以下是代码的详细分析:

<select id="pageQuery" resultType="com.sky.vo.DishVO">select d.* , c.name as categoryName from dish d left outer join category c on d.category_id = c.id<where><if test="name != null">and d.name like concat('%',#{name},'%')</if><if test="categoryId != null">and d.category_id = #{categoryId}</if><if test="status != null">and d.status = #{status}</if></where>order by d.create_time desc
</select>
  • 可选参数
    • namecategoryIdstatus 是可选参数,通过 <if> 标签动态生成查询条件。
    • 如果某个参数为 null,则对应的条件不会添加到 SQL 查询中。

通过这种设计,分页查询接口既满足了基本的查询需求,又提供了灵活的过滤选项,适用于不同的业务场景。

八、阿里云OSS

九、JWT令牌

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql5.7-yum安装和更改mysql数据存放路径-2020年记录

记录下官网里用yum rpm源安装mysql, 1 官网下载rpm https://dev.mysql.com/downloads/repo/yum/ https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html&#xff08;附官网操作手册&#xff09; wget https://repo.mysql.com//mysql80-community-release…

HTML5(Web前端开发笔记第一期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 三件套标签标题标签段落标签文本格式化标签图像标签超链接标签锚点链接默认链接地址 音频标签视频标签 HTML基本骨架综合案例->个人简介列表表格表单input标签单选框radio上传…

Oracle19c进入EM Express(Oracle企业管理器)详细步骤

以下是使用Oracle 19c进入Oracle Enterprise Manager Database Express&#xff08;EM Express&#xff09;的详细步骤&#xff1a; ### **步骤 1&#xff1a;确认EM Express配置状态** 1. **登录数据库服务器** 使用Oracle用户或管理员权限账户登录操作系统。 2. **查看EM…

JSAR 基础 1.2.1 基础概念_空间小程序

JSAR 基础 1.2.1 基础概念_空间小程序 空间空间自由度可嵌入空间空间小程序 最新的技术进展表明&#xff0c;官网之前的文档准备废除了&#xff0c;基于xsml的开发将退出历史舞台&#xff0c;three.js和普通web结合的技术将成为主导。所以后续学习请移步three.js学习路径&#…

JavaWeb-servlet6中重定向、转发、cookie、session、文件上传和下载

请求重定向 一个 web 资源收到客户端请求后&#xff0c;通知客户端去访问另外一个 web 资源&#xff0c;这称之为请求重定向。 使用response对象提供的sendRedirect()方法&#xff0c;可以将网页重定向到另一个页面。SendRedirect()方法的语法格式&#xff1a; response.send…

信息安全访问控制、抗攻击技术、安全体系和评估(高软42)

系列文章目录 信息安全访问控制、抗攻击技术、安全体系和评估 文章目录 系列文章目录前言一、信息安全技术1.访问控制2.抗攻击技术 二、欺骗技术1.ARP欺骗2.DNS欺骗3.IP欺骗 三、抗攻击技术1.端口扫描2.强化TCP/IP堆栈 四、保证体系和评估1.保证体系2.安全风险管理 五、真题在…

mysql的Innodb最大支持的索引长度是多少,以及索引长度怎么计算

今天正好有空&#xff0c;来讲个之前粉丝经常问的一个知识&#xff0c;就是mysql的Innodb最大支持的索引长度是多少&#xff1f;以及索引长度怎么计算&#xff1f; 一、mysql的innodb引擎&#xff0c;创建索引最大支持的长度是多少字节&#xff1f; 不墨迹&#xff0c;直接说…

SpringBoot过滤器(Filter)的使用:Filter接口、FilterRegistrationBean类配置、@WebFilter注释

1、过滤器(Filter)的介绍 Spring Boot 的过滤器用于对数据进行过滤处理。通过 Spring Boot 的过滤器,程序开发人员不仅可以对用户通过 URL 地址发送的请求进行过滤处理(例如:过滤一些错误的请求或者请求中的敏感词等),而且可以对服务器返回的数据进行过滤处理(例如:压…

C++修炼之路:初识C++

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 引言 …

【STM32MP157系统移植】3.TF-A目录结构

bl1&#xff1a;部分一般不用TFA自带的&#xff0c;而是芯片内部的BOOTROM bl2&#xff1a;更像传统意义的TF-A&#xff0c;TF-A本身 bl31&#xff1a;是ARMV&#xff18;的EL3运行时固件 bl32&#xff1a;OPTEE或者TF-A提供的sp_min bl33&#xff1a;就是uboot 真正需要移…

OpenCV连续数字识别—可运行验证

前言 ​ 文章开始&#xff0c;瞎说一点其他的东西&#xff0c;真的是很离谱&#xff0c;找了至少两三个小时&#xff0c;就一个简单的需求&#xff1a; 1、利用OpenCV 在Windows进行抓图 2、利用OpenCV 进行连续数字的检测。 3、使用C&#xff0c;Qt 3、将检测的结果显示出来 …

shell的模拟实现 ─── linux第16课

在shell的命令行中输入命令,会有两种执行命令的途径 shell自己执行 shell创建子进程(fork ,exit ,waitpid,exec) ,子进程去执行 shell自己执行的命令是自建命令(bulit command) 子进程执行的是非自建命令 第一版只能维护命令行参数表创建子进程, 执行非内建命令 我们先创…

MySQL创建数据库和表,插入四大名著中的人物

一、登录数据库并创建数据库db_ck 二、创建表t_hero 表属性包括&#xff08;id&#xff0c;name&#xff0c;nickname&#xff0c;age&#xff0c;gender&#xff0c;address&#xff0c;weapon&#xff0c;types&#xff09; mysql> create table t_hero(-> id int,-…

静态网页的爬虫(以电影天堂为例)

一、电影天堂的网址&#xff08;url&#xff09; 电影天堂_免费电影_迅雷电影下载_电影天堂网最好的迅雷电影下载网&#xff0c;分享最新电影&#xff0c;高清电影、综艺、动漫、电视剧等下载&#xff01;https://dydytt.net/index.htm 我们要爬取这个页面上的内容 二、代码…

ROS云课三分钟-差动移动机器人导航报告如何撰写-及格边缘疯狂试探

提示词&#xff1a;基于如上所有案例并结合roslaunch teb_local_planner_tutorials robot_diff_drive_in_stage.launch和上面所有对话内容&#xff0c;设计一个差速移动机器人仿真实验&#xff0c;并完成报告的全文撰写。 差速移动机器人导航仿真实验报告 一、实验目的 验证 T…

ACE协议学习1

在多核系统或复杂SoC&#xff08;System on Chip&#xff09;中&#xff0c;不同处理器核心或IP&#xff08;Intellectual Property&#xff09;模块之间需要保持数据的一致性。常用的是ACE协议or CHI。 先对ACE协议进行学习 ACE协议&#xff08;Advanced Microcontroller Bu…

ajax之生成一个ajax的demo示例

目录 一. node.js和express ​二. 使用express创建后端服务 三. 创建前端 一. node.js和express ajax是前端在不刷新的情况下访问后端的技术&#xff0c;所以首先需要配置一个后端服务&#xff0c;可以使用node.js和express。 首先生成一个空项目&#xff0c;新建main目录…

远程登录客户端软件 CTerm 发布了 v4.0.0

有时候我们需要远程登录到 Linux/Unix 服务器&#xff0c;这方面使用最广泛的客户端软件是 PuTTY&#xff0c;不过它是全英文的&#xff0c;而且是单窗口的&#xff0c;有时候显得不那么方便。 CTerm (Clever Terminal) 是一个 Windows 平台下支持 Telnet 和 SSH 协议进行远程…

AFL++安装

学习fuzzing也几天了&#xff0c;今天记录AFL的安装及使用 一、实验环境 虚拟机&#xff1a;ubuntu20.04 当然也可以uname -a去看自己的版本号 二、AFL安装 1.先更新一下工具 sudo apt update2.安装AFL必要的一些依赖&#xff0c;例如编译工具&#xff08;如 build-essen…

【STM32】ADC功能-单通道多通道(学习笔记)

本章结合上一节内容复习更好理解【江协科技STM32】ADC数模转换器-学习笔记-CSDN博客 一、ADC单通道 接线图 ADC初始化 ①RCC开启时钟&#xff0c;包括ADC和GPIO的时钟&#xff0c;另外ADCCLK的分频器也要配置 ②配置GPIO,&#xff0c;把需要用的GPIO配置成模拟输入模式&am…