1. Spring Boot简介
Spring Boot是Spring框架的扩展,它消除了设置Spring应用程序所需的大量样板配置,使得开发Spring应用变得更加快速和简单。
核心特性
- 自动配置:Spring Boot能够自动配置Spring应用,根据类路径上的jar包、属性等自动配置Spring Bean
- 起步依赖:简化Maven/Gradle配置,提供针对常见场景的依赖描述符
- 嵌入式服务器:内置Tomcat、Jetty或Undertow,无需部署WAR文件
- Actuator:提供生产级特性,帮助监控和管理应用
- 无代码生成和XML配置:尽量避免使用XML配置,提倡使用Java配置和注解
优势
- 简化配置,专注于业务逻辑
- 提供可用于生产环境的非功能特性
- 大量第三方集成,轻松整合各种框架
- 内嵌服务器,简化部署
- 丰富的CLI工具支持
2. Spring Boot实现Spring MVC
Spring Boot通过自动配置简化了Spring MVC的使用,无需大量XML配置。
基本使用步骤
- 添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 创建控制器
@Controller
public class HomeController {@GetMapping("/")public String home(Model model) {model.addAttribute("message", "Hello, Spring Boot!");return "home";}
}
- 添加主应用类
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
自动配置内容
- DispatcherServlet配置
- MessageConverter配置
- 静态资源映射
- 视图解析器配置
- Web相关组件配置
自定义MVC配置
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");}@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {registry.jsp("/WEB-INF/views/", ".jsp");}
}
3. 配置文件顺序及类型讲解
Spring Boot支持多种配置文件类型和位置,按优先级顺序进行加载。
配置文件类型
-
properties文件:键值对形式
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/test
-
YAML文件:层次化配置
server:port: 8080 spring:datasource:url: jdbc:mysql://localhost:3306/test
配置文件加载顺序(优先级由高到低)
- 命令行参数
- SPRING_APPLICATION_JSON环境变量
- java:comp/env的JNDI属性
- Java系统属性(System.getProperties())
- 操作系统环境变量
- RandomValuePropertySource
- jar包外profile-specific的application.yml或application.properties
- jar包内profile-specific的application.yml或application.properties
- jar包外的application.yml或application.properties
- jar包内的application.yml或application.properties
- @PropertySource注解
- 默认属性
Profile配置
- application-{profile}.properties/yml:特定环境配置
- 激活方式:
spring.profiles.active=dev
spring: profiles: active: dev
配置文件内引用属性
app.name=MyApp
app.description=${app.name} is a Spring Boot application
app:name: MyAppdescription: ${app.name} is a Spring Boot application
4. Spring Boot项目结构
Spring Boot推荐使用特定的项目结构,虽然不强制,但遵循这些约定可以获得最佳效果。
标准项目结构
src+- main| +- java| | +- com.example.myapp| | +- Application.java // 主应用类,包含main方法| | +- domain // 领域模型| | | +- Customer.java| | | +- CustomerRepository.java| | +- service // 业务逻辑层| | | +- CustomerService.java| | +- controller // Web控制器| | +- CustomerController.java| +- resources| +- static // 静态资源(CSS、JS、图片)| +- templates // 模板文件(Thymeleaf、FreeMarker等)| +- application.properties // 应用配置文件+- test+- java+- com.example.myapp+- ApplicationTests.java // 测试类
关键约定
- 主应用类通常放在其他类的根包中
- 配置类通常放在主应用类所在包或子包中
- 静态资源放在resources/static目录
- 模板文件放在resources/templates目录
- 配置文件放在resources根目录
@SpringBootApplication注解
组合了以下三个注解:
- @Configuration:标记类为配置类
- @EnableAutoConfiguration:启用自动配置
- @ComponentScan:开启组件扫描
5. Spring Boot整合MyBatis
Spring Boot与MyBatis整合非常简单,通过starter依赖可以快速配置。
添加依赖
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
配置数据源
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mydatabase?useSSL=falseusername: rootpassword: root
配置MyBatis
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.domainconfiguration:map-underscore-to-camel-case: true
创建实体类
@Data
public class User {private Long id;private String username;private String password;private String email;
}
创建Mapper接口
@Mapper
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User findById(Long id);@Insert("INSERT INTO users(username, password, email) VALUES(#{username}, #{password}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id")int insert(User user);
}
XML方式配置Mapper
<!-- src/main/resources/mapper/UserMapper.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><select id="findById" resultType="User">SELECT * FROM users WHERE id = #{id}</select><insert id="insert" useGeneratedKeys="true" keyProperty="id">INSERT INTO users(username, password, email) VALUES(#{username}, #{password}, #{email})</insert>
</mapper>
使用MapperScan
@SpringBootApplication
@MapperScan("com.e