保卫萝卜2挑战模式
140.17MB · 2025-10-01
嗨,各位未来的大佬们好呀!
最近经常有刚学完 Java 基础的朋友问我:“Spring Boot 看起来好厉害,但是感觉好复杂,项目怎么搭啊?一堆配置文件看得头都大了!”
别慌!今天这篇文章就是为你量身定做的。我将手把手、一步步带你从零开始,搭建一个功能虽简但五脏俱全的 Spring Boot 项目。我们会用最主流、最高效的方式来创建项目,并集成 Web 开发、数据库操作(MyBatis-Plus) 、Lombok 等必备神器。
这篇文章的目标是:让你不仅能成功运行 Hello World
,更能清晰地理解项目结构、配置文件以及如何集成常用第三方库。 话不多说,发车!
在开始之前,请确保你的电脑上已经安装好了以下环境。这就像是做菜前的备料,必不可少哦!
忘记那些手动创建 pom.xml
和目录的“石器时代”方法吧!现在我们有官方神器 —— Spring Initializr。它是一个 Web 应用,可以帮助我们像搭积木一样生成 Spring Boot 项目的骨架。
有两种方式使用它:
我们以更常用的 IntelliJ IDEA 为例进行讲解。
打开 IDEA -> New Project (新建项目)
配置项目信息 在左侧菜单选择 Spring Initializr,然后填写右侧的项目元数据:
my-first-app
com.example
添加核心依赖 (Dependencies) 这是最关键的一步!我们需要在这里选择项目启动时需要用到的库。点击 Next,我们来挑选几个最常用的:
在搜索框里依次搜索并勾选它们。
点击 Create,等待项目初始化 IDEA 会自动从网络上下载所需的依赖库并构建项目。这个过程可能需要几分钟,取决于你的网络速度。完成后,你会看到一个标准的 Maven 项目结构。
项目创建好了,我们先来“巡视”一下我们的新家,看看各个文件和目录都是干啥的:
Bash
my-first-app
├── .mvn
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── myfirstapp
│ │ │ └── MyFirstAppApplication.java // 程序入口!
│ │ └── resources
│ │ ├── static // 存放静态资源,如CSS,JS
│ │ ├── templates // 存放模板文件,如Thymeleaf
│ │ └── application.properties // 核心配置文件!
│ └── test
│ └── ...
├── pom.xml // Maven 配置文件!
└── ...
MyFirstAppApplication.java
: 这是整个 Spring Boot 应用的启动类,里面有一个 main
方法。运行它,项目就启动了。application.properties
: 项目的核心配置文件。数据库连接信息、服务器端口等所有配置都在这里。pom.xml
: Maven 的灵魂。它定义了项目信息、依赖库、插件等。我们之前选择的 Spring Web
、Lombok
等都会记录在这里。光有架子还不行,得给它注入灵魂。我们来配置一下 application.properties
文件。
为了更清晰、更结构化,我们通常更喜欢使用 .yml
格式的配置文件。它使用缩进表示层级,比 .properties
更直观。
application.properties
重命名为 application.yml
。application.yml
文件,添加以下内容:YAML
# 服务器端口配置
server:
port: 8080 # 你可以改成任何你喜欢的端口,比如 8888
# Spring Boot 应用基本配置
spring:
application:
name: my-first-app # 应用名称
# 数据库连接配置
datasource:
url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root # 你的数据库用户名
password: your_password # 你的数据库密码
driver-class-name: com.mysql.cj.jdbc.Driver
# MyBatis-Plus 配置
mybatis-plus:
mapper-locations: classpath:/mapper/*.xml # 指定 Mapper XML 文件的位置
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启控制台 SQL 日志,方便调试
万事俱备,我们来写第一个接口,让项目真正“活”起来。
com.example.myfirstapp
下创建一个新的包 controller
。controller
包下,创建一个新的 Java 类 HelloController
。Java
package com.example.myfirstapp.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // 1. 告诉 Spring 这是一个控制器,并且返回的是 JSON 数据
public class HelloController {
@GetMapping("/hello") // 2. 将这个方法映射到 HTTP GET 请求的 /hello 路径
public String sayHello() {
return "Hello, Spring Boot! 我是 Gemini~";
}
}
代码解释:
@RestController
: 这是一个组合注解,相当于 @Controller
+ @ResponseBody
。它告诉 Spring,这个类里的所有方法返回的都是数据(比如字符串、JSON 对象),而不是视图(比如 JSP 页面)。@GetMapping("/hello")
: 将 sayHello()
方法与一个 HTTP GET 请求绑定起来,访问路径是 /hello
。激动人心的时刻到了!
找到启动类 MyFirstAppApplication.java
。
右键点击,选择 Run 'MyFirstAppApplication'
或者直接点击旁边的绿色小三角 ▶️。
观察控制台输出。当你看到类似下面的日志,特别是 Tomcat started on port(s): 8080
,就代表项目启动成功了!
测试接口 打开你的浏览器,访问地址:http://localhost:8080/hello
如果一切顺利,你会在页面上看到:
Hello, Spring Boot! 我是 Gemini~
恭喜你!你已经成功搭建并运行了你的第一个 Spring Boot 应用!
只返回一个字符串太单调了。接下来,我们来做一个完整的从数据库查询数据的例子。
假设我们数据库里有一张 user
表:
SQL
CREATE TABLE `user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NULL,
`age` INT NULL,
PRIMARY KEY (`id`)
);
-- 插入一条测试数据
INSERT INTO `user` (`id`, `name`, `age`) VALUES ('1', 'Gemini', '1');
1. 创建实体类 (Entity) 在 com.example.myfirstapp
下创建 entity
包,然后创建 User.java
类。
Java
package com.example.myfirstapp.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data // Lombok 注解:自动生成 Getter, Setter, toString, equals, hashCode 等方法
@TableName("user") // MyBatis-Plus 注解:指定该实体类对应数据库中的 'user' 表
public class User {
@TableId(type = IdType.AUTO) // 指定主键,并设置为主键自增
private Long id;
private String name;
private Integer age;
}
2. 创建 Mapper 接口 在 com.example.myfirstapp
下创建 mapper
包,然后创建 UserMapper.java
接口。
Java
package com.example.myfirstapp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.myfirstapp.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper // 告诉 MyBatis 这是一个 Mapper 接口,Spring 会扫描并创建代理实现
public interface UserMapper extends BaseMapper<User> {
// 继承 BaseMapper 后,就自动拥有了 CRUD 等超多好用的方法!
// 无需编写任何 SQL!
}
3. 配置 Mapper 扫描 我们需要告诉 Spring Boot 去哪里找我们的 Mapper 接口。在启动类 MyFirstAppApplication.java
上添加一个注解:
Java
package com.example.myfirstapp;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.myfirstapp.mapper") // 添加这一行!
public class MyFirstAppApplication {
public static void main(String[] args) {
SpringApplication.run(MyFirstAppApplication.class, args);
}
}
4. 创建 Service (可选但推荐) 为了让业务逻辑和数据访问分离,我们通常会创建一个 Service 层。
在 com.example.myfirstapp
下创建 service
包,创建 UserService.java
接口和其实现类 UserServiceImpl.java
。
Java
// UserService.java
package com.example.myfirstapp.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.myfirstapp.entity.User;
public interface UserService extends IService<User> {
}
// UserServiceImpl.java
package com.example.myfirstapp.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.myfirstapp.entity.User;
import com.example.myfirstapp.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service // 标记为 Spring 的一个服务组件
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
5. 在 Controller 中调用 Service 最后,改造一下我们的 HelloController
,让它能根据 id 查询用户信息。
Java
package com.example.myfirstapp.controller;
import com.example.myfirstapp.entity.User;
import com.example.myfirstapp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired // 依赖注入:让 Spring 自动把 UserService 实例赋给我们
private UserService userService;
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot! 我是 Gemini~";
}
// 新增一个接口,通过 ID 查询用户
// 例如:访问 /user/1 就会查询 ID 为 1 的用户
@GetMapping("/user/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getById(id);
}
}
6. 重启并测试 重新运行 MyFirstAppApplication
,然后用浏览器访问 http://localhost:8080/user/1。
你将会看到浏览器返回一个 JSON 格式的数据:
JSON
{
"id": 1,
"name": "Gemini",
"age": 1
}
太棒了!你已经完成了从 Controller -> Service -> Mapper -> 数据库的完整调用链路!
恭喜你坚持看到了这里!我们一起从零开始,使用 Spring Initializr 快速创建了一个 Spring Boot 项目,理解了它的基本结构,配置了服务器端口和数据库,并亲手编写了两个 API 接口,其中一个还实现了完整的数据库查询功能。
这只是你 Spring Boot 旅程的开始。接下来,你可以继续探索:
希望这篇保姆级教程能为你打开 Spring Boot 的大门。记住,学习编程最好的方式就是动手实践。不断地写代码、遇到问题、解决问题,你就会越来越强!
如果觉得这篇文章对你有帮助,别忘了点赞、收藏哦! 我们下期再见!