为了账号安全,请及时绑定邮箱和手机立即绑定

Springboot框架项目实战:新手入门与初级教程

标签:
SpringBoot
概述

本文详细介绍了如何使用Spring Boot框架项目实战,涵盖了环境搭建、常用注解和配置、控制器的使用、实体类与数据库交互、服务层的实现以及RESTful API的设计与测试。通过这些内容,你可以快速上手Spring Boot开发并构建高效稳定的Web应用程序。

Spring Boot简介与环境搭建

Spring Boot的介绍

Spring Boot 是由 Pivotal 团队提供的一个基于 Spring 平台的快速开发框架。它的设计目的是简化基于 Spring 的应用开发,使开发者可以更快地构建独立的、生产级别的应用。Spring Boot 框架通过提供默认配置和自动配置,使得开发者在配置 Spring 应用时可以大大减少配置的工作量。Spring Boot 也支持嵌入式的 Tomcat、Jetty 或者 Undertow 作为应用服务器,还可以自动完成 RESTful 服务接口的定义,无需单独配置一个嵌入式的 EJB 容器。

特点

  1. 独立运行:Spring Boot 应用可以打包成独立的 jar 或 war 文件,直接运行。
  2. 内嵌服务器:支持内嵌 Tomcat、Jetty 或 Undertow,无需部署到外部服务器。
  3. 自动配置:基于约定优于配置的原则,减少了配置的工作量。
  4. 依赖管理:通过 Spring Boot 的 Bill of Materials(BOM)文件管理所有依赖版本,避免版本冲突。
  5. 生产就绪:支持自动配置、健康检查、外部化配置等功能。
  6. 无码生成:以最少的代码实现应用功能。
  7. 嵌入式文档:支持命令行参数,内置文档帮助,快速启动应用。

开发环境搭建

Java 开发环境

在开始使用 Spring Boot 之前,你首先需要确保本地环境已经安装了 Java JDK 和 Maven 或 Gradle。这里以 Maven 为例。

  • Java JDK 安装:你可以前往 Oracle 官方网站下载并安装最新版本的 JDK。
  • Maven 安装:下载 Maven,解压后设置环境变量。配置 Maven 的本地仓库目录。
配置环境变量

假设你已经下载了 Maven 并解压到本地路径 /usr/local/apache-maven-3.8.1

# 设置 M2_HOME
export M2_HOME=/usr/local/apache-maven-3.8.1
export PATH=${M2_HOME}/bin:${PATH}

创建 Spring Boot 项目

  1. 使用 Spring Initializr 创建项目
    访问 Spring Initializr 网站,选择所需的项目依赖,如 Web、Thymeleaf、JPA 等。

    • 点击“Generate”按钮,下载 zipjar 文件。
    • 解压文件到本地目录,然后在 IDE 中打开。
  2. 从命令行创建项目
    使用 spring boot 命令行工具(Spring CLI)创建项目。

    spring init --dependencies=web,jpa,thymeleaf --groupId=com.example --artifactId=myproject --version=0.0.1-SNAPSHOT
    cd myproject

运行 Spring Boot 应用

在项目根目录执行以下命令来启动应用:

mvn spring-boot:run

或者在 src/main/resources 目录下的 application.properties 文件中配置端口号,然后使用 Maven 命令启动:

# application.properties
server.port=8080
mvn spring-boot:run

现在可以通过浏览器访问 http://localhost:8080 来查看应用是否运行成功。

快速创建第一个Spring Boot项目

src/main/java 目录下创建一个主应用程序类 Application.java

package com.example.myproject;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@SpringBootApplication 注解是一个复合注解,包含了 @Configuration@EnableAutoConfiguration@ComponentScan 的功能。它告诉 Spring Boot 应用如何配置自身。

src/main/resources 目录下创建 application.properties 文件:

# application.properties
server.port=8080

现在,再次运行 mvn spring-boot:run,确保项目可以成功启动并在浏览器中访问 http://localhost:8080

常用注解与配置详解

Spring Boot中的常用注解

在 Spring Boot 中,注解是使用最多的配置方式。这些注解可以简化配置,减少 XML 配置文件的使用。以下是几个常用的注解:

  1. @SpringBootApplication:@Configuration、@EnableAutoConfiguration、@ComponentScan 的组合注解,用于标记主类。

  2. @Configuration:用于标记配置类,表示当前类是配置类。

  3. @ComponentScan:用于指定需要扫描的包,Spring Boot 会默认扫描带有 @Configuration 注解的类。

  4. @EnableAutoConfiguration:用于开启自动配置功能。

  5. @Controller@Service@Repository@Component:用于定义 Spring 组件,分别表示控制器、服务层、数据访问层和通用组件。

  6. @Autowired:用于自动装配依赖,即 Spring 会自动查找并注入相应的 Bean。

  7. @Value:用于注入属性值,从配置文件中读取属性值。

  8. @Bean:用于定义 Bean,可以手动创建 Bean 对象。

  9. @RestController:用于定义 RESTful API 的控制器。

  10. @RequestMapping@GetMapping@PostMapping@PutMapping@DeleteMapping:用于定义请求的处理方法。

  11. @Service:用于标注服务层的组件。

  12. @Repository:用于标注数据访问层的组件。

  13. @Entity:用于标注实体类,通常与 JPA 一起使用。

  14. @Transactional:用于管理事务。

  15. @EnableJpaRepositories@EnableTransactionManagement:用于启用 JPA 仓库和事务管理。

示例代码

创建一个简单的控制器类 DemoController.java

package com.example.myproject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    @Autowired
    private MyService myService;

    @GetMapping("/hello")
    public String sayHello() {
        return myService.sayHello();
    }
}

创建一个服务类 MyService.java

package com.example.myproject;

public class MyService {
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}

application.properties 文件中配置一些属性值:

# application.properties
app.message=Hello, World!

在控制器中使用 @Value 注解注入属性值:

package com.example.myproject;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    @Value("${app.message}")
    private String message;

    @GetMapping("/hello")
    public String sayHello() {
        return message;
    }
}

项目配置文件(application.properties/application.yml)的使用

Spring Boot 支持两种配置文件格式:.properties.yml.properties 是传统的配置文件格式,而 .yml 是 YAML 格式,通常被认为更简洁、更易于阅读。

application.properties 示例

# application.properties
server.port=8080
app.message=Hello, World!

application.yml 示例

server:
  port: 8080

app:
  message: Hello, World!

注解 @ConfigurationProperties

@ConfigurationProperties 注解可以将配置文件中的属性值绑定到 Java 对象中。例如,我们可以创建一个配置类 AppProperties.java

package com.example.myproject;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

然后在 DemoController.java 中使用这个配置类:

package com.example.myproject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    @Autowired
    private AppProperties appProperties;

    @GetMapping("/hello")
    public String sayHello() {
        return appProperties.getMessage();
    }
}
控制器(Controller)的使用

创建Controller

在 Spring Boot 中,控制器(Controller)是处理 HTTP 请求的组件。控制器通常是使用 @Controller@RestController 注解的类。@RestController@Controller@ResponseBody 的组合,通常用于 RESTful API 的开发。

创建一个简单的控制器

创建一个文件 DemoController.java

package com.example.myproject;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}

返回JSON数据

在 Spring Boot 中,返回 JSON 数据通常使用 @RestController 注解和 @GetMapping 注解。

创建一个简单的 JSON 数据返回的控制器 JsonController.java

package com.example.myproject;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
public class JsonController {
    @GetMapping("/user")
    public Map<String, Object> getUser() {
        Map<String, Object> user = new HashMap<>();
        user.put("name", "John Doe");
        user.put("age", 30);
        return user;
    }
}

使用Thymeleaf模板引擎

Thymeleaf 是一个 Java 模板引擎,可以用于生成 HTML、XML、JavaScript 或者任何其它文本输出。Spring Boot 自动配置了 Thymeleaf,因此你可以直接使用它。

创建一个 Thymeleaf 模板

src/main/resources/templates 目录下创建一个文件 index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>My Spring Boot App</title>
</head>
<body>
    <h1 th:text="'Hello, ' + ${name}"></h1>
</body>
</html>

创建控制器来渲染模板

创建一个控制器 TemplateController.java

package com.example.myproject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class TemplateController {
    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("name", "Spring Boot User");
        return "index";
    }
}

Spring Boot 会自动查找 src/main/resources/templates 目录下的模板文件,并解析为 HTML。

实体类(Entity)与数据库交互

创建实体类

实体类通常用于映射数据库中的表。在 Spring Boot 中,可以使用 JPA 来简化数据库操作。

定义一个简单的用户实体类 User.java

package com.example.myproject;

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

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

    // Getter and Setter
    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 String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

JPA与Spring Data JPA的使用

Spring Data JPA 提供了简化数据库访问的工具类,如 JpaRepository,简化了数据库操作。

创建一个接口 UserRepository.java

package com.example.myproject;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;
import java.util.Optional;

public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByName(String name);
    @Query("SELECT u FROM User u WHERE u.name = :name")
    Optional<User> findByNameWithQuery(String name);
}

数据库的连接与操作

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

# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update

创建一个服务类 UserService.java

package com.example.myproject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

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

    public Optional<User> getUserByName(String name) {
        return userRepository.findByName(name);
    }

    public User saveUser(User user) {
        return userRepository.save(user);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

创建一个控制器 UserController.java

package com.example.myproject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

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

    @GetMapping("/{name}")
    public Optional<User> getUserByName(@PathVariable String name) {
        return userService.getUserByName(name);
    }

    @PostMapping
    public User saveUser(@RequestBody User user) {
        return userService.saveUser(user);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userService.saveUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}
服务层(Service)的实现

创建Service接口与实现类

服务层通常用于业务逻辑的处理。你可以创建一个接口和对应的实现类。

定义一个服务接口 UserService.java

package com.example.myproject;

import org.springframework.stereotype.Service;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;

@Service
public interface UserService {
    List<User> getAllUsers();
    Optional<User> getUserByName(String name);
    User saveUser(User user);
    void deleteUser(Long id);
}

实现服务接口 UserService.java

package com.example.myproject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;

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

    @Override
    public Optional<User> getUserByName(String name) {
        return userRepository.findByName(name);
    }

    @Override
    public User saveUser(User user) {
        return userRepository.save(user);
    }

    @Override
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

事务管理

在 Spring Boot 中,可以使用 @Transactional 注解来管理事务。事务管理确保数据的一致性和完整性。

定义一个带有事务管理的服务类 TransactionalService.java

package com.example.myproject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class TransactionalService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void saveUsers(List<User> users) {
        users.forEach(user -> userRepository.save(user));
    }
}

创建一个控制器来调用事务服务 TransactionController.java

package com.example.myproject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/transaction")
public class TransactionController {
    @Autowired
    private TransactionalService transactionalService;

    @PostMapping("/save-users")
    public void saveUsers(@RequestBody List<User> users) {
        transactionalService.saveUsers(users);
    }
}
RESTful API设计与测试

设计RESTful API

RESTful API 是一种设计风格,它符合 REST(Representational State Transfer)架构约束。RESTful API 主要用于 Web 服务,强调资源的请求和响应。

定义资源

资源通常是名词,如用户(users)、帖子(posts)等。每个资源都有一个唯一的 URL 地址。

定义操作

RESTful API 的操作通常基于 HTTP 方法,如 GET、POST、PUT、DELETE 等。

  • GET:获取资源
  • POST:创建资源
  • PUT:更新资源
  • DELETE:删除资源

示例:设计一个用户资源的 RESTful API

  • GET /users:获取所有用户
  • GET /users/{id}:根据 ID 获取指定用户
  • GET /users/{name}:根据名称获取指定用户
  • POST /users:创建新用户
  • PUT /users/{id}:更新指定用户
  • DELETE /users/{id}:删除指定用户

示例代码

定义一个用户控制器 UserController.java

package com.example.myproject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

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

    @GetMapping("/{id}")
    public Optional<User> getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @GetMapping("/{name}")
    public Optional<User> getUserByName(@PathVariable String name) {
        return userService.getUserByName(name);
    }

    @PostMapping
    public User saveUser(@RequestBody User user) {
        return userService.saveUser(user);
    }

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userService.saveUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

使用Postman进行测试

Postman 是一个流行的 API 测试工具,可以用来测试 RESTful API。

安装 Postman

你可以从官网下载 Postman,并按照提示安装。

测试 GET 请求

  1. 打开 Postman,选择 GET 方法。
  2. 输入 http://localhost:8080/users
  3. 点击 Send,查看返回的所有用户数据。

测试 POST 请求

  1. 打开 Postman,选择 POST 方法。
  2. 输入 http://localhost:8080/users
  3. 选择 Body 标签,选择 raw 标签,选择 JSON 格式。
  4. 输入 JSON 数据,如 {"name": "John Doe", "email": "john.doe@example.com"}
  5. 点击 Send,查看返回的用户数据。

测试 PUT 请求

  1. 打开 Postman,选择 PUT 方法。
  2. 输入 http://localhost:8080/users/1(假设 ID 为 1 的用户存在)。
  3. 选择 Body 标签,选择 raw 标签,选择 JSON 格式。
  4. 输入 JSON 数据,如 {"name": "John Doe Updated", "email": "john.doe.updated@example.com"}
  5. 点击 Send,查看返回的用户数据。

测试 DELETE 请求

  1. 打开 Postman,选择 DELETE 方法。
  2. 输入 http://localhost:8080/users/1(假设 ID 为 1 的用户存在)。
  3. 点击 Send,查看返回的是否删除成功。

通过这些步骤,你可以全面地测试你的 RESTful API,确保每个功能都能正常工作。

总结

本文详细介绍了如何使用 Spring Boot 框架进行项目开发,包括环境搭建、常用注解和配置、控制器的使用、实体类与数据库交互、服务层的实现,以及 RESTful API 的设计与测试。通过本文的学习,你可以快速上手 Spring Boot 开发,并构建出高效、稳定的 Web 应用程序。如果你有任何问题或需要进一步的帮助,可以参考 慕课网 提供的教程和文档。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消