Java 开发——(上篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus
一、概述
记录时间 [2024-10-23]
本文是一个基于 Spring Boot 3 + MybatisPlus 的项目实战开发,主要涵盖以下几个方面:
- 从零开始的项目创建
- IDEA 中开发环境的热部署
Maven、Swagger3、MybatisPlus等的配置- 路由映射知识
- 静态资源访问
- 文件上传功能实现
- 拦截器的配置
通过此次开发练习,我们能对 MVC 架构有一个简单的了解,会使用 Spring Boot 框架进行 Java 项目的开发,感受前后端之间是如何传递信息的。可以说,这个项目相当于一个后端基础模板,在此基础上我们可以按照需求进一步开发,若搭配 Vue 进行前端开发,便可以搭建出一个简单的前后端分离系统。
考虑到篇幅的问题,将分成两篇文章写,此为上篇。
二、开发环境搭建
1. 开发工具
此项目需要使用的开发工具如下,各种工具通过官网安装,读者可进行参考:
- Windows 11 - 笔记本的系统
- JDK 17 - springboot3.0 以上最低支持的 jdk 版本,官网下载
- Intellij IDEA 2021.2.2 - 编写 Java 代码的开发工具
- MySQL 5.7.43 - 本地数据库
- Navicat 16.0 - 数据库查看 / 测试工具
- Postman - API 接口测试工具
- Notepad++ - 文本修改工具,会标记代码颜色
2. 配置 JDK
Java 开发环境(JDK)搭建,参考文章 - Java 开发环境搭建
(使用 IDEA 开发不需要配置系统环境变量,下载解压就行)
3. 配置 Maven
参考文章 - Maven 在 IDEA 中的配置与使用
三、创建 springboot3.0 项目
Spring Boot 项目可以通过官网创建,IDEA 集成了 Spring 官网创建项目的方式,因此,使用 IDEA 创建 Spring Boot 项目在本质上也是通过官网提供的服务 URL 创建的。
1. 新建项目 Spring Initializr
创建路径:File ==> New ==> New Project
使用 IDEA 创建 Spring Initializr 项目,开发语言选择 Java,以 Maven 的方式管理项目。
SDK 和 Java 版本选择刚才下载的 17 版本,同时选择以 jar 包的形式对项目进行打包。
然后点击 Next 继续操作。

2. 添加 Web 依赖
在这里我们选择 Spring Boot 的版本在 3.0 以上。
与 2.0 版本相比,3.0 版本是一次较大的升级,造成了很多不兼容更新。例如最低兼容的 Java 版本为 17,底层也切换到了 Spring 6,Swagger 的配置也有很大的不同。
然后,勾选 Web 依赖,Spring Boot 项目会内置 Tomcat,自动完成一些 xml 的相关配置。
最后点击 Finish,完成创建。

3. 编码设置
设置项目的编码为 UTF-8,以防出现中文乱码的情况。
直接搜索 File Encodings 进行查找。

4. 开发环境热部署
在实际的项目开发调试过程中,我们会频繁地修改后台类文件,导致项目需要重新编译重新启动,整个过程非常麻烦,影响开发效率。
解决办法:设置 Spring Boot 开发环境热部署。
当 IDEA 监测到主程序中的内容发生改变后,会自动对项目进行编译和重启,此方法可以带来些许便利。
- 使用 Spring Boot 提供的组件:
spring-boot-devtools - 在 IDEA 中进行相应的设置
添加 Maven 依赖
在 pom.xml 文件中添加 dev-tools 依赖
<!-- 使用 optional=true 表示依赖不会传递,即该项目依赖 devtools;其他项目如果引入此项目生成的 JAR 包,则不会包含 devtools -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>
修改配置文件
在 application.properties 中配置 dev-tools
# 设置热部署生效
spring.devtools.restart.enabled=true# 设置重启目录
spring.devtools.restart.additional-paths=src/main/java# 设置 classpath 目录下的 WEB-INF 文件夹内容修改不重启
# spring.devtools.restart.exclude=static/**
修改 IDEA 的设置
修改路径:File ==> Settings ==> Build ==> Compiler
勾选 Build project automatically,点击 Apply 进行应用,使其能自动编译构建项目。

同时勾选上 auto-make,点击 Apply 进行应用,确保热部署配置成功。
修改路径:File ==> Settings ==> Advanced Settings ==> Compiler

5. 运行主程序
找到 Spring Boot 项目的主程序入口,后缀名为 xxxApplication,点击运行即可启动整个项目。

四、接收 / 处理 HTTP 请求
1. 控制器 @RestController
Spring Boot 中提供了两种注解来标识控制器的类负责接收和处理 HTTP 请求,分别是 @Controller 和 @RestController。
@Controller:返回页面和数据;@RestController:只返回数据,默认情况下,该注解会将返回的对象数据转换成JSON格式。
在前后端分离模式中,一般由前端发送 HTTP 请求给后端,后端响应请求并返回数据,故使用 @RestController 注解。
在 com.example.demo 目录下新建 package controller,这个包下面放的是控制器类,添加上相应的注解后,可以接收和处理 HTTP 请求。
2. 路由映射 @RequestMapping
路由映射指的是后端(服务端)规定前端以何种方式发送请求。后端的控制类中的一个方法对应一种请求方式。
或者说是后端给前端规定了一条路径,通过这条路径,前端发送的消息才能被后端接收到。
这条路径会写在注解 @RequestMapping 中。
@RequestMapping可以写在控制类或者具体的方法中,也可以两个地方都写,整体的路径就是两个拼接起来。如请求hello1方法的整体路由为http://localhost:后端端口号/hello/hello1- 当注解中只有一个路径参数时,可以省略变量名
value,但如果还有其他的参数,就不可以省略。
// 以下是一个控制类
@RestController
@RequestMapping("/hello")
public class HelloController {@RequestMapping (value = "/hello1")public String hello1() {return "hello "}
}
- HTTP 请求的类型多样,如
Get、Post等,在注解中可以规定请求的类型。如果后端规定了请求的类型,那么前端要发送相应类型的请求。 - 后端有两种方式规定请求的类型。
- 第一种,修改注解,如
Get请求,就把注解修改成@GetMapping,以此类推还有@PostMapping、@PutMapping等。 - 第二种,在注解中用
method参数进行标识。
- 第一种,修改注解,如
// 以下是一个控制类
@RestController
@RequestMapping("/hello")
public class HelloController {// 这是一个 get 请求@RequestMapping (value = "/hello1",method = RequestMethod.GET)public String hello1() {return "hello "}// 这是一个 post 请求@PostMapping("/hello2")public String hello2() {return "login OK";}}
3. 测试工具 Postman
浏览器只能发送简单的 Get 请求,其他请求可以通过测试工具 Postman 进行测试。

4. 参数传递
前端在发送请求时,可以在请求中添加一些参数,这些参数会一起发送给后端。
后端通过某种方式可以获取这些参数。
方式一(Query Params)
- 前端直接把参数写在请求路径上,格式为
参数名=参数内容,如果有多个参数,则使用&字符进行拼接。如http://localhost:8080/hello?nickname=zhangsan&phone=123 - 后端可以在方法中添加参数类型,来接收参数,如
hello(String nickname, String phone) - 当请求中的参数名称与方法中的参数名称一致时,自动识别参数内容。
- 这里的参数传递不是必须的,如果前端没传参数,但是后端设置了接收,则参数的内容为默认的(
String类型为null)。
// 测试用 http://localhost:8080/hello
// 测试用 http://localhost:8080/hello?nickname=zhangsan&phone=123
@GetMapping("/hello")
public String hello(String nickname, String phone) {// 参数传递// 当请求中的参数名称与方法中的参数名称一致时,自动识别参数内容System.out.println(phone);return "hello " + nickname;
}
- 当请求中的参数名称与方法中的参数名称不一致时,后端不会自动识别参数内容,需要添加参数映射。
- 参数映射使用注解
@RequestParam来实现,作用是把这两个参数名称对应起来。如请求中的参数名称为nickname,方法中的参数名称为name,则需要映射@RequestParam(value = "nickname") String name - 默认情况下,用了参数映射,则这个参数必须传递。解决方式是更改
required = false。
// 参数映射
// 当加了参数映射,参数必须传递,否则报错 (除非加参数 required = false)
// 不加映射,值可为空
@RequestMapping (value = "/hello1",method = RequestMethod.GET)
public String hello1(@RequestParam(value = "nickname",required = false) String name) {// 参数传递// 当请求中的参数名称与方法中的参数名称一致时,自动识别参数内容// 不一致时,添加参数映射System.out.println("hello1....");return "hello " + name;
}
参考测试
先确定路由映射的路径,方法,需要传递的参数。

方式二(请求体 Body + 封装类)
- 当请求传递的参数数量较多时,可以将参数封装到实体类中。
- 在 Spring Boot 项目中编写一个
User实体类,里面有两个参数username和password,给它们生成Getter / Setter + toString()方法。
// 用于封装参数的实体类
public class User {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
- 前端要传递的参数就是
User类中的这两个参数username和password,注意名字不要写错 - 后端会自动把这些参数封装到
user对象中去。
// 把对象封装到类里,注意参数名称相同
@PostMapping("/hello2")
public String hello2(User user) {System.out.println(user.toString());return "login OK" + user.getUsername();
}
- 如果前端用 JSON 格式请求,则对象前需要加上请求体
@RequestBody - 注意 JSON 格式的参数是有数据类型的,如,用双引号表示的是字符串类
"zhangsan",对应User类中的参数类型String。
// 如果前端用 JSON 格式请求,则对象前需要加上请求体 @RequestBody
@PostMapping("/hello3")
public String hello3(@RequestBody User user) {System.out.println(user.toString());return "login OK" + user.getUsername();
}
参考测试
先确定路由映射的路径,方法,需要传递的参数。

前端用 JSON 格式请求

方式三(通配符)
- 浅看一下
// 通配符请求
// * 一个目录 http://localhost:8080/text/*
// ** 多个目录 http://localhost:8080/text/**/****
@GetMapping("/text/**")
public String text() {return "通配符请求";
}
参考资料
参考学习视频 - SpringBoot + Vue 全栈开发:https://www.bilibili.com/video/BV1nV4y1s7ZN/
参考文章 - Java 开发环境搭建:https://blog.csdn.net/Sareur_1879/article/details/137963848
参考文章 - Maven 在 IDEA 中的配置与使用:https://blog.csdn.net/Sareur_1879/article/details/143091933
参考文章 - Spring Boot 项目是两种创建方式:https://blog.csdn.net/Sareur_1879/article/details/139201323
Maven 官网:https://maven.apache.org/download.cgi
MVN 仓库:https://mvnrepository.com/
Spring Boot 官网:https://spring.io/projects/spring-boot
Oracle 官网:https://www.oracle.com
IDEA 官网:https://www.jetbrains.com.cn/idea/
Postman 官网:https://www.postman.com/
Notepad++ 下载地址:https://notepad-plus.en.softonic.com/
WinRAR 下载地址:https://www.winrar.com.cn/
相关文章:
Java 开发——(上篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus
一、概述 记录时间 [2024-10-23] 本文是一个基于 Spring Boot 3 MybatisPlus 的项目实战开发,主要涵盖以下几个方面: 从零开始的项目创建IDEA 中开发环境的热部署Maven、Swagger3、MybatisPlus 等的配置路由映射知识静态资源访问文件上传功能实现拦截器…...
Psychophysiology:脑-心交互如何影响个体的情绪体验?
摘要 情绪的主观体验与对身体(例如心脏)活动变化的情境感知和评估相关。情绪唤醒增加与高频心率变异性(HF-HRV)降低、EEG顶枕区α功率降低以及心跳诱发电位(HEP)振幅较高有关。本研究使用沉浸式虚拟现实(VR)技术来研究与情绪唤醒相关的脑心相互作用,以实现自然而可…...
FunASR实时语音识别内网部署 | 无网络环境中的实时语音识别 | 实时语音识别
1. 在有网的电脑上面先下载下面内容 下载模型文件,可以到modelscope中下载 下载项目源码,可以到github中搜索funasr下载 配置环境,这里使用conda虚拟环境,创建并进入虚拟环境 conda create -n funasr python3.8 conda activate …...
【设计模式-状态模式】
状态模式(State Pattern)是一种行为设计模式,它允许一个对象在内部状态改变时改变它的行为。换句话说,这种模式让对象在不同的状态下能够表现出不同的行为,而不需要修改对象的代码。状态模式通过将对象的行为与状态进行…...
【代码随想录Day50】图论Part02
岛屿数量 深搜 题目链接/文章讲解:代码随想录 class Solution {// 计算网格中岛屿的数量public int numIslands(char[][] grid) {int sum 0; // 初始化岛屿数量为0// 遍历整个网格for (int i 0; i < grid.length; i) {for (int j 0; j < grid[0].length…...
帝国CMS 内容页调用上一篇下一篇的方法(精华汇总)
帝国cms默认的内容页的上一页&下一页的调用代码是: 上一篇:[!--info.pre--] 下一篇:[!--info.next--] 但是实话实说,如果做个很普通的模版那足够用了,但是如果想个性化一点的话,比如加背景ÿ…...
(7)c++复合数据类型之数组
数组 数组就是可以存储一组相同类型的值,比如int a[10];就是一个存储10个int类型的数组。 数组初始化 数组初始化可以单个初始化,也是使用列表初始化,列表初始化可以全部,或者部分,如下案例: #include &…...
2.1 > Shell 是什么、如何更熟练的使用 Bash Shell
Shell 基础知识 Shell是计算机操作系统中的一个命令行解释器,由C语言编写,用于用户与操作系统之间进行交互。用户可以通过Shell输入命令,操作系统接收到这些命令后执行相应的操作。Shell一般还提供了编程语言的基本功能,允许用户…...
YOLO V3 网络构架解析
YOLO V3(You Only Look Once version 3)是由Joseph Redmon等人于2018年提出的一种基于深度学习的目标检测算法。它在速度和精度上相较于之前的版本有了显著提升,成为计算机视觉领域的一个重要里程碑。本文将详细解析YOLO V3的网络架构&#x…...
【zlm】 webrtc源码讲解(二)
目录 webrtc播放 MultiMediaSourceMuxer里的_ring webrtc播放 > MediaServer.exe!mediakit::WebRtcPlayer::onStartWebRTC() 行 60 CMediaServer.exe!mediakit::WebRtcTransport::OnDtlsTransportConnected(const RTC::DtlsTransport * dtlsTransport, RTC::SrtpSession::…...
5G RedCap工业路由器赋能电力物联网应用
随着5G轻量化技术应用的推进,5G RedCap旨在提供低功耗、低成本、广覆盖等功能特点赋能电力智能化升级。特别适用于工业物联网、低空经济、车联网、消费电子和轻量级5G的需求。 5G RedCap工业路由器的特点 低功耗:5G RedCap工业路由器通过节能技术&#…...
029.浏览器自动化-抓取#document下的内容
一、iframe下的#document是什么 #document 是一个特殊的 HTML 元素,表示 <iframe> 元素内部的文档对象。当你在 HTML 页面中嵌入一个 <iframe> 元素时,浏览器会创建一个新的文档对象来表示 <iframe> 内部的内容。这 个文档对象就是 #…...
2024前端html5,css3面试题总汇
1.XML,HTML,XHTML区别⭐ XML:XML是一个可扩展标记语言,主要是用来存储,传输数据的,并非显示数据,可以用来标记数据,定义数据类型,允许用户对自己的标记语言进行定义&…...
css实现外层不换行,内层换行
css实现上图效果,内容A和B整体不换行,B内容中换行 <div className"description"> <div className"label">{formatMessage({id: description})}</Col> <divclassName"value"> &l…...
word取消自动单词首字母大写
情况说明:在word输入单词后首字母会自动变成大写 (1)点击菜单栏文件 (2)点击“更多”——>“选项” (3)点击“校对”——>“自动更正选项” (4)取消“句首字母大写…...
flex常用固定搭配
flex常用固定搭配 flex简写:flex-grow(项目放大),flex-shrink (项目缩小),flex-basis(项目本身) flex: 1; 全写:flex: 1 1 0%;内容自动放大或缩小占满剩余…...
Kafka、Kafka Streams、Drools、Redis 和分布式数据库的风控系统程序
由于实时风控系统难度较大,集成框架设计各个单位均有特点,快速建立一个通用性较强,学习、实施和使用成本较低的框架尤其重要。 提供一个简化的 Java 程序示例,演示如何将 Kafka 消息中间件、Kafka Streams 计算引擎、Drools 规则…...
C++在实际项目中的应用第一课:游戏开发中的C++
第五章:C在实际项目中的应用 第一课:游戏开发中的C 1. 游戏引擎架构的详细分析 游戏引擎是现代游戏开发的核心,负责处理图形渲染、物理计算、音频管理和用户输入等多项功能。以下是游戏引擎架构的各个主要组成部分及其详细分析。 1.1 渲染…...
一键下载海外youtbe视频 解锁版 支持多分辨率
下载:https://pan.quark.cn/s/387e1110ebe5 【应用名称】:Snaptube 【应用版本】:7.28.0 【应用大小】:26.6M 【测试机型】:小米10S 【适用平台】:Andriod 【版本说明】:解锁版...
Scala内部类的运用
内部类:定义在类里面的类(内部类可以访问私有成员用它来操作类的私有成员,封闭性更好) class Student{var age18def say():Unit{}class Book{val bookName: Any "Scala程序设计"}}object Test19 {def main(args: Arra…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
