一、SpringBoot 概述
- 是什么 SpringBoot 是 Spring 官方的子项目,用于快速、极简地开发 Spring 应用。
- 解决了什么问题
- 传统 Spring:依赖多、配置复杂、XML 繁琐、部署麻烦。
- SpringBoot:约定大于配置,自动配置、自动依赖管理、内嵌服务器。
- 核心价值 让开发者只写业务代码,不用管框架整合、环境搭建、配置编写
二、SpringBoot 三大核心特性
1. 起步依赖(Starter)
- 本质 :一个 Maven 坐标,整合了实现某功能所需的所有依赖。
- 作用:不用手动导入一堆 jar,避免版本冲突。
- 常用示例 :
spring-boot-starter-web:开发 Web 项目(SpringMVC + Tomcat)mybatis-spring-boot-starter:整合 MyBatisspring-boot-starter-data-redis:整合 Redis
2. 自动配置
- 原理 :项目启动后,自动把常用 Bean 注册到 IOC 容器。
- 无需手动配置:DispatcherServlet、DataSource、SqlSessionFactory 等。
- 原则:约定大于配置。
3. 其他重要特性
- 内嵌 Tomcat/Jetty,直接运行 jar 包,不用打 war 包。
- 支持
application.properties/application.yml配置,完全不用 XML。 - 外部化配置,方便切换环境(开发 / 测试 / 生产)。
三、SpringBoot 开发步骤(标准流程)
- 创建 Maven 项目(JDK 17+,打包方式 jar)
- 引入父工程与起步依赖
- 编写 Controller
- 编写启动类
- 运行 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();}
}
九、注解使用速记(必背)
- 启动类:@SpringBootApplication
- Web 接口:@RestController、@GetMapping/@PostMapping
- 自己写的类:@Controller、@Service、@Component
- 第三方类:@Configuration + @Bean
- 读取配置:单个用 @Value,批量用 @ConfigurationProperties
- MyBatis:@Mapper / @MapperScan
- 条件注册:@ConditionalOnXXX 系列
- 自动配置:@AutoConfiguration
五、配置文件详解(properties /yml)
1. 两种格式
-
application.properties
properties
server.port=9090 spring.datasource.url=jdbc:mysql:///test -
application.yml(推荐)
yaml
server: port: 9090 spring: datasource: url: jdbc:mysql:///test
2. YML 语法规则
- 大小写敏感
- 缩进用空格,不能用 Tab
- key 与 value 之间必须加空格
- 层级结构清晰,易读
3. 配置读取方式
- @Value:单个值读取
- @ConfigurationProperties:批量绑定(企业优先用)
六、SpringBoot 整合 MyBatis(标准步骤)
-
引入 starter xml
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> -
配置数据源(yml) yaml
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/dbname username: root password: 1234 -
编写 Mapper 接口 + @Mapper
-
Service 注入 Mapper 使用
-
无需手动配置 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}
- Service 有实现类 → Spring 自动管 → 不用扫描
- Mapper 没有实现类 → Spring 管不了 → 必须 MyBatis 扫描
- 所以 Mapper 必须加 @Mapper 或 @MapperScan
全套注解总结(这个案例里用到的)
@SpringBootApplication:启动类@Mapper:Mapper 接口@MapperScan:扫描 Mapper@Service:业务层@RestController:控制层@Autowired:依赖注入@GetMapping:GET 请求@PathVariable:路径参数
七、Bean 管理(Spring 核心)
1. Bean 注册方式
- 层注解:@Controller/@Service/@Repository/@Component(自己写的类)
- @Bean:第三方类(Druid、Redis、工具类)
- @Import:快速导入配置
- 自动配置:框架内部自动注册
2. Bean 扫描规则
- 默认:启动类包及其子包
- 不在包内 → 无法被扫描 → 无法成为 Bean
八、自动配置原理(必须理解)
@SpringBootApplication→ 开启自动配置@EnableAutoConfiguration→ 导入自动配置选择器- 读取:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports - 根据 @Conditional 条件判断,满足就自动注册 Bean
- 最终:DispatcherServlet、DataSource 等自动放入 IOC
一句话:自动配置就是按条件自动装 Bean。
九、自定义 Starter(了解)
- 分为两个模块:
- autoconfigure:写自动配置、条件、绑定
- starter:只管理依赖,引入 autoconfigure
- 在
META-INF/spring/xxx.imports注册自动配置类 - 其他项目引入 starter 即可直接使用
十、SpringBoot 最核心总结(必须背)
- 两大核心:起步依赖(简化依赖) + 自动配置(简化配置)
- 启动类必须放在根包下
- 自己的类用:
@Controller/@Service/@Component - 第三方类用:
@Bean - 配置读取:单个用
@Value,批量用@ConfigurationProperties - MyBatis 整合:starter + 数据源配置 +
@Mapper/@MapperScan - 运行方式:main 方法 或
java -jar xxx.jar