API开发秘籍:揭秘Swagger与Spring REST Docs的文档自动化神技

在这个数字化时代,如何让你的业务像外卖一样快速送达顾客手中?本文将带你走进Spring Boot的世界,学习如何利用RESTful API构建一个高效、直观的“外卖帝国”。从基础的REST架构风格,到Spring MVC的魔力,再到Swagger和Spring REST Docs的文档自动化,每一步都充满了技术的魅力和创新的智慧。让我们一起探索如何用代码烹饪出令人垂涎的数字化美食,满足顾客的每一个需求!

文章目录

    • 第1章:设计 RESTful API 的原则
      • 1.1 理解 REST 架构风格
      • 1.2 URI 设计与资源定位
      • 1.3 HTTP 方法与操作行为
      • 1.4 状态码传达意义
      • 1.5 超媒体与链接关系
    • 第2章:使用 Spring MVC 创建 REST 控制器
      • 2.1 引入 Spring Web 依赖
      • 2.2 创建 REST 控制器类
      • 2.3 处理 HTTP 请求方法
        • 2.3.1 GET 请求处理
        • 2.3.2 POST 请求与实体接收
        • 2.3.3 PUT 与 DELETE 请求
      • 2.4 参数绑定与路径变量
      • 2.5 返回响应实体与状态码
    • 第3章:集成 Swagger 或 Spring REST Docs 生成 API 文档
      • 3.1 Swagger 介绍与集成
        • 3.1.1 添加 Swagger 依赖
        • 3.1.2 配置 Swagger UI
        • 3.1.3 使用注解标记 API
      • 3.2 Spring REST Docs 简介
        • 3.2.1 REST Docs 安装与配置
        • 3.2.2 基于测试生成文档
      • 3.3 选择与对比:Swagger vs Spring REST Docs
      • 数据库设计
      • 集成MySQL
      • 配置数据库连接
      • 实体类映射
      • 仓库接口
      • 服务层和控制器
      • 测试

在这里插入图片描述

第1章:设计 RESTful API 的原则

1.1 理解 REST 架构风格

想象一下,你正在一家餐厅里,菜单上摆满了各种美食。你不需要知道后厨是如何制作这些美食的,你只需要告诉服务员你想要什么,然后等待美食上桌。这就是 RESTful API 的精髓所在——简单、直观、无需过多解释。

REST,即表述性状态转移(Representational State Transfer),是一种设计风格,它让网络服务像菜单一样简单易懂。在 RESTful 架构中,每个资源(比如用户信息、订单详情)都有一个唯一的标识符(URI),你可以通过标准的 HTTP 方法(GET、POST、PUT、DELETE)来获取或修改这些资源。

1.2 URI 设计与资源定位

URI,也就是统一资源标识符,就像是餐厅菜单上的编号。当你告诉服务员“我要编号3的菜”,服务员就知道要给你上什么菜。在 RESTful API 中,URI 用来精确地定位资源。一个好的 URI 设计应该简洁明了,比如 /users/123 就清晰地告诉了我们这是关于用户ID为123的信息。

1.3 HTTP 方法与操作行为

HTTP 方法就像是你对服务员的指令。如果你说“给我来一份”,那么服务员会用 GET 方法去查找信息;如果你说“更新一下”,那么服务员可能会用 PUT 方法去更新信息;如果你说“取消订单”,那么 DELETE 方法就会被用到。

  • GET:就像点菜,请求获取资源。
  • POST:就像下单,创建新资源。
  • PUT:就像更新菜单,更新现有资源。
  • DELETE:就像取消订单,删除资源。

1.4 状态码传达意义

状态码就像是服务员给你的反馈。200 表示一切顺利,你的菜已经上桌;404 表示你要的菜没了,资源找不到;500 则是后厨出了问题,服务器内部错误。

  • 200 OK:请求成功。
  • 201 Created:资源创建成功。
  • 400 Bad Request:请求有误。
  • 404 Not Found:资源不存在。
  • 500 Internal Server Error:服务器错误。

1.5 超媒体与链接关系

最后,超媒体和链接关系就像是菜单上的推荐组合。RESTful API 通过超媒体提供资源之间的链接,让客户端能够发现和导航到相关资源。这就像是服务员告诉你,“如果你喜欢这道菜,你可能会喜欢我们的特色菜”。

通过这样的设计,RESTful API 就像是一家精心设计的餐厅,让顾客(客户端)能够轻松地点菜(请求资源),享受美食(数据交互),而无需关心后厨(服务器)的复杂操作。

这就是 RESTful API 的设计原则,简单、直观、高效,就像一家好餐厅,让每一位顾客都能满意而归。接下来,我们将进入 Spring MVC 的世界,开始我们的 REST 控制器之旅。别着急,慢慢来,我们一步一步来。

第2章:使用 Spring MVC 创建 REST 控制器

2.1 引入 Spring Web 依赖

想象一下,你已经拥有了一家餐厅,现在你想要扩展你的业务,提供外卖服务。为了做到这一点,你需要一些特别的工具和配料。在 Spring Boot 的世界里,这些工具和配料就是依赖项。首先,你需要在你的项目中引入 Spring Web 依赖,这就像是购买厨房设备和食材,为制作外卖做准备。

在你的 pom.xml 文件中(如果你使用的是 Maven),你需要添加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

这将为你的 RESTful API 服务提供所需的一切,包括 Spring MVC 和 Tomcat。

2.2 创建 REST 控制器类

现在,你已经准备好了所有的材料,是时候开始制作你的“外卖菜单”了。在 Spring MVC 中,你需要创建一个 REST 控制器类,这就像是你的菜单,列出了所有的服务项。

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class RestaurantController {

    @RequestMapping("/dish")
    public String getDish() {
        return "Here is your dish!";
    }
}

在这个例子中,@RestController 注解告诉 Spring 这个类是一个控制器,而 @RequestMapping 则定义了访问这个控制器的路径。

2.3 处理 HTTP 请求方法

2.3.1 GET 请求处理

假设你想要添加一个功能,让顾客能够查看菜单。这可以通过处理 GET 请求来实现:

@RequestMapping(value = "/menu", method = RequestMethod.GET)
public String getMenu() {
    return "Here is today's menu!";
}

当顾客访问 /menu 路径时,他们将看到今天的菜单。

2.3.2 POST 请求与实体接收

如果你想要让顾客能够下单,你需要处理 POST 请求。此外,你还需要接收顾客的订单信息:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@PostMapping("/order")
public String placeOrder(@RequestBody Order order) {
    // 处理订单逻辑
    return "Order placed successfully!";
}

在这个例子中,@RequestBody 注解用于将请求体中的 JSON 数据绑定到 Order 对象。

2.3.3 PUT 与 DELETE 请求

如果你的顾客想要修改或取消预订,你可以添加 PUT 和 DELETE 请求的处理:

@RequestMapping(value = "/order/{id}", method = RequestMethod.PUT)
public String updateOrder(@PathVariable("id") Long orderId, @RequestBody Order updatedOrder) {
    // 更新订单逻辑
    return "Order updated successfully!";
}

@RequestMapping(value = "/order/{id}", method = RequestMethod.DELETE)
public String cancelOrder(@PathVariable("id") Long orderId) {
    // 取消订单逻辑
    return "Order cancelled successfully!";
}

2.4 参数绑定与路径变量

在处理请求时,你经常需要从 URL 中提取信息,比如订单ID。Spring MVC 允许你使用路径变量来实现这一点:

@RequestMapping(value = "/order/{id}", method = RequestMethod.GET)
public String getOrder(@PathVariable Long id) {
    // 根据ID获取订单逻辑
    return "Here is your order with ID: " + id;
}

@PathVariable 注解用于将路径中的变量绑定到方法参数。

2.5 返回响应实体与状态码

最后,不要忘记返回响应实体和合适的状态码。这就像是给顾客提供美食的同时,告诉他们一切安好:

import org.springframework.http.ResponseEntity;

@GetMapping("/menu")
public ResponseEntity<String> getMenu() {
    String menu = "Here is today's menu!";
    return ResponseEntity.ok(menu); // 返回200状态码
}

使用 ResponseEntity,你可以自定义响应的状态码和响应体。


通过这些步骤,你的 RESTful API 就像是一家提供外卖服务的餐厅,顾客可以通过网络下单,享受你的美食。接下来,我们将探索如何让这个过程更加透明和易于理解,通过集成 Swagger 或 Spring REST Docs 来生成 API 文档。别着急,慢慢来,我们一步一步来。

在这里插入图片描述

第3章:集成 Swagger 或 Spring REST Docs 生成 API 文档

3.1 Swagger 介绍与集成

3.1.1 添加 Swagger 依赖

在上一章,我们学会了如何用 Spring MVC 制作我们的 RESTful API “外卖菜单”。现在,让我们来聊聊如何让顾客们更好地了解我们的菜单——也就是我们的 API 文档。Swagger 就是那个能让我们的菜单更加生动、直观的工具。

首先,我们需要在项目中添加 Swagger 的依赖。这就像是在菜单上添加一些精美的图片和描述,让顾客一眼就能看明白。

如果你使用的是 Maven,在你的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
3.1.2 配置 Swagger UI

添加了依赖之后,我们需要配置 Swagger,让它知道我们的 API 都在哪里。这就像是在菜单上标注出每道菜的位置,方便顾客快速找到。

创建一个配置类,比如 SwaggerConfig.java,并添加如下配置:

import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.PathSelectors;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

这段代码告诉 Swagger,它需要扫描所有的 API,并为它们生成文档。

3.1.3 使用注解标记 API

现在,Swagger 已经准备好了,我们可以开始使用注解来丰富我们的 API 文档了。这就像是给菜单上的每道菜添加一些特别的说明,比如食材来源、烹饪方法等。

在控制器或方法上使用 @ApiOperation 注解,可以为 API 添加描述:

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.responses.ApiResponse;

@RestController
public class RestaurantController {

    @Operation(summary = "获取今日菜单", description = "返回今日菜单的详细信息")
    @GetMapping("/menu")
    public ResponseEntity<String> getMenu() {
        String menu = "Here is today's menu with delicious dishes!";
        return ResponseEntity.ok(menu);
    }
}

这样,顾客在查看 Swagger UI 时,就能看到详细的 API 描述了。

3.2 Spring REST Docs 简介

3.2.1 REST Docs 安装与配置

除了 Swagger,Spring 还提供了另一个强大的工具——Spring REST Docs。它通过结合 Javadoc 注解和实际的 HTTP 请求/响应来生成文档。这就像是为菜单拍摄一些真实的美食照片,让顾客能够看到他们将要吃到的食物。

要在项目中添加 Spring REST Docs,需要添加以下依赖:

<dependency>
    <groupId>org.springframework.restdocs</groupId>
    <artifactId>spring-restdocs-mockmvc</artifactId>
    <scope>test</scope>
</dependency>
3.2.2 基于测试生成文档

使用 Spring REST Docs,你需要编写测试用例来生成文档。这就像是拍摄美食照片的过程,你需要确保每张照片都能真实反映食物的美味。

创建一个测试类,比如 ApiDocumentation.java,并添加如下测试:

import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class ApiDocumentation {

    @BeforeEach
    public void setUp(RestDocumentationContextProvider restDocumentation) {
        MockMvc mockMvc = mockMvc.perform(get("/menu"))
                .andExpect(status().isOk())
                .andDo(document("get-menu",
                        preprocessResponse(prettyPrint()),
                        request(),
                        response(),
                        pathParameters(),
                        cookies(),
                        requestHeaders(),
                        responseHeaders(),
                        contentType()));
    }
}

这段代码会生成一个包含请求和响应详细信息的文档。

3.3 选择与对比:Swagger vs Spring REST Docs

Swagger 和 Spring REST Docs 都是生成 API 文档的强大工具,但它们各有特点。

  • Swagger:提供了一个交互式的 UI,让顾客能够直接在文档中尝试 API。它适合快速展示 API 并提供即时反馈。
  • Spring REST Docs:侧重于生成详细的文档,适合需要详尽文档的项目。它通过测试来确保文档的准确性。

选择哪一个,取决于你的项目需求和个人喜好。有时候,两者结合使用也是一个不错的选择。


通过集成 Swagger 或 Spring REST Docs,我们的 RESTful API “外卖菜单” 不仅能够提供美食,还能让顾客在点餐前就对每一道菜有充分的了解。这样一来,我们的服务就更加周到,顾客的满意度也会随之提高。下一章,我们将回顾 RESTful API 设计与实现的关键点,并展望未来的开发趋势。别着急,慢慢来,我们一步一步思考。

在构建RESTful API时,数据库的使用是不可或缺的一环。MySQL作为广泛使用的开源关系数据库管理系统,以其高性能、高可靠性和易用性而闻名。接下来,我们将通过一个具体的样例,展示如何在Spring Boot应用中集成MySQL,并使用它来存储和管理数据。

数据库设计

首先,我们需要设计一个简单的数据库模型。假设我们正在开发一个博客平台,我们需要存储用户信息和他们的博客文章。我们可以设计如下两个表:

  1. Users: 存储用户信息。
  2. Posts: 存储用户发表的文章。
CREATE TABLE Users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL
);

CREATE TABLE Posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES Users(id)
);

集成MySQL

在Spring Boot应用中集成MySQL,首先需要添加依赖。在pom.xml中添加如下依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

配置数据库连接

接下来,在application.properties文件中配置数据库连接:

spring.datasource.url=jdbc:mysql://localhost:3306/blogdb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

实体类映射

定义实体类与数据库表进行映射。在Spring Data JPA中,我们使用@Entity@Table注解来完成这个工作。

@Entity
@Table(name = "Users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String username;
    private String email;
    private String password;

    // Getters and Setters
}

@Entity
@Table(name = "Posts")
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String title;
    private String content;
    @ManyToOne
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    private User user;

    // Getters and Setters
}

仓库接口

Spring Data JPA允许我们通过定义接口并继承JpaRepository接口来简化数据访问层的编码。

public interface UserRepository extends JpaRepository<User, Integer> {
    List<User> findByUsername(String username);
}

public interface PostRepository extends JpaRepository<Post, Integer> {
    List<Post> findByTitleContaining(String title);
}

服务层和控制器

接下来,我们创建服务层来处理业务逻辑,并创建控制器来处理HTTP请求。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User findUserByUsername(String username) {
        return userRepository.findByUsername(username).stream().findFirst().orElse(null);
    }
}

@RestController
@RequestMapping("/api")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users/{username}")
    public ResponseEntity<?> getUser(@PathVariable String username) {
        User user = userService.findUserByUsername(username);
        if (user == null) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok(user);
    }
}

测试

最后,我们编写测试来确保一切按预期工作。

@SpringBootTest
public class UserControllerTest {
    @Test
    public void whenGetUser_thenReturnUser() throws Exception {
        MockMvc mockMvc = standaloneSetup(new UserController()).build();
        MvcResult mvcResult = mockMvc.perform(get("/api/users/johnDoe"))
                                      .andExpect(status().isOk())
                                      .andReturn();
        String content = mvcResult.getResponse().getContentAsString();
        assertNotNull(content);
        assertTrue(content.contains("johnDoe"));
    }
}

通过这个样例,我们展示了如何在Spring Boot应用中集成MySQL,并使用RESTful API来管理用户和博客文章。这只是一个起点,根据实际需求,你可以扩展数据库模型、增加更多功能,并优化API的设计。记住,一个好的API设计和实现,加上强大的数据库支持,可以为你的应用程序带来强大的竞争力。
在这里插入图片描述
通过这段旅程,我们不仅学会了如何设计和实现 RESTful API,还了解了如何通过自动化工具生成文档,以及未来 API 开发的趋势。就像一家餐厅不断推陈出新,我们的 API 也需要不断地进化和完善,以满足用户的需求。

现在,我们的 “外卖菜单” 已经准备就绪,只等顾客们来品尝。别着急,慢慢来,我们的服务才刚刚开始!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决kettle界面右上角的connect消失——且使用admin登录不上Kettle资源库

一、问题描述 1.1、Kettle界面右上角的connect消失了 当我们配置Kettle界面的资源库(Other Repositories)内容后,Kettle界面右上角的connect消失了;如下图所示: 1.2、使用默认的账户【admin】和密码【admin】登录不上kettle资源库 当我们切换到我们配置的数据库使用超管账…

排序-希尔排序

介绍 希尔排序属于那种没有了解过的直接看代码一脸懵逼的&#xff0c; 所以同学们尽量不要直接看代码&#xff0c;仔细阅读本篇博客内容。 插入排序本来算是一个低效排序&#xff0c; 一次只可以挪动一个数据&#xff0c; 但是&#xff0c;它的强来了&#xff01;&#xff01…

513.找树左下角的值

给定一个二叉树&#xff0c;在树的最后一行找到最左边的值。 示例 1: 示例 2: 思路&#xff1a; 深度最大的叶子结点一定是最后一行。 优先左边搜索&#xff0c;记录深度最大的叶子节点&#xff0c;此时就是树的最后一行最左边的值 代码&#xff1a; class Solution:def fi…

272 基于matlab的形态滤波和局域值分解(LMD)的齿轮故障诊断

基于matlab的形态滤波和局域值分解&#xff08;LMD&#xff09;的齿轮故障诊断&#xff0c;GUI交互界面。通过形态滤波对一维信号进行降噪处理&#xff0c;并通过LMD局部均值分解提取故障信号&#xff0c;最后提取处故障频率。程序已调通&#xff0c;可直接运行。 272 形态滤波…

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中应用

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中的应用 由北京海特伟业科技有限公司任洪卓发布于2024年6月1日 红外语音听力广播&#xff08;即红外听力教学考试系统&#xff09;在英语四六级听力考试的应用正日益凸显出其重要性和优越性。在当前的高等教育…

排序-插入排序与选择排序

插入排序 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 打扑克牌整理手牌用的就是插入排序的思想 代码实现 void InsertSort(int* a, int n) { assert(a); …

中间件模版引擎

文章目录 中间件1.自定义中间件1&#xff09;全局2&#xff09;局部中间件 2.内置中间件(静态资源目录&#xff09; Art-template1.模板语法1&#xff09;输出2&#xff09;原文输出3&#xff09;条件判断4&#xff09;循环5&#xff09;子模版6&#xff09;模版继承7&#xff…

2024四川三支一扶“考生信息表”照着填❗

2024四川三支一扶“考生信息表”照着填❗ ☑️四川三支一扶开始报名&#xff0c;大家要按照提示如实、准确、完整填写《高校毕业生“三支一扶”计划招募考生信息表》哦~ ☑️不知道怎么填写的宝子们&#xff0c;可以参考图1。 ☑️毕业证书编号如实填写&#xff0c;若是应届生&…

vue3 todolist 简单例子

vue3 简单的TodList 地址&#xff1a; https://gitee.com/cheng_yong_xu/vue3-composition-api-todo-app-my 效果 step-1 初始化项项目 我们不采用vue cli 搭建项目 直接将上图文件夹&#xff0c;复制到vscode编辑器&#xff0c;清空App.vue的内容 安装包 # 安装包 npm…

JVM双亲委派模型

在之前的JVM类加载器篇中说过&#xff0c;各个类加载器都有自己加载的范围&#xff0c;比如引导类加载器只加载Java核心库中的class如String&#xff0c;那如果用户自己建一个包名和类名与String相同的类&#xff0c;会不会被引导类加载器加载。可以通过如下代码测试&#xff0…

每周统计-20240531

用于测试程序的稳定性&#xff1a; 龙虎榜&#xff1a; 成交额&#xff1a; 封成比&#xff1a; 收盘前放量&#xff1a; 开盘抢筹&#xff1a; 封单额&#xff1a;

堆排序-java

这次主要讲了堆排序和堆的基本构造&#xff0c;下一期会详细讲述堆的各种基本操作。 文章目录 前言 一、堆排序 1.题目描述 2.堆 二、算法思路 1.堆的存储 2. 结点下移down 3.结点上移up 4.堆的基本操作 5.堆的初始化 三、代码如下 1.代码如下&#xff1a; 2.读入数据&#xff…

24年护网工具,今年想参加护网的同学要会用

24年护网工具集 吉祥学安全知识星球&#x1f517;http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247483727&idx1&sndb05d8c1115a4539716eddd9fde4e5c9&chksmc0e47813f793f105017fb8551c9b996dc7782987e19efb166ab665f44ca6d900210e6c4c0281&scene21…

2024拼多多 最新理论+实战干货,从入门到精通全链路多角度学习-7节课

基于最新规则理论结合实际的干货 课程内容&#xff1a; 01 2024年多多防比价新规则破局理论课与实操课.mp4 02 24年多多强付费第二节课基础内功.mp4 03 24年多多强付费第三节课直通车实操 .mp4 04 24年多多强付费第一节课市场定价格段,mp4 05 24年多多自然流第一节课市场…

Java+SVNCloud+Mysql课程设计

文章目录 1、主要内容2、所需准备3、与sql访问的中间类&#xff1a;SqlMessage4、窗口界面5、main方法 1、主要内容 课程设计&#xff0c;主要通过Javas wing创建窗口&#xff0c;jdbc连接云端mysql数据库进行基本操作&#xff0c;支持随机生成数据并用动态展示数据结果。 先…

计算机毕业设计 | springboot+vue会议室管理系统(附源码)

1&#xff0c;绪论 1.1 项目背景 随着企业规模的不断扩大&#xff0c;会议室管理愈加复杂。传统的手工预约会议室的方式已经无法满足现代企业的需求&#xff0c;因此&#xff0c;开发一套会议室系统方案变得尤为重要。会议室系统可以实现会议室的在线预约、会议室资源的有效利…

[SQL-SERVER:数据库安全及维护]:MSSM工具进行附加还原备份等操作

文章目录 目的介绍一、完整备份与还原&#xff08;20分&#xff09;1.将教师提供的TeachingDB数据库附加到个人使用的服务器上&#xff0c;并更名为TeachingDB_***&#xff08;***为个人姓名&#xff09;1.1 操作流程&#xff1a;将docker容器sqlserver数据库已有的mdf镜像文件…

C语言之旅:探索单链表

目录 一、前言 二、实现链表的功能&#xff1a; 打印 创建节点 尾插 尾删 头插 头删 查找 在指定位置之前插入数据 指定位置删除 在指定位置之后插入数据 打印 销毁 三、全部源码&#xff1a; 四、结语 一、前言 链表是一个强大且基础的数据结构。对于很多初…

Mac连接虚拟机(Linux系统)

1.确定虚拟机的IP地址 ifconfig //终端命令&#xff0c;查询ip地址 sudo apt install net-tools 安装完成后再次执行 ifconfig&#xff1a; 2.安装SSH&#xff08;加密远程登录协议&#xff09; (1).安装OpenSSH服务器软件包&#xff1a; sudo apt-get install openssh-ser…

Linux开发

建议大家使用 Linux 做开发 Linux 能用吗&#xff1f; 我身边还有些朋友对 linux 的印象似乎还停留在黑乎乎的命令行界面上。当我告诉他或者建议他使用 linux 时&#xff0c;会一脸惊讶的问我&#xff0c;那个怎么用&#xff08;来开发或者日常使用&#xff09;&#xff1f; …