springboot基础篇

一、SpringBoot 概述

  1. 是什么 SpringBoot 是 Spring 官方的子项目,用于快速、极简地开发 Spring 应用
  2. 解决了什么问题
    • 传统 Spring:依赖多、配置复杂、XML 繁琐、部署麻烦。
    • SpringBoot:约定大于配置,自动配置、自动依赖管理、内嵌服务器。
  3. 核心价值 让开发者只写业务代码,不用管框架整合、环境搭建、配置编写

二、SpringBoot 三大核心特性

1. 起步依赖(Starter)

  • 本质 :一个 Maven 坐标,整合了实现某功能所需的所有依赖
  • 作用:不用手动导入一堆 jar,避免版本冲突。
  • 常用示例
    • spring-boot-starter-web:开发 Web 项目(SpringMVC + Tomcat)
    • mybatis-spring-boot-starter:整合 MyBatis
    • spring-boot-starter-data-redis:整合 Redis

2. 自动配置

  • 原理 :项目启动后,自动把常用 Bean 注册到 IOC 容器
  • 无需手动配置:DispatcherServlet、DataSource、SqlSessionFactory 等。
  • 原则:约定大于配置。

3. 其他重要特性

  • 内嵌 Tomcat/Jetty,直接运行 jar 包,不用打 war 包
  • 支持 application.properties / application.yml 配置,完全不用 XML
  • 外部化配置,方便切换环境(开发 / 测试 / 生产)。

三、SpringBoot 开发步骤(标准流程)

  1. 创建 Maven 项目(JDK 17+,打包方式 jar)
  2. 引入父工程与起步依赖
  3. 编写 Controller
  4. 编写启动类
  5. 运行 main 方法启动

四、SpringBoot 全注解详解(最重点)

下面是 PPT 里全部常用注解,每个都给你解释清楚:

一、启动类核心注解

1. @SpringBootApplication

作用:SpringBoot 启动类标配,三合一注解

  • @SpringBootConfiguration(配置类)
  • @EnableAutoConfiguration(开启自动配置)
  • @ComponentScan(组件扫描)

案例

java

运行

复制代码
// 启动类:必须放在根包下
@SpringBootApplication
public class SpringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
}

二、Web 层注解

2. @RestController

作用:@Controller + @ResponseBody,返回 JSON / 字符串,不跳转页面

案例

java

运行

复制代码
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "Hello SpringBoot!";
    }
}

3. @RequestMapping / @GetMapping / @PostMapping

作用:绑定请求路径与方法

案例

java

运行

复制代码
@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/get")   // 只处理GET
    public String get(){
        return "get请求";
    }

    @PostMapping("/add")  // 只处理POST
    public String add(){
        return "add请求";
    }
}

三、IOC 容器 Bean 注册注解

4. @Component

作用:通用 Bean 注解,把类交给 Spring 管理

案例

java

运行

复制代码
@Component
public class MyUtil {
    public void test(){
        System.out.println("工具类方法");
    }
}

5. @Controller

作用:控制层专用,@Component 衍生

案例

java

运行

复制代码
@Controller
public class IndexController {
    // 页面跳转用
}

6. @Service

作用:业务逻辑层专用

案例

java

运行

复制代码
@Service
public class UserService {
    public void addUser(){
        System.out.println("添加用户");
    }
}

7. @Repository

作用:数据访问层(DAO/Mapper)专用

案例

java

运行

复制代码
@Repository
public class UserDao {
    // 数据库操作
}

四、配置类注解

  • @Component = 把这个类变成 Bean
  • @Bean = 把这个方法返回的对象变成 Bean
  • 自己的类用 Component,第三方类用 Bean

@Import

不想加注解、不想写 @Bean → 直接扔进去 SpringBoot 自动配置、starter 底层全靠它!

8. @Configuration

作用:标记为配置类,替代 XML

案例

java

运行

复制代码
@Configuration
public class MyConfig {
    // 配置内容
}

9. @Bean

作用 :将方法返回值注册为 Bean,用于第三方类

案例

java

运行

复制代码
@Configuration
public class MyConfig {
    // 注册一个第三方Bean
    @Bean
    public Random random(){
        return new Random();
    }
}

10. @Import

作用:快速导入配置类 / 普通类到容器

案例

java

运行

复制代码
@SpringBootApplication
@Import(MyConfig.class) // 导入配置
public class SpringbootApplication {
}

五、配置文件读取注解

11. @Value

作用 :读取配置文件单个属性

application.yml

yaml

复制代码
email:
  user: test@qq.com

案例

java

运行

复制代码
@Component
public class EmailUtil {
    @Value("${email.user}")
    private String user;

    public void print(){
        System.out.println(user);
    }
}

12. @ConfigurationProperties

作用批量绑定配置文件属性(企业最常用)

application.yml

yaml

复制代码
email:
  user: test@qq.com
  code: 123456
  host: smtp.qq.com

案例

java

运行

复制代码
@Component
@ConfigurationProperties(prefix = "email")
public class EmailProperties {
    // 名称必须和配置文件一致
    private String user;
    private String code;
    private String host;

    // 必须生成 getter/setter
    public String getUser() {return user;}
    public void setUser(String user) {this.user = user;}
    public String getCode() {return code;}
    public void setCode(String code) {this.code = code;}
    public String getHost() {return host;}
    public void setHost(String host) {this.host = host;}
}

六、MyBatis 整合注解

13. @Mapper

作用:标记 MyBatis 的 Mapper 接口,生成代理对象

案例

java

运行

复制代码
@Mapper
public interface UserMapper {
    @Select("select * from user where id=#{id}")
    User findById(Integer id);
}

14. @MapperScan

作用:批量扫描 Mapper 接口(启动类上用)

案例

java

运行

复制代码
@SpringBootApplication
@MapperScan("com.itheima.mapper")
public class SpringbootApplication {
}

七、条件注册注解(自动配置核心)

15. @ConditionalOnClass

作用 :类路径下存在指定类时才注册 Bean

案例

java

运行

复制代码
@Configuration
@ConditionalOnClass(RedisTemplate.class) // 有这个类才生效
public class RedisConfig {
    @Bean
    public RedisTemplate redisTemplate(){
        return new RedisTemplate();
    }
}

16. @ConditionalOnMissingBean

作用 :容器中没有该 Bean 时才注册(保证唯一)

案例

java

运行

复制代码
@Bean
@ConditionalOnMissingBean
public UserService userService(){
    return new UserService();
}

17. @ConditionalOnProperty

作用 :配置文件存在指定属性时才生效

案例

java

运行

复制代码
@Bean
@ConditionalOnProperty(prefix = "email", name = "enable", havingValue = "true")
public EmailUtil emailUtil(){
    return new EmailUtil();
}

yml 配置

yaml

复制代码
email:
  enable: true

18. @AutoConfiguration

作用 :标记自动配置类,用于自定义 Starter

案例

java

运行

复制代码
@AutoConfiguration
public class MyAutoConfiguration {
    @Bean
    public MyBean myBean(){
        return new MyBean();
    }
}

八、完整小案例:把所有注解串起来

java

运行

复制代码
// 1.启动注解
@SpringBootApplication
@MapperScan("com.itheima.mapper")
public class Application {
    public static void main(String[] args) {SpringApplication.run(Application.class,args);}

    // 2.Bean注解
    @Bean
    public Random random(){return new Random();}
}

// 3.配置绑定
@Component
@ConfigurationProperties(prefix = "server")
class ServerProps{
    private int port;
    // getter/setter
}

// 4.Web层
@RestController
@RequestMapping("/test")
class TestController{
    @Autowired
    private UserService userService;

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

// 5.业务层
@Service
class UserService{
    @Autowired
    private UserMapper userMapper;
}

// 6.Dao层
@Mapper
interface UserMapper{
    @Select("select * from user where id=1")
    User findOne();
}

// 7.通用组件
@Component
class MyUtil{}

// 8.配置类
@Configuration
class Config{
    @Bean
    @ConditionalOnMissingBean
    public DataSource dataSource(){return new DruidDataSource();}
}

九、注解使用速记(必背)

  1. 启动类:@SpringBootApplication
  2. Web 接口:@RestController、@GetMapping/@PostMapping
  3. 自己写的类:@Controller、@Service、@Component
  4. 第三方类:@Configuration + @Bean
  5. 读取配置:单个用 @Value,批量用 @ConfigurationProperties
  6. MyBatis:@Mapper / @MapperScan
  7. 条件注册:@ConditionalOnXXX 系列
  8. 自动配置:@AutoConfiguration

五、配置文件详解(properties /yml)

1. 两种格式

  1. application.properties

    properties

    复制代码
    server.port=9090
    spring.datasource.url=jdbc:mysql:///test
  2. application.yml(推荐)

    yaml

    复制代码
    server:
      port: 9090
    spring:
      datasource:
        url: jdbc:mysql:///test

2. YML 语法规则

  • 大小写敏感
  • 缩进用空格,不能用 Tab
  • key 与 value 之间必须加空格
  • 层级结构清晰,易读

3. 配置读取方式

  1. @Value:单个值读取
  2. @ConfigurationProperties:批量绑定(企业优先用)

六、SpringBoot 整合 MyBatis(标准步骤)

  1. 引入 starter xml

    复制代码
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>
  2. 配置数据源(yml) yaml

    复制代码
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/dbname
        username: root
        password: 1234
  3. 编写 Mapper 接口 + @Mapper

  4. Service 注入 Mapper 使用

  5. 无需手动配置 SqlSessionFactory、MapperScanner

SpringBoot 整合 MyBatis 完整案例(5 步完整版)

整体结构(先看一眼)

plaintext

复制代码
com.itheima
├── SpringbootMybatisApplication.java  启动类
├── controller
│   └── UserController.java            控制层
├── service
│   ├── UserService.java               业务接口
│   └── impl
│       └── UserServiceImpl.java       业务实现
├── mapper
│   └── UserMapper.java                 数据访问层
└── pojo
    └── User.java                       实体类
resources
└── application.yml                    配置文件

第 1 步:创建项目,导入依赖(pom.xml)

文件:pom.xml

xml

复制代码
<!-- 父工程 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.2</version>
</parent>

<dependencies>
    <!-- web起步依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- mybatis起步依赖 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>

    <!-- mysql驱动 -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

第 2 步:编写配置文件(application.yml)

文件:resources/application.yml

yaml

复制代码
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
    username: root
    password: 1234

# 实体类别名包(可选)
mybatis:
  type-aliases-package: com.itheima.pojo

第 3 步:编写实体类

文件:com.itheima.pojo.User.java

java

运行

复制代码
public class User {
    private Integer id;
    private String name;
    private Integer age;

    // getter、setter、toString
    public Integer getId() {return id;}
    public void setId(Integer 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;}

    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "', age=" + age + "}";
    }
}

第 4 步:编写 Mapper 层

文件:com.itheima.mapper.UserMapper.java

java

运行

复制代码
import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Mapper;

@Mapper // 标记为MyBatis的Mapper接口
public interface UserMapper {

    // 根据id查询用户
    @Select("select * from user where id = #{id}")
    User findById(Integer id);
}

第 5 步:编写 Service 层

5.1 业务接口

文件:com.itheima.service.UserService.java

java

运行

复制代码
import com.itheima.pojo.User;

public interface UserService {
    User findById(Integer id);
}

5.2 业务实现类

文件:com.itheima.service.impl.UserServiceImpl.java

java

运行

复制代码
import com.itheima.mapper.UserMapper;
import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service // 交给Spring管理
public class UserServiceImpl implements UserService {

    // 注入Mapper
    @Autowired
    private UserMapper userMapper;

    @Override
    public User findById(Integer id) {
        return userMapper.findById(id);
    }
}

第 6 步:编写 Controller 层(对外接口)

文件:com.itheima.controller.UserController.java

java

运行

复制代码
import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    // 注入Service
    @Autowired
    private UserService userService;

    @GetMapping("/user/{id}")
    public User findById(@PathVariable Integer id) {
        return userService.findById(id);
    }
}

第 7 步:编写启动类

文件:com.itheima.SpringbootMybatisApplication.java

java

运行

复制代码
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.itheima.mapper") // 扫描Mapper包
public class SpringbootMybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisApplication.class, args);
    }
}

第 8 步:建表 SQL(自己在数据库执行)

sql

复制代码
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20),
    age INT
);
INSERT INTO user VALUES (1,'张三',18);

第 9 步:测试

启动项目,访问:http://localhost:8080/user/1

返回:

json

复制代码
{"id":1,"name":"张三","age":18}
  1. Service 有实现类 → Spring 自动管 → 不用扫描
  2. Mapper 没有实现类 → Spring 管不了 → 必须 MyBatis 扫描
  3. 所以 Mapper 必须加 @Mapper 或 @MapperScan

全套注解总结(这个案例里用到的)

  • @SpringBootApplication:启动类
  • @Mapper:Mapper 接口
  • @MapperScan:扫描 Mapper
  • @Service:业务层
  • @RestController:控制层
  • @Autowired:依赖注入
  • @GetMapping:GET 请求
  • @PathVariable:路径参数

七、Bean 管理(Spring 核心)

1. Bean 注册方式

  1. 层注解:@Controller/@Service/@Repository/@Component(自己写的类)
  2. @Bean:第三方类(Druid、Redis、工具类)
  3. @Import:快速导入配置
  4. 自动配置:框架内部自动注册

2. Bean 扫描规则

  • 默认:启动类包及其子包
  • 不在包内 → 无法被扫描 → 无法成为 Bean

八、自动配置原理(必须理解)

  1. @SpringBootApplication → 开启自动配置
  2. @EnableAutoConfiguration → 导入自动配置选择器
  3. 读取:META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  4. 根据 @Conditional 条件判断,满足就自动注册 Bean
  5. 最终:DispatcherServlet、DataSource 等自动放入 IOC

一句话:自动配置就是按条件自动装 Bean


九、自定义 Starter(了解)

  1. 分为两个模块:
    • autoconfigure:写自动配置、条件、绑定
    • starter:只管理依赖,引入 autoconfigure
  2. META-INF/spring/xxx.imports 注册自动配置类
  3. 其他项目引入 starter 即可直接使用

十、SpringBoot 最核心总结(必须背)

  1. 两大核心:起步依赖(简化依赖) + 自动配置(简化配置)
  2. 启动类必须放在根包
  3. 自己的类用:@Controller/@Service/@Component
  4. 第三方类用:@Bean
  5. 配置读取:单个用 @Value,批量用 @ConfigurationProperties
  6. MyBatis 整合:starter + 数据源配置 + @Mapper/@MapperScan
  7. 运行方式:main 方法 或 java -jar xxx.jar
相关推荐
砚底藏山河2 小时前
python、JavaScript 、JAVA,定制化数据服务,助力业务高效落地
java·javascript·python
qq_452396232 小时前
第六篇:《JMeter逻辑控制器:循环、条件和交替执行》
android·java·jmeter
humcomm2 小时前
Java 新特性2026年5月速览
java·开发语言
luck_bor2 小时前
集合进阶(Collections Set List)
java
敲敲千反田2 小时前
Spring AI
java·人工智能·spring
拽着尾巴的鱼儿2 小时前
spring 动态代理
java·后端·spring
gf13211112 小时前
python_【更新已发送的消息卡片】
java·前端·python
WL_Aurora2 小时前
Java字符输入全攻略
java·开发语言
Hello.Reader3 小时前
算法基础(十三)——随机算法为什么有时主动引入随机性
java·数据库·算法