手记

Springboot框架学习入门指南

概述

Spring Boot框架学习入门涵盖了Spring Boot的基本概念、优势和核心概念,介绍了从开发环境搭建到创建第一个应用的全过程,包括配置文件的使用和外部化配置的引入。文章详细讲解了Spring Boot的核心注解和数据访问与存储的实现方法。

Spring Boot简介

Spring Boot是什么

Spring Boot是由Pivotal团队提供的基于Spring平台的全新框架,旨在简化Spring应用的开发过程,使开发人员能够快速、便捷地创建独立、生产级别的基于Spring的应用程序。Spring Boot提供了一种无需配置大量XML文件即可快速创建Spring应用的方法。它通过约定优于配置的原则,极大地减少了配置的复杂性,使开发者可以专注于业务逻辑的实现。

Spring Boot的优势

  1. 自动配置:Spring Boot通过自动配置的方式,减少了配置文件的编写工作,只需要简单的标注即可完成配置。
  2. 内嵌Servlet容器:Spring Boot可以内嵌Tomcat、Jetty或Undertow等Servlet容器,从而简化部署流程。
  3. 起步依赖:通过起步依赖,可以直接引入多个依赖项,简化了项目依赖管理。
  4. 嵌入式应用打包:Spring Boot支持将应用打包为可执行的JAR文件,包含所有依赖项,便于部署。
  5. 健康检查与指标:内置了健康检查、指标等特性,便于监控和管理应用。
  6. 统一入口:提供了统一的入口配置,简化了应用的启动过程。

Spring Boot的核心概念

Spring Boot的核心概念包括自动配置、配置文件、起步依赖、starter等。

  1. 自动配置:Spring Boot通过@EnableAutoConfiguration注解实现了自动配置功能。它会根据类路径下的依赖,自动配置项目中的各种配置,减少了手动配置的工作量。
  2. 配置文件:Spring Boot支持多种配置文件格式,包括application.propertiesapplication.yml。这些文件用于配置各种属性,例如端口号、数据库连接、日志配置等。
  3. 起步依赖:起步依赖是Spring Boot提供的预定义的依赖集。开发者只需要在pom.xmlbuild.gradle文件中声明一个或多个起步依赖,Spring Boot就会自动导入相关的依赖和配置。
  4. starter:Spring Boot的起步依赖通常以spring-boot-starter为前缀,例如spring-boot-starter-web用于创建Web应用,spring-boot-starter-data-jpa用于数据库操作等。
开发环境搭建

安装JDK

在开始开发Spring Boot应用之前,首先需要安装Java开发工具包(JDK)。以下是安装JDK的步骤:

  1. 下载JDK:访问Oracle官方网站或OpenJDK下载页面,选择适合的操作系统版本进行下载。
  2. 安装JDK:运行下载的安装程序并按照提示完成安装。
  3. 设置环境变量:安装完成后,需要设置环境变量。在Windows系统中,可以通过“系统属性”->“高级系统设置”->“环境变量”来设置JAVA_HOMEPATH变量。在Linux或Mac系统中,可以通过编辑~/.bashrc~/.zshrc文件来设置环境变量。

示例代码(设置环境变量):

# Windows
setx JAVA_HOME "C:\Program Files\Java\jdk-17.0.1"
setx PATH "%JAVA_HOME%\bin;%PATH%"

# Linux/Mac
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

安装IDE(如IntelliJ IDEA或Spring Tool Suite)

推荐使用IntelliJ IDEA作为开发工具,以下是安装步骤:

  1. 下载IntelliJ IDEA:访问JetBrains官方网站或Maven Central仓库下载IntelliJ IDEA。
  2. 安装IntelliJ IDEA:运行下载的安装程序并按照提示完成安装。
  3. 配置IntelliJ IDEA:安装完成后,可以选择安装插件,例如Lombok插件,以简化开发过程。

示例代码(设置环境变量):

# Windows
setx JAVA_HOME "C:\Program Files\Java\jdk-17.0.1"
setx PATH "%JAVA_HOME%\bin;%PATH%"

# Linux/Mac
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

创建Spring Boot项目

创建Spring Boot项目有多种方式,可以通过Spring Initializr或IDE进行创建。以下是使用Spring Initializr创建项目的步骤:

  1. 访问Spring Initializr:访问Spring Initializr官方网站(https://start.spring.io/)。
  2. 填写项目信息:选择项目依赖(例如Web、JPA、Thymeleaf等)、项目语言(Java)、打包方式(Maven或Gradle)等信息。
  3. 下载项目:点击“Generate”按钮,下载项目压缩包。
  4. 解压项目:将下载的压缩包解压到指定目录。
  5. 导入项目到IDE:将解压后的项目导入到IntelliJ IDEA或其他IDE中,进行开发。
第一个Spring Boot应用

创建Spring Boot项目

创建Spring Boot项目的方法已经在上一部分介绍过了,可以参考创建Spring Boot项目的步骤。

编写第一个Spring Boot应用

编写第一个Spring Boot应用需要创建一个简单的控制器类,用于处理HTTP请求。

  1. 创建控制器类:在项目中创建一个控制器类,例如HelloController
  2. 编写控制器方法:在控制器类中定义一个方法,用于处理HTTP GET请求。

示例代码(HelloController.java):

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

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

运行并测试应用

  1. 运行Spring Boot应用:在IDE中运行Spring Boot应用。在IntelliJ IDEA中,可以使用“Run”菜单或快捷键Ctrl+R来运行应用。
  2. 启动应用:运行后,控制台会输出启动日志,显示应用已经成功启动并监听某个端口(默认是8080端口)。
  3. 测试应用:使用浏览器或Postman等工具访问http://localhost:8080/hello,查看应用是否正常运行。

示例代码(运行应用):

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);
    }
}
Spring Boot常用注解介绍

@SpringBootApplication

@SpringBootApplication是Spring Boot中的核心注解,用于启用自动配置和组件扫描。它相当于组合了@Configuration@EnableAutoConfiguration@ComponentScan三个注解。

  1. @Configuration:表示该类是一个配置类,可以包含@Bean注解的方法。
  2. @EnableAutoConfiguration:启用自动配置功能,Spring Boot会根据类路径下的依赖自动配置应用。
  3. @ComponentScan:启用组件扫描,扫描指定包路径下的组件。

示例代码(使用@SpringBootApplication):

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);
    }
}

@Controller, @Service, @Repository, @Component

这些注解主要用于分层应用的设计,帮助开发者明确各个组件的职责。

  1. @Controller:用于标记Spring MVC中的控制器类。
  2. @Service:用于标记业务逻辑层的服务类。
  3. @Repository:用于标记数据访问层的持久化类。
  4. @Component:通用的组件注解,适用于其他场景。

示例代码(使用@Controller、@Service、@Repository、@Component):

import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class UserController {
    @GetMapping("/users")
    public String getUsers() {
        return "Users List";
    }
}

@Service
public class UserService {
    public String getUserDetails() {
        return "User Details";
    }
}

@Repository
public class UserRepository {
    public String getUserFromDatabase() {
        return "User from Database";
    }
}

@Component
public class UtilityComponent {
    public String getUtilityMessage() {
        return "Utility Message";
    }
}

@RestController和@RequestMapping

@RestController注解用于标记控制器类,表示该类中的所有方法都将返回纯数据对象,而不是视图对象。@RequestMapping注解用于映射HTTP请求到控制器方法。

  1. @RestController:组合了@Controller@ResponseBody注解,用于处理RESTful风格的请求。
  2. @RequestMapping:用于映射HTTP请求到控制器方法,可以指定请求类型(GET、POST等)和URL路径。

示例代码(使用@RestController和@RequestMapping):

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

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot!";
    }
}
数据访问与存储

使用Spring Data JPA进行数据库操作

Spring Data JPA是Spring Data的一部分,提供了一套简化数据访问的API,支持多种ORM(Object-Relational Mapping)框架,例如JPA(Java Persistence API)。

  1. 添加依赖:在pom.xmlbuild.gradle文件中添加Spring Data JPA的起步依赖。
  2. 配置数据源:在application.propertiesapplication.yml文件中配置数据源信息。
  3. 定义实体类:使用@Entity注解定义实体类,可以使用@Id注解来标记主键字段。
  4. 定义仓库接口:使用@Repository注解定义仓库接口,继承JpaRepository接口。

示例代码(使用Spring Data JPA):

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.JpaRepository;

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

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

    // getters and setters
}

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

连接数据库并编写简单的CRUD操作

  1. 配置数据源:在application.propertiesapplication.yml文件中配置数据库连接信息。
  2. 定义实体类:定义实体类及其对应的仓库接口。
  3. 编写CRUD操作:在服务类中编写CRUD操作。

示例代码(配置数据源):

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

示例代码(编写CRUD操作):

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

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

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

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

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

    public User updateUser(Long id, User user) {
        User existingUser = userRepository.findById(id).orElse(null);
        if (existingUser != null) {
            existingUser.setName(user.getName());
            existingUser.setEmail(user.getEmail());
            return userRepository.save(existingUser);
        }
        return null;
    }

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

使用Spring Boot实现事务管理

Spring Boot内置了对事务管理的支持,可以通过@Transactional注解来控制事务的提交与回滚。

  1. 添加依赖:确保已经添加了Spring Data JPA的依赖。
  2. 定义事务注解:在服务类的方法上使用@Transactional注解。
  3. 编写事务操作:编写需要事务支持的业务逻辑。

示例代码(使用事务管理):

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

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

    @Transactional
    public void createUserAndLog(User user) {
        userRepository.save(user);
        // 模拟一个可能导致异常的操作
        int result = 1 / 0;
    }

    @Transactional
    public void updateUserAndLog(Long id, User user) {
        User existingUser = userRepository.findById(id).orElse(null);
        if (existingUser != null) {
            existingUser.setName(user.getName());
            existingUser.setEmail(user.getEmail());
            userRepository.save(existingUser);
            // 模拟一个可能导致异常的操作
            int result = 1 / 0;
        }
    }
}
配置文件和外部化配置

application.properties和application.yml的使用

Spring Boot支持多种配置文件格式,例如application.propertiesapplication.yml。这些文件用于配置各种属性,例如端口号、数据库连接、日志配置等。

  1. 配置文件位置:配置文件通常放在src/main/resources目录下。
  2. 配置文件示例application.propertiesapplication.yml支持键值对的形式进行配置。

示例代码(application.properties):

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

示例代码(application.yml):

# application.yml
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update

外部化配置的引入

Spring Boot支持将配置文件外部化,可以通过环境变量、命令行参数、外部配置文件等方式引入配置。

  1. 环境变量:可以通过环境变量覆盖配置文件中的属性。
  2. 命令行参数:可以通过命令行参数传递配置信息。
  3. 外部配置文件:可以通过--spring.config.location参数指定外部配置文件的位置。

示例代码(环境变量):

# 使用环境变量覆盖配置
export SPRING_DATASOURCE_URL=jdbc:mysql://external-host:3306/mydb

示例代码(命令行参数):

# 使用命令行参数传递配置
java -jar myapp.jar --server.port=8081

示例代码(外部配置文件):

# 指定外部配置文件的位置
java -jar myapp.jar --spring.config.location=/path/to/external/config/application.properties

环境变量的使用

Spring Boot支持使用环境变量来配置属性,可以通过${}语法引用环境变量。

  1. 定义环境变量:在操作系统中定义环境变量。
  2. 引用环境变量:在配置文件中使用${}语法引用环境变量。

示例代码(引用环境变量):

# application.properties
server.port=${PORT:8080}
spring.datasource.url=${DB_URL:jdbc:mysql://localhost:3306/mydb}

示例代码(环境变量定义):

# 定义环境变量
export PORT=8081
export DB_URL=jdbc:mysql://external-host:3306/mydb
0人推荐
随时随地看视频
慕课网APP