Spring-boot3.4最新版整合swagger和Mybatis-plus

好家伙,今天终于开始用spring-boot3开始写项目了,以后要彻底告别1.x和2.x了,同样的jdk也来到了最低17的要求了,废话不多说直接开始

在这里插入图片描述

在这里插入图片描述

这是官方文档的要求jdk最低是17 maven最低是3.6

一. 构建工程,这一步就不需要给大家解释了吧

二. 整合Knife4j

1.大于 spring-boot 2.6.x 小于 spring-boot3.x的版本
	 <swagger.version>3.0.0</swagger.version><knife4j.version>3.0.3</knife4j.version><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>${swagger.version}</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>${knife4j.version}</version></dependency>
2. 然后配置接口文档
@Configuration
@EnableOpenApi
public class Knife4jConfig {@Beanpublic Docket createResetApi(){return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)).paths(PathSelectors.any()).build();}@Beanpublic Docket adminApi(){return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).groupName("后台管理").select().apis(RequestHandlerSelectors.basePackage("com.demo.admin.controller")).paths(PathSelectors.any()).build();}@Beanpublic Docket webApi(){return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).groupName("web端").select().apis(RequestHandlerSelectors.basePackage("com.demo.web.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("接口文档标题").description("描述").contact(new Contact("你是哪一个", "127.0.0.1:8080", "email")).license("The Apache License").termsOfServiceUrl("http://127.0.0.1:8080/api").version("1.0").build();}
3. 在代码中使用
@Api(tags = "首页模块")
@RestController
public class IndexController {@ApiImplicitParam(name = "name",value = "姓名",required = true)@ApiOperation(value = "向客人问好")@GetMapping("/sayHi")public ResponseEntity<String> sayHi(@RequestParam(value = "name")String name){return ResponseEntity.ok("Hi:"+name);}
}@Data
@ApiModel
public class BaseQuery implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "当前页码")Integer pageNum = PagesConstant.DEFAULT_PAGE;@Range(min = 1, max = 200, message = "每页条数,取值范围 1-200")@ApiModelProperty(value = "每页条数 默认200")Integer pageSize = PagesConstant.DEFAULT_PAGE_SIZE;@ApiModelProperty(value = "排序字段")String order;@ApiModelProperty(value = "是否升序")boolean asc;
}

下面是新版的使用方式

1.添加最新的依赖
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>${knife4j.version}</version></dependency>
2.编写配置文件,没有了2中的Docket,groupName,select,apis 等等…总的来说新版的变得更为简单了
@Configuration
public class OpenApiConfig {/*** 默认 API 分组,包含前端和后端接口*/@Beanpublic GroupedOpenApi defaultApi() {return GroupedOpenApi.builder().group("default")  // 分组名称.packagesToScan("com.demo") // 匹配路径,可以根据实际情况调整.build();}/*** 前端 API 分组,只包含前端接口*/@Beanpublic GroupedOpenApi webApi() {return GroupedOpenApi.builder().group("前端接口")  // 分组名称.pathsToMatch("/api/web/**")  // 前端接口路径.build();}/*** 后端 API 分组,只包含后端接口*/@Beanpublic GroupedOpenApi adminApi() {return GroupedOpenApi.builder().group("后端接口")  // 分组名称.pathsToMatch("/api/admin/**")  // 后端接口路径.build();}/*** 定制全局信息*/@Beanpublic OpenApiCustomizer customOpenApiCustomizer() {return openApi -> openApi.info(new Info().title("API 文档").description("API 文档描述").version("1.0.0").contact(new Contact().name("API Team").email("api-team@example.com")));}
3.其中最重要的就是packagesToScan和pathsToMatch了,具体是什么意思我们可以查看源代码给大家解释一下
// 分组名称,用于标识 OpenAPI 配置的组。
private final String group; 
// 要匹配的路径列表,定义哪些路径会生成 OpenAPI 文档。
private final List<String> pathsToMatch; 
// 要扫描的包名列表,用于发现生成 OpenAPI 文档的类。
private final List<String> packagesToScan; 
// 要排除的包名列表,这些包中的内容不会生成 OpenAPI 文档。
private final List<String> packagesToExclude; 
// 要排除的路径列表,这些路径不会生成 OpenAPI 文档。
private final List<String> pathsToExclude;
// 要匹配的响应类型列表,例如 "application/json"。
private final List<String> producesToMatch; 
// 要匹配的 HTTP 头部列表,用于限定生成文档的请求。
private final List<String> headersToMatch;
// 要匹配的请求体类型列表,例如 "application/json"。 
private final List<String> consumesToMatch; // 显示名称,用于描述 OpenAPI 配置的组。
private final String displayName;
// 自定义 OpenAPI 文档的定制器列表。
private List<OpenApiCustomizer> openApiCustomizers; 
// 自定义 OpenAPI 操作(API 方法)文档的定制器列表。
private List<OperationCustomizer> operationCustomizers; 
// 自定义路由操作的文档定制器列表。
private List<RouterOperationCustomizer> routerOperationCustomizers; 
// 用于过滤哪些方法应该包含在 OpenAPI 文档中的过滤器列表。
private List<OpenApiMethodFilter> openApiMethodFilters; 
4.在使用的时候也有一些变化,我们分了三个组 对应了3个模块
@Tag(name = "/公共接口")
@RestController
@RequestMapping("/test")
public class AccountController {@Operation(summary = "获取所有接口 default")@GetMapping("/index")public String index(){return "Hello World";}
}@Tag(name = "后端接口")
@RestController
@RequestMapping(value = "/api/admin")
public class AdminController {@Operation(summary = "获取admin接口")@GetMapping(value = "/index")public String index(){return "Hello Admin";}
}@Tag(name = "前端接口")
@RestController
@RequestMapping(value = "/api/web")
public class WebController {@Operation(summary = "获取前端接口")@GetMapping(value = "/index")public String index(){return "Hello Web";}
}
5.这样就配置好分组信息以及接口信息了,访问localhost:8080/doc.html 就会出现如下图这样
  1. default默认分组
    在这里插入图片描述

  2. web 分组
    在这里插入图片描述

  3. admin 分组
    在这里插入图片描述

6.这样接口文档和接口分组就配置好了 在配置文件中(我一般用yml)也可以配置

三.整合mybatis-plus,说实话新版的没太大的变化

1.mybatis-plus 3.5.9 起,分页插件已分离出来。如需使用,则需单独引入依赖
2.也就是说在使用这个版本的时候要多加一个依赖了
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>${mybatis.plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-jsqlparser</artifactId><version>${mybatis.plus.version}</version></dependency>
3.然后在配置文件中在进行配置就可以和以前一样了
@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbTypereturn interceptor;}
}

一款免费的在线文档格式转换工具在线文档转换

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

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

相关文章

jQuery UI API 文档

jQuery UI API 文档 引言 jQuery UI 是一个基于 jQuery 的用户界面库,它提供了丰富的交互式组件和效果,使得网页开发变得更加简单和高效。本文档旨在为开发者提供全面的 jQuery UI API 信息,帮助您更好地理解和应用 jQuery UI。 jQuery UI 简介 什么是 jQuery UI? jQu…

java GUI编程实现一个计算器

概述 闲来无事&#xff0c;利用java awt库写个简单的计算器玩玩。 实现 pom.xml <dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26</version></dependency&…

C#装箱拆箱机制详解

在C#中&#xff0c;装箱&#xff08;Boxing&#xff09;和拆箱&#xff08;Unboxing&#xff09; 是值类型与引用类型之间转换的核心机制。它们的实现直接影响程序的性能和类型安全。 一、装箱&#xff08;Boxing&#xff09; 定义&#xff1a; 将值类型转换为引用类型&#…

MySQL 8.4 SQL 全攻略:所有知识点与实战场景

一、引言 MySQL 作为一款广泛使用的开源关系型数据库管理系统&#xff0c;在数据存储和管理领域占据着重要地位。MySQL 8.4 版本在性能、功能和安全性等方面都有了显著的提升。本文将全面介绍 MySQL 8.4 中 SQL 的各种知识点&#xff0c;并结合实战场景进行详细讲解&#xff0…

Qt监控系统远程回放/录像文件远程下载/录像文件打上水印/批量多线程极速下载

一、前言说明 在做这个功能的时候&#xff0c;着实费了点心思&#xff0c;好在之前做ffmpeg加密解密的时候&#xff0c;已经打通了极速加密保存文件&#xff0c;主要就是之前的类中新增了进度提示信号&#xff0c;比如当前已经处理到哪个position位置&#xff0c;发个信号出来…

超高速工业相机的应用

超高速工业相机一般安装在机器流水线上代替人眼来做测量和判断&#xff0c;通过数字图像摄取目标转换成图像信号&#xff0c;传送给专用的图像处理系统。图像处理系统对这些信号进行各种运算来抽取目标的特征&#xff0c;进而根据判别的结果来控制现场的设备动作。一般来说&…

Plugin ‘mysql_native_password‘ is not loaded`

Plugin ‘mysql_native_password’ is not loaded mysql_native_password介绍1. 使用默认的认证插件2. 修改 my.cnf 或 my.ini 配置文件3. 加载插件&#xff08;如果确实没有加载&#xff09;4. 重新安装或检查 MySQL 版本 遇到错误 ERROR 1524 (HY000): Plugin mysql_nativ…

苍穹外卖-阿里云OSS文件上传

苍穹外卖-阿里云OSS文件上传 一、阿里云OSS简介**获取AccessKey**获取enpoint 二、代码实现1 引入依赖2 定义OSS相关配置2.1 application-dev.yml2.2 application.yml 3 读取OSS配置3.1 AliOssProperties 4 生成OSS工具类对象4.1 AliOssUtil4.2 OssConfiguration2.5 CommonCont…

【工具】前端 js 判断当前日期是否在当前自然周内

【工具】前端 js 判断当前日期是否在当前自然周内 function isCurrentNaturalWeek(targetDate) {const today new Date();const dayOfWeek today.getDay(); // 0&#xff08;周日&#xff09;到6&#xff08;周六&#xff09;// 计算本周一的日期&#xff08;自然周从周一开…

【操作系统】处理机调度

处理机调度 一、调度的概念、层次1.1 三个层次1.2 七状态模型 二、调度算法的评价指标2.1 CPU利用率2.2 系统吞吐率2.3 周转时间2.4 等待时间2.5 响应时间 三、进程调度&#xff08;低级调度&#xff09;的时机3.1 需要进程调度的情况3.2 不能进程调度的情况3.3 闲逛进程 四、进…

SpringBoot 使用 spring.profiles.active 来区分不同环境配置

很多时候&#xff0c;我们项目在开发环境和生产环境的配置是不一样的&#xff0c;例如&#xff0c;数据库配置&#xff0c;在开发的时候&#xff0c;我们一般用测试数据库&#xff0c;而在生产环境&#xff0c;我们要用生产数据库&#xff0c;这时候&#xff0c;我们可以利用 p…

怎么进行mysql的优化?

MySQL 的优化是一个系统性的工作&#xff0c;涉及多个层面&#xff0c;包括查询优化、索引优化、配置优化、架构优化等。以下是一些常见的 MySQL 优化方法&#xff1a; 查询优化 避免全表扫描&#xff1a;确保查询能够使用索引&#xff0c;避免 SELECT *&#xff0c;只选择需要…

谈谈 Node.js 中的模块系统,CommonJS 和 ES Modules 的区别是什么?

Node.js 模块系统&#xff1a;CommonJS 和 ES Modules 核心差异与实战指南 一、模块系统基础概念 **CommonJS (CJS)**​ 是 Node.js 传统模块系统&#xff0c;采用同步加载方式&#xff0c;典型特征&#xff1a; // 导出 module.exports { name: cjs }; // 或 exports.nam…

【HarmonyOS Next】 鸿蒙应用useNormalizedOHMUrl详解

【HarmonyOS Next】 鸿蒙应用useNormalizedOHMUrl详解 一、useNormalizedOHMUrl是什么? useNormalizedOHMUrl指的是是否使用标准化OHMUrl拼接。 在开发过程中&#xff0c;需要根据不同的环境或配置动态生成 URL。例如&#xff0c;在加载一些远程模块或者资源时&#xff0c;…

wav格式的音频压缩,WAV 转 MP3 VBR 体积缩减比为 13.5%、多个 MP3 格式音频合并为一个、文件夹存在则删除重建,不存在则直接建立

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 问题一&#xff1a;wav格式的音频压缩为哪些格式&#xff0c;网络传输给用户播放…

MFC线程

创建线程 HANDLE m_hThread; m_hThread CreateThread(NULL, 0, save_snapshot, (LPVOID)this, 0, &iThreadId);开启线程循环等待 DWORD WINAPI save_snapshot(LPVOID pVoid) {while (true){//持续循环等待事件到达。接收到事件信号后才进入if。if (::WaitForSingleObjec…

赋能农业数字化转型 雏森科技助力“聚农拼”平台建设

赋能农业数字化转型&#xff0c;雏森科技助力“聚农拼”平台建设 在数字化浪潮席卷各行业的今天&#xff0c;农业领域也在积极探索转型升级之路。中农集团一直以“根植大地&#xff0c;服务三农”为核心&#xff0c;以“乡村振兴&#xff0c;农民增收”为目标&#xff0c;及时…

千峰React:Hooks(上)

什么是Hooks ref引用值 普通变量的改变一般是不好触发函数组件的渲染的&#xff0c;如果想让一般的数据也可以得到状态的保存&#xff0c;可以使用ref import { useState ,useRef} from reactfunction App() {const [count, setCount] useState(0)let num useRef(0)const h…

Ubuntu20.04安装Redis

1.切换到root用户 如果没有切换到root用户的&#xff0c;切换到root用户。 2.使用 apt install redis 安装redis 遇到y/n直接y即可。 redis安装好之后就自动启动起来了&#xff0c;因此我们可以通过netstat -anp | grep redis命令来查看是否安装成功。 6379是Redis的默认端…

鸿蒙-AVPlayer

compileVersion 5.0.2&#xff08;14&#xff09; 音频播放 import media from ohos.multimedia.media; import common from ohos.app.ability.common; import { BusinessError } from ohos.base;Entry Component struct AudioPlayer {private avPlayer: media.AVPlayer | nu…