Spring Boot 常用 Starter

Spring Boot Starter 是 Spring Boot 提供的一系列预定义的依赖集合,旨在帮助开发者快速构建应用。这些 Starter 包含了常见的依赖和配置,极大地简化了项目的初始化和开发过程。本文将介绍一些常用的 Spring Boot Starter,并通过实际示例展示它们的使用方法。

1. Spring Boot Starter 概述

Spring Boot Starter 是一组 Maven 项目,它们以统一的方式打包和管理常见的依赖和配置。每个 Starter 都包含了一组相关的库和配置,使开发者无需手动添加和配置这些依赖,只需在项目中引入相应的 Starter 即可。

1.1 常用 Starter 列表

以下是一些常用的 Spring Boot Starter:

  • spring-boot-starter-web:用于构建 Web 应用,包括 RESTful 应用。
  • spring-boot-starter-data-jpa:用于与 JPA 一起工作,实现数据持久化。
  • spring-boot-starter-security:用于实现安全性功能。
  • spring-boot-starter-thymeleaf:用于 Thymeleaf 模板引擎。
  • spring-boot-starter-test:用于测试,包含 JUnit、Mockito 等测试框架。

2. Spring Boot Starter 的使用

2.1 引入依赖

在 Spring Boot 项目中使用 Starter 非常简单,只需在 pom.xml 文件中引入相应的依赖。例如:

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.2 示例项目

下面通过一个简单的示例项目展示如何使用常用的 Spring Boot Starter。

步骤 1: 创建 Spring Boot 项目

使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择 Web、JPA、Thymeleaf 和 H2 Database 依赖。

步骤 2: 配置数据源

application.properties 文件中配置 H2 数据库:

properties 复制代码
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
步骤 3: 创建实体类

创建一个简单的实体类 User

java 复制代码
package com.example.demo.entity;

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

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

    // Getters and Setters
}
步骤 4: 创建 JPA 仓库

创建一个 JPA 仓库接口 UserRepository

java 复制代码
package com.example.demo.repository;

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

public interface UserRepository extends JpaRepository<User, Long> {
}
步骤 5: 创建控制器

创建一个控制器 UserController 处理用户请求:

java 复制代码
package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/users")
    public String listUsers(Model model) {
        model.addAttribute("users", userRepository.findAll());
        return "user-list";
    }

    @GetMapping("/users/new")
    public String showUserForm(Model model) {
        model.addAttribute("user", new User());
        return "user-form";
    }

    @PostMapping("/users")
    public String saveUser(User user) {
        userRepository.save(user);
        return "redirect:/users";
    }
}
步骤 6: 创建 Thymeleaf 模板

src/main/resources/templates 目录下创建两个 Thymeleaf 模板 user-list.htmluser-form.html

user-list.html:

html 复制代码
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    <a href="/users/new">Add New User</a>
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
        </tr>
        <tr th:each="user : ${users}">
            <td th:text="${user.id}"></td>
            <td th:text="${user.name}"></td>
            <td th:text="${user.email}"></td>
        </tr>
    </table>
</body>
</html>

user-form.html:

html 复制代码
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Add User</title>
</head>
<body>
    <h1>Add User</h1>
    <form action="/users" th:object="${user}" method="post">
        <label for="name">Name:</label>
        <input type="text" id="name" th:field="*{name}">
        <br>
        <label for="email">Email:</label>
        <input type="email" id="email" th:field="*{email}">
        <br>
        <button type="submit">Save</button>
    </form>
</body>
</html>
步骤 7: 启动应用

运行 DemoApplication 主类,启动应用并访问 http://localhost:8080/users

2.3 测试 Starter

Spring Boot 提供了 spring-boot-starter-test,包含了常用的测试框架,如 JUnit、Mockito 和 Spring TestContext Framework。

创建一个简单的单元测试类:

java 复制代码
package com.example.demo;

import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.context.SpringBootTest;

import static org.assertj.core.api.Assertions.assertThat;

@DataJpaTest
class UserRepositoryTests {

    @Autowired
    private UserRepository userRepository;

    @Test
    void testSaveAndFindUser() {
        User user = new User();
        user.setName("John");
        user.setEmail("john@example.com");
        userRepository.save(user);

        User foundUser = userRepository.findById(user.getId()).orElse(null);
        assertThat(foundUser).isNotNull();
        assertThat(foundUser.getName()).isEqualTo("John");
        assertThat(foundUser.getEmail()).isEqualTo("john@example.com");
    }
}

3. 总结

Spring Boot Starter 是一个非常强大的工具,它极大地简化了项目的初始化和依赖管理工作。通过使用 Spring Boot Starter,开发者可以快速构建和配置各种类型的应用,而无需手动处理复杂的依赖和配置文件。在实际项目中,合理使用 Starter 能够显著提高开发效率和代码的可维护性。希望本文对你理解和使用 Spring Boot Starter 有所帮助。

相关推荐
程序员cxuan2 小时前
Claude 官方的学习教程,太强了。
人工智能·后端·程序员
老孙讲技术2 小时前
把工地遮挡和掉线接进项目部:setMessageCallback 订 alarm 与 deviceStatus
后端·物联网·音视频开发
老孙讲技术2 小时前
关店后有人进门,监控值班群却没响:用 setMessageCallback 订 human,再用 aiHuman 打开人形
后端·物联网·音视频开发
LEE2 小时前
原来 Claude Code 最厉害的工具,一行代码都不写
前端·后端
老孙讲技术2 小时前
把园区几百路摄像头收进值班台账:bindDevice 入账与 listDeviceDetailsByPage 翻页
后端·物联网·音视频开发
用户7813667114452 小时前
emplace_back vs push_back 详解
后端
老孙讲技术3 小时前
把没网没电的户外点位接进出画值班台:unBindDeviceInfo 核 SIMCard 与 bindDeviceLive
后端·物联网·音视频开发
万物智能3 小时前
硬件调试三板斧—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
后端·架构
小夏coding3 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
长大19883 小时前
Node.js 22+ 特性实战:用内置能力写微服务与 CLI,能少装一堆依赖
后端