Spring Boot 入门:快速构建现代 Java 应用的利器

一个基于 Spring 框架的快速开发工具。Spring Boot 以其“开箱即用”的特性、自动配置和简化开发流程的理念,成为 Java 后端开发的首选框架。本文将带你从零搭建一个简单的 Spring Boot Web 应用,适合初学者快速上手,同时为有经验的开发者提供进阶建议和优化思路。

Spring Boot 极大简化了传统 Spring 的配置(如 XML),通过注解和嵌入式服务器(如 Tomcat)实现快速开发。本文基于 Spring Boot 3.x,使用 Maven 构建,结合 MySQL 数据库实现一个简单的用户管理 REST API。让我们开始吧!

前置准备

在开始之前,确保开发环境已就绪:

  • JDK:推荐 JDK 17(Spring Boot 3.x 要求 JDK 17+,2.x 支持 JDK 8+)。
  • Maven:用于依赖管理,确保配置好环境变量。
  • IDE:IntelliJ IDEA 或 Eclipse,推荐使用 Spring Initializr 插件快速生成项目。
  • 数据库:MySQL 8.0(或其他数据库,需调整驱动)。
  • 项目结构:创建一个 Spring Boot 项目,目录如下:
    src
    ├── main
    │   ├── java
    │   │   └── com.example.demo
    │   │       ├── controller
    │   │       ├── model
    │   │       ├── repository
    │   │       └── service
    │   ├── resources
    │   │   ├── application.properties  // 配置文件
    │   │   └── static                 // 静态资源(CSS, JS)
    │   └── webapp
    └── test
        └── java
    

推荐使用 Spring Initializr 生成项目,选择以下选项:

  • 项目:Maven
  • 语言:Java
  • Spring Boot 版本:3.3.x
  • 依赖:Spring Web, Spring Data JPA, MySQL Driver

下载后导入 IDE,准备开始!

步骤 1: 引入 Maven 依赖

Spring Boot 使用 spring-boot-starter 模块简化依赖管理。以下是 pom.xml 配置:

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>spring-boot-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

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

    <dependencies>
        <!-- Spring Boot Web 启动器:包含嵌入式 Tomcat 和 MVC -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Boot JPA 启动器:数据库操作 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- MySQL 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </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>
            </plugin>
        </plugins>
    </build>
</project>

说明

  • spring-boot-starter-parent:提供默认配置和依赖管理。
  • spring-boot-starter-web:包含 Spring MVC 和嵌入式 Tomcat。
  • spring-boot-starter-data-jpa:简化数据库操作,集成 Hibernate。
  • spring-boot-maven-plugin:支持打包可执行 JAR 和运行项目。
  • 版本提示:Spring Boot 3.x 需 JDK 17+,若用 JDK 8,选择 2.x 版本。

步骤 2: 配置 Spring Boot

Spring Boot 使用 application.propertiesapplication.yml 配置项目属性。我们在 src/main/resources/application.properties 中配置数据库连接:

spring.datasource.url=jdbc:mysql://localhost:3306/boot_db?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

要点

  • spring.datasource:配置 MySQL 连接,替换 your_password 为实际密码。
  • spring.jpa.hibernate.ddl-auto=update:自动更新数据库表结构(开发环境用)。
  • spring.jpa.show-sql:显示执行的 SQL,便于调试。

创建数据库

在 MySQL 中创建数据库:

CREATE DATABASE boot_db;

步骤 3: 创建模型和 Repository

模型类

定义 User 实体(com.example.demo.model.User):

package com.example.demo.model;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;

    // Constructors
    public User() {}
    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

说明

  • @Entity:标记为 JPA 实体,映射到数据库表。
  • @Id@GeneratedValue:主键自增。

Repository 接口

定义 UserRepositorycom.example.demo.repository.UserRepository):

package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

说明JpaRepository 提供 CRUD 方法,无需手动实现。

步骤 4: 创建控制器

创建 UserControllercom.example.demo.controller.UserController)提供 REST API:

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

说明

  • @RestController:处理 REST 请求,返回 JSON。
  • @Autowired:注入 Repository。
  • @GetMapping@PostMapping:定义 API 端点。

步骤 5: 运行和测试

  1. 确保 MySQL 服务运行,数据库已创建。
  2. 在 IDE 中运行主类(默认生成,带 @SpringBootApplication)。
  3. 或使用命令:mvn spring-boot:run
  4. 测试 API:
    • GET http://localhost:8080/api/users:列出所有用户。
    • POST http://localhost:8080/api/users
      {
          "name": "Alice",
          "age": 25
      }
      
    • GET http://localhost:8080/api/users/1:获取 ID 为 1 的用户。

调试技巧

  • 连接失败:检查 application.properties 的数据库配置。
  • 404 错误:确认 URL 路径或控制器注解。
  • 日志:Spring Boot 默认使用 Logback,查看控制台输出。

进阶与最佳实践

  • 配置文件:用 application.yml 替代 .properties,层级更清晰。
  • 服务层:添加 Service 层(如 UserService)实现业务逻辑。
  • 异常处理:用 @ControllerAdvice 统一处理异常。
  • Swagger 集成:添加 springdoc-openapi 生成 API 文档。
  • 安全性:集成 Spring Security 实现认证授权。
  • 资源推荐:Spring Boot 官网(spring.io)、《Spring Boot in Action》。多实践 REST API 和微服务。

总结

通过这个 Spring Boot 示例,你学会了配置项目、操作数据库、构建 REST API。Spring Boot 的自动配置和注解驱动极大简化了开发流程,适合快速原型和生产级应用。

更多推荐