day03 swagger

导入swagger3的步骤:

pom.xml(只需要子模块配置)配置:

<!--springdoc 集成了 swagger3--><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.5.0</version></dependency>

application.yaml文件配置:

  # swagger3的地址
springdoc:swagger-ui:path: /swagger-ui.htmlapi-docs:path: /v3/api-docs

编写类:

package com.zheng.config;import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** swagger配置类* 配置 公司 版本 标题等信息*/
@Configuration // 配置类的标识
public class SwaggerConfig {@Beanpublic OpenAPI openAPI(){return new OpenAPI().info(new Info().title("swagger").contact(new Contact()).description("郑欣怡ii").version("v1.0.0").license(new License().name("Apache 2.0").url("http://springdoc.org"))).externalDocs(new ExternalDocumentation().description("外部文档").url("https://springshop.wiki.github.org/docs"));}
}

实体类

实体类中添加@Schema(参数description)用于标识实体类和属性的名称。

package com.zheng.entity;import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;/*** 实体层与数据库表 tb_question 进行映射* */
@Data // 为属性生成get/set方法
@NoArgsConstructor //生成无参构造函数
@AllArgsConstructor //生成全参构造函数
@ToString // 生成toString()方法
@Schema(description = "Question实体类")
public class Question {private Integer id;@Schema(description = "专家")private String expertName; // 专家@Schema(description = "问题人")private String questioner; // 问题人@Schema(description = "手机号")private String phone; // 手机号@Schema(description = "作物详细信息")private String plantName; // 作物详细信息@Schema(description = "问题标题")private String title; // 问题标题@Schema(description = "问题")private String question;// 问题@Schema(description = "回答")private String answer; // 回答@Schema(description = "状态")private Integer status; // 状态}

控制层

需要为控制类加注解@Tag(填入参数name和description)用于在页面中显示控制层的名字和描述。用@Operation参数description显示方法的描述即可。

除此之外,swagger中除了传统的get和post请求之外,为了方便对于数据库的操作,于是又增加了put和delete请求,并规定get请求用于查询,post请求用于添加,put请求用于修改,delete请求用于删除。

package com.zheng.controller;import com.zheng.entity.Question;
import com.zheng.service.QuestionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** Controller整合Swagger*/
@RestController
@RequestMapping("/question")
@Tag(name="question",description = "tb_question控制层") // swagger标签
public class QuestionController {@Autowiredprivate QuestionService questionService;@Operation(description = "question查询全部") // swagger 标签@GetMapping("/findAll")public List<Question> findAll() {return questionService.findAll();}/*** findById?id=10* @param id* @return*/@Operation(description = "question根据主键查询") // swagger 标签@GetMapping("findById")public Question findById(@RequestParam("id") int id) {return questionService.findById(id);}@Operation(description = "根据专家名字查询")@GetMapping("/findByExpertName/{expertName}")public List<Question> findByExpertName(@PathVariable("expertName") String expertName) {return questionService.findByExpertName(expertName);}@PostMapping("/save")@Operation(description = "添加question")public int save(Question question) {return questionService.save(question);}@PutMapping("/update") // 修改只能用put请求,删除只能用delete请求@Operation(description = "修改question")public int update(Question question) {return questionService.update(question);}/*** /delete/10* @param id* @return*/@DeleteMapping("/delete/{qid}")@Operation(description = "按照编号删除question")public int delete(@PathVariable("qid") int id) {return questionService.delete(id);}
}

除此之外,其他的类都没有变化。

添加、修改、删除、联表查询

需要在Mapper.xml中配置:

注意sql语句中需要的参数需要用#{参数名}代替,列名和表明最好加``反引号,防止被mysql看作关键字。

联表查询中,针对一对多的情况,需要在“一”的实体类中加入List<>属性来加入“多”的那一类的对象数组,这样就能在查询得到结果的时候能够显示多表的情况,于是在“多”的那一类中的mapper、service层中写入的东西就和其他查询的格式一致,最后的控制层也和其他查询一致,那么只需要再修改xml中的配置,更新resultMap即可。

需要在xml的resultMap中加入collection用于应对一对多的情况(用于增加多个其他类的对象),注意参数是property(属性名)和ofType(对象的类型),里面的内容和普通result一致,都需要id和result来限定列和属性的对应关系。注意如果遇到两个表的某一列的列名一致的情况,需要根据你的sql语句中为两列中的某列的重命名来修改对应的column,这就再次体现了resultMap标识的是sql语句执行后返回的类型。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zheng.mapper.BankMapper"><resultMap id="bankMap" type="Bank"><id property="bankId" column="bid" /><result property="bankName" column="bank_name"/><result property="" column=""/><result property="bankPhone" column="bank_phone"/><result property="introduce" column="introduce"/><result property="money" column="money"/><result property="rate" column="rate"/><result property="repayment" column="repayment"/><collection property="bankUserList" ofType="BankUser"><id property="userName" column="user_name"/><result property="role" column="role"/><result property="bankId" column="bank_id"/><result property="realName" column="real_name"/><result property="password" column="password"/><result property="phone" column="phone"/><result property="createTime" column="create_time"/><result property="updateTime" column="update_time"/></collection></resultMap><select id="findById" parameterType="Integer" resultMap="bankMap">SELECT * FROM tb_bank WHERE bank_id = #{bankId}</select><select id="findAndBankUser" resultMap="bankMap">SELECT bu.*, b.bank_id bid,  b.bank_name, b.introduce, b.bank_phone, b.money, b.rate, b.repaymentFROM tb_bank AS b INNER JOIN tb_bank_user AS bu ON b.bank_id = bu.bank_id</select>
</mapper>

配置nodejs

注意多次配置后需要重启电脑,vscode下载后会出来一长串警告,不会几秒就下载完只出来添加了多少文件。

vscode终端中执行:

npm config set registry https://registry.npmmirror.com
npm install -g @vue/cli

装好后测试,vscode终端中执行:

vue create vue-demo

 

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

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

相关文章

谷粒商城实战笔记-高效工作经验积累

当然&#xff0c;我会提供一个更具体的例子来说明这两个原则的重要性及其背后的惨痛经历。 1. 先理解需求&#xff0c;后写代码 惨痛经历 几年前&#xff0c;我所在的团队负责为开发一个在线预订系统。 项目启动之初&#xff0c;我们急于展示成果&#xff0c;没有充分理解客…

UE5+OpenCV配置(Windows11系统)

一、概述 因为需要在UE5中使用OpenCV这些工具进行配置&#xff0c;所以在网络上参考借鉴一些资料进行配置。查询到不少的资料&#xff0c;最后将其配置成功。在这里顺便记录一下自己的配置成功的过程。 二、具体过程 &#xff08;一&#xff09;版本 使用Windows11系统、UE5.…

CSS(九)——CSS 轮廓(outline)

CSS 轮廓&#xff08;outline&#xff09; 轮廓&#xff08;outline&#xff09;是绘制于元素周围的一条线&#xff0c;位于边框边缘的外围&#xff0c;可起到突出元素的作用。 轮廓&#xff08;outline&#xff09;属性指定元素轮廓的样式、颜色和宽度。 让我们用一个图来看…

基于Java中的SSM框架实现高校心理评测与分析系统项目【项目源码+论文说明】

基于Java中的SSM框架实现高校心理评测与分析系统演示 摘要 为了让学校和教师方面更好的深入了解学生的心理&#xff0c;有助于加强学生心理建设。该系统使用Java语言开发&#xff0c;系统架构采用SSM技术来实现功能性开发&#xff0c;MySQL数据库存放数据&#xff0c;实现了进…

springAOP理解及事务

AOP&#xff1a; springAOP是什么&#xff1a; AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实就是面向特定方法编程。 使用场景&#xff1a; 比如你想统计业务中每个方法的执行耗时&#xff0c;那我们最…

git cherry-pick用法

git cherry-pick 如何将我另一个分支上的某个提交合并到新的分支上 首先切换到新分支上git cherry-pick <commit_hash>例如&#xff1a;git cherry-pick f8a70c9

python实现接缝雕刻算法

python实现接缝雕刻算法 接缝雕刻算法步骤详解Python实现详细解释优缺点应用领域接缝雕刻算法(Seam Carving Algorithm)是一种内容感知的图像缩放技术,可以智能地改变图像的尺寸,而不会明显影响其重要内容。它通过动态规划的方式寻找图像中的“接缝”,即在图像中从上到下或…

jenkins自动化持续集成

一、持续集成优势 1.1 解放重复劳动 一次设置&#xff0c;多次复用。持续集成任务可以解放集成、测试、部署等重复性劳动&#xff0c;通过自动化任务能够显著提升集成频率。 1.2 更快解决问题 接入持续集成任务后&#xff0c;能够更早地感知变更后效果&#xff0c;及时进入…

pytest结合allure-pytest插件生成测试报告

目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压&#xff0c;解压之后还要配置环境变量&#xff08;把allure目录下bin目录配置到系统变量的path路径&#xff09;&#xff0c;下…

树形dp例题2

洛谷p2015绿 题意&#xff1a;有一棵苹果树&#xff0c;如果树枝有分叉&#xff0c;一定是分二叉&#xff08;就是说没有只有一个儿子的结点&#xff09;这棵树共有 N个结点&#xff08;叶子点或者树枝分叉点&#xff09;&#xff0c;编号为 1∼&#x1d441;&#xff0c;树根…

mysql语法介绍

MySQL 语法主要基于 SQL&#xff08;Structured Query Language&#xff09;标准&#xff0c;用于管理和操作关系型数据库。以下是一些基本的 MySQL 语句&#xff1a; 1.创建数据库&#xff1a; CREATE DATABASE database_name; 1.选择数据库&#xff1a; USE database_name;…

WPF使用TouchSocket实现Tcp client

文章目录 前言1、页面展示2、主页面UI代码2、TCP client的UI代码3、Tcp client后台代码实现4、UI与后台代码的关联 前言 在该篇的Demo中&#xff0c;您可以找到以下内容&#xff1a; 1、TouchSocket的使用&#xff1b; 2、CommunityToolkit.Mvvm的使用&#xff1b; 3、AvalonD…

GPT-4o Mini:探索最具成本效益的小模型在软件开发中的应用

随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域也取得了显著的进步。OpenAI 最新发布的 GPT-4o Mini 模型&#xff0c;以其卓越的性能和极具竞争力的价格&#xff0c;成为了广大开发者关注的焦点。作为一名长期关注人工智能及其在软件开发…

破局产品同质化:解锁3D交互式营销新纪元!

近年来&#xff0c;随着数字体验经济的蓬勃发展&#xff0c;3D交互式营销作为一种创新手段迅速崛起&#xff0c;它巧妙地解决了传统产品展示中普遍存在的缺乏差异性和互动性的问题&#xff0c;使您的产品在激烈的市场竞争中独树一帜&#xff0c;脱颖而出。 若您正面临产品营销…

【Python数据结构与算法】枚举----特殊密码锁

题目&#xff1a;特殊密码锁 描述 有一种特殊的二进制密码锁&#xff0c;由n个相连的按钮组成&#xff08;1<n<30&#xff09;&#xff0c;按钮有凹/凸两种状态&#xff0c;用手按按钮会改变其状态。 然而让人头疼的是&#xff0c;当你按一个按钮时&#xff0c;跟它相邻…

自定义协议(应用层协议)——网络版计算机基于TCP传输协议

应用层&#xff1a;自定义网络协议&#xff1a;序列化和反序列化&#xff0c;如果是TCP传输的&#xff1a;还要关心区分报文边界&#xff08;在序列化设计的时候设计好&#xff09;——粘包问题 1、首先想要使用TCP协议传输的网络&#xff0c;服务器和客户端都应该要创建自己…

无损放大图片工具

一、简介 1、Upscayl 是一款无损放大图片工具&#xff0c;支持CPU和GPU&#xff0c;扩图速度特别的快&#xff0c;而且效果特别的好。而且它有多种模型&#xff0c;比如说艺术动漫风格、真实风格、快速生成等等。最大支持16倍放大和亿级别像素&#xff0c;同时支持Windows、Mac…

Ruoyi-WMS本地运行

所需软件 1、JDK&#xff1a;8 安装包&#xff1a;https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.htmlopen in new window 安装文档&#xff1a;https://cloud.tencent.com/developer/article/1698454open in new window 2、Redis 3.0 安装包&a…

Weakly Supervised Contrastive Learning 论文阅读

Abstract 无监督视觉表示学习因对比学习的最新成就而受到计算机视觉领域的广泛关注。现有的大多数对比学习框架采用实例区分作为预设任务&#xff0c;将每个实例视为一个不同的类。然而&#xff0c;这种方法不可避免地会导致类别冲突问题&#xff0c;从而损害所学习表示的质量…

QTreeWidget开放详解

QTreeWidget开放详解 一、创建 QTreeWidget二、QTreeWidget添加节点2.1 创建 QTreeWidget 和 添加顶级节点2.2 QTreeWidget向顶级节点添加子节点 二、 QTreeWidget处理信号和槽2.1 处理节点点击信号2.1 处理节点双击信号2.3 处理节点展开和折叠信号 三、QTreeWidget右键菜单四、…