第3章:后端项目初始化——用Spring Initializr创建SpringBoot项目

好,咱们正式开始动手了。这一章我会带你走一遍后端项目的初始化流程。说白了,就是怎么用Spring Initializr这个工具,把SpringBoot项目的骨架搭起来。

我个人习惯,每次新项目都从Spring Initializr开始。为什么?因为它省事。你想想看,手动去配pom.xml、建目录结构,那得花多少时间?而且容易漏东西。我刚开始用SpringBoot那会儿,就吃过这个亏——少配了一个starter,结果项目启动报错,排查了半天。

3.1 使用Spring Initializr创建项目

Spring Initializr有两种用法:一种是网页版,一种是IDE内置的。我建议你两种都试试,但咱们先从网页版讲起。

打开浏览器,访问 https://start.spring.io。你会看到一个表单,需要填几个关键信息:

配置项 我的推荐值 说明
Project Maven 咱们用Maven管理依赖,Gradle也行,但Maven更主流
Language Java Kotlin、Groovy也可以,但Java最稳
Spring Boot 2.7.x 或 3.x 建议选最新的稳定版,别追太新
Group com.example 一般用公司域名倒写
Artifact demo 项目名,后面可以改
Package name 自动生成 保持默认就行
Packaging Jar 前后端分离项目,用Jar包部署最方便
Java 11 或 17 别用8了,太老了

填完之后,点击「ADD DEPENDENCIES」按钮,选择咱们需要的starter。对于这个课程,我建议先加这几个:

  • Spring Web —— 提供REST API支持
  • Spring Data JPA —— 数据库操作
  • MySQL Driver —— 连接MySQL
  • Lombok —— 减少样板代码

小技巧: 我一般会先加最核心的依赖,其他的后面再补。比如Spring Security、Validation这些,等用到的时候再加也不迟。一次性加太多,反而容易搞混。

点击「GENERATE」按钮,浏览器会下载一个zip包。解压之后,用IDEA或Eclipse打开,项目就创建好了。

3.2 项目目录结构解析

解压后的项目长这样。嗯,咱们来看看每个文件夹是干嘛的:

demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/demo/
│   │   │       └── DemoApplication.java
│   │   └── resources/
│   │       ├── application.properties
│   │       ├── static/
│   │       └── templates/
│   └── test/
│       └── java/
│           └── com/example/demo/
│               └── DemoApplicationTests.java
├── pom.xml
└── HELP.md

我一个个说:

  • src/main/java —— 放Java源代码的地方。所有业务逻辑、控制器、服务层都写在这里。
  • src/main/resources —— 放配置文件、静态资源、模板文件。application.properties就在这里。
  • src/test/java —— 单元测试代码。我建议你养成写测试的习惯,别偷懒。
  • pom.xml —— Maven的配置文件。所有依赖、插件都在这里声明。
  • HELP.md —— 帮助文档,可以删掉。

重点: DemoApplication.java 是项目的入口类。它上面有个 @SpringBootApplication 注解,这个注解包含了三个功能:@Configuration、@EnableAutoConfiguration、@ComponentScan。说白了,它就是SpringBoot的启动开关。

我记得第一次看到这个目录结构时,觉得挺简单的。但实际开发中,你会发现需要自己建很多子包。比如:

  • controller —— 放REST接口
  • service —— 业务逻辑
  • repository —— 数据库操作
  • entity —— 实体类
  • dto —— 数据传输对象

这些不是SpringBoot强制要求的,但这是行业最佳实践。你想想看,如果所有类都堆在一个包下,那项目大了之后,找文件得翻半天。

3.3 配置Maven依赖

打开 pom.xml,你会看到类似这样的内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>11</java.version>
    </properties>

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

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

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

这里有几个点需要注意:

  • parent —— 继承了spring-boot-starter-parent,这样就不用自己管理版本号了。SpringBoot会帮你搞定。
  • dependencies —— 所有依赖都写在这里。注意,有些依赖加了 <scope>runtime</scope>,意思是只在运行时需要,编译时不需要。
  • build —— 配置了spring-boot-maven-plugin,这个插件负责打包成可执行的Jar。

避坑指南: 我曾经遇到过一个问题——Lombok的注解不生效。排查了半天,发现是IDEA没安装Lombok插件。所以,如果你用了Lombok,记得在IDE里也装上对应的插件。另外,mysql-connector-j 这个依赖,SpringBoot 2.7.x 用的是新名字,旧版本叫 mysql-connector-java,别搞混了。

配置好pom.xml之后,记得让Maven重新加载一下。在IDEA里,点一下右上角的「刷新」按钮,或者右键pom.xml -> Maven -> Reload project。这样依赖才会下载到本地。

嗯,到这里,后端项目的基础就搭好了。下一章咱们会写第一个REST接口,让项目真正跑起来。