# ssm - SpringBoot
# 1. SpringBoot 简介
SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来 简化 Spring 应用的初始搭建以及开发过程。
# 1.1. SpringBoot 快速入门

pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springboot-01-quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--指定了一个父工程,父工程中的东西在该工程中可以继承过来使用-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<!--JDK 的版本-->
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<!--该依赖就是我们在创建 SpringBoot 工程勾选的那个 Spring Web 产生的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--这个是单元测试的依赖,我们现在没有进行单元测试,所以这个依赖现在可以没有-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--这个插件是在打包时需要的,而这里暂时还没有用到-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Application.java:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
访问:
GET http://localhost:8080/books/2
# 1.2. SpringBoot 工程快速启动
由于我们在构建 SpringBoot 工程时已经在 pom.xml 中配置了如下插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
所以我们只需要使用 Maven 的 package 指令打包就会在 target 目录下生成对应的 Jar 包。
注意:该插件必须配置,不然打好的 jar 包也是有问题的。
进入 jar 包所在位置,在 命令提示符 中输入如下命令,即可启动项目
jar -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar
# 1.3. SpringBoot 概述
SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来 简化 Spring 应用的初始搭建以及开发过程。
大家已经感受了 SpringBoot 程序,回过头看看 SpringBoot 主要作用是什么,就是简化 Spring 的搭建过程和开发过程。
原始 Spring 环境搭建和开发存在以下问题:
- 配置繁琐
- 依赖设置繁琐
SpringBoot 程序优点恰巧就是针对 Spring 的缺点
- 自动配置。这个是用来解决
Spring程序配置繁琐的问题 - 起步依赖。这个是用来解决
Spring程序依赖设置繁琐的问题 - 辅助功能(内置服务器,...)。
- 我们在启动
SpringBoot程序时既没有使用本地的tomcat也没有使用tomcat插件,而是使用SpringBoot内置的服务器。
- 我们在启动
接下来我们来说一下 SpringBoot 的起步依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
spring-boot-starter-parent 依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.0</version>
</parent>
spring-boot-dependencies 里配置了“所有”技术的坐标及版本
<dependencies>
<!--该依赖就是我们在创建 SpringBoot 工程勾选的那个 Spring Web 产生的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
spring-boot-starter-web 配置了 web 技术涉及的依赖坐标
starter
SpringBoot中常见项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的
parent
- 所有
SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的 spring-boot-starter-parent(2.5.0)与spring-boot-starter-parent(2.4.6)共计57处坐标版本不同
实际开发
使用任意坐标时,仅书写 GAV 中的 G 和 A,V 由 SpringBoot 提供
- G:groupid
- A:artifactId
- V:version
如发生坐标错误,再指定version(要小心版本冲突)
# 1.4. 切换 web 服务器
切换 web 服务器就需要将默认的 tomcat 服务器给排除掉
<!-- 排除 tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加 jetty 起步依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
# 2. 配置文件
# 2.1. 配置文件格式
SpringBoot 提供了多种属性配置方式
application.properties
server.port=80
application.yml
server:
port: 81
application.yaml
server:
port: 82
注意:SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同而已。
优先级: application.properties > application.yml > application.yaml
# 2.2. yaml 格式
YAML(YAML Ain't Markup Language),一种数据序列化格式。
优点:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
YAML 文件扩展名:
.yml(主流).yaml
语法规则:
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键), 空格的个数并不重要,只要保证同层级的左侧对齐即可。
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
#表示注释
数组格式:
hobbies:
- game
- football
- basketball
# 2.3. yaml 配置文件数据读取
三种方式:
@Value读单个值- Environment 对象 读整个配置文件
- 自定义对象 读指定前缀的配置
配置文件:
server:
port: 80
lesson: SpringBoot
enterprise:
name: itcast
age: 16
tel: 4006184000
subject:
- Java
- 前端
- 大数据
@Value:
@RestController
@RequestMapping("books")
public class BookController {
@Value("${lesson}")
private String lesson;
@Value("${enterprise.name}")
private String enterprise_name;
@Value("${enterprise.subject[0]}")
private String enterprise_subject_0;
@GetMapping
public String getAll() {
System.out.println("lesson: " + lesson);
System.out.println("enterprise_name: " + enterprise_name);
System.out.println("enterprise_subject_0: " + enterprise_subject_0);
return "Hello, Spring MVC";
}
}
Environment 对象:
@RestController
@RequestMapping("books")
public class BookController {
@Autowired
private Environment env;
@GetMapping
public String getAll() {
System.out.println("lesson: " + env.getProperty("lesson"));
System.out.println("enterprise.age: " + env.getProperty("enterprise.age"));
System.out.println("enterprise.subject[1]: " + env.getProperty("enterprise.subject[1]"));
return "Hello, Spring MVC";
}
}
自定义对象:
package org.example.domain;
@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
private String name;
private int age;
private String tel;
private String[] subject;
// ... getters and setters
}
package org.example.controller;
@RestController
@RequestMapping("books")
public class BookController {
@Autowired
private Enterprise enterprise;
@GetMapping
public String getAll() {
System.out.println(enterprise);
return "Hello, Spring MVC";
}
}
测试:
GET http://localhost/books
# 2.4. 多环境配置
# 2.4.1. yaml 文件
在 application.yml 中使用 --- 来分割不同的配置
# 设置启用的环境
spring:
profiles:
active: test #表示使用的是开发环境的配置
# 通用配置
# ...
---
# 开发
spring:
profiles: dev #给开发环境起的名字
server:
port: 80
---
# 生产
spring:
profiles: pro #给生产环境起的名字
server:
port: 81
---
# 测试
spring:
profiles: test #给测试环境起的名字
server:
port: 82
# 2.4.2. properties 文件
为每个环境定义不同的配置文件
开发, application-dev.properties:
server.port=80
测试, application-test.properties:
server.port=81
SpringBoot 只会默认加载名为 application.properties 的配置文件,
所以需要在 application.properties 配置文件中设置启用哪个配置文件
application.properties:
spring.profiles.active=pro
# 2.4.3. 命令行启动参数设置
在 CMD 中运行 jar 时,可以通过命令参数 临时修改 配置文件中的配置:
java –jar xxx.jar –-spring.profiles.active=test
java –jar xxx.jar –-server.port=88
java –jar xxx.jar –-server.port=88 –-spring.profiles.active=test
配置的优先级:
- https://docs.spring.io/spring-boot/reference/features/external-config.html#features.external-config
# 2.4.4. SpringBoot 使用 maven 的多环境配置
说明:
- 在 pom.xml 定义多套环境的 变量,该变量可以在 application.yml 中使用
pom.xml
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<properties>
<active.profile>dev</active.profile>
</properties>
<!--设定是否为默认启动环境-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<active.profile>test</active.profile>
</properties>
</profile>
</profiles>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<encoding>UTF-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
application.yml:
# 设置启用的环境
spring:
profiles:
active: ${active.profile} #表示使用的是开发环境的配置
# 通用配置
# ...
---
# 开发
spring:
profiles: dev #给开发环境起的名字
server:
port: 80
---
# 测试
spring:
profiles: test #给测试环境起的名字
server:
port: 82
打包时,可以指定使用哪套环境:
mvn package -P dev
mvn package -P test
# 2.5. 配置文件分类
配置文件的优先级
# 类路径下
${root}/
src/main/resources/application.yml # 1
src/main/resources/config/application.yml # 2
# 文件系统中,与 jar 包同级
target/
xxx.jar
application.yml # 3
target/config/application.yml # 4
第 2 级,适合开发时覆盖配置
第 3、4 级,适合部署时覆盖类路径下的配置
# 3. SpringBoot 整合 junit
注意:
- 引导类所在的包的全名 必须 测试类所在的包一致
示例:
@SpringBootTest
class Springboot05TestApplicationTests {
@Autowired
private BookService bookService;
@Test
void testSave() {
bookService.save();
}
}
# 4. SpringBoot 整合 mybatis
引入坐标:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springboot-06-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<!--JDK 的版本-->
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在 application.yml 中设置 JDBC 和 数据源:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: 123456
# 设置数据源连接池
type: com.alibaba.druid.pool.DruidDataSource
编写 domain 和 dao:
package org.example.domain;
public class Book {
private Integer id;
private String name;
private String type;
private String description;
// ...
}
package org.example.dao;
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
测试:
@SpringBootTest
class Springboot06MybatisApplicationTests {
@Autowired
private BookDao bookDao;
@Test
void testGetById() {
Book book = bookDao.getById(1);
System.out.println(book);
}
}
注意:
SpringBoot版本低于2.4.3(不含),Mysql 驱动版本大于 8.0 时,需要在 url 连接串中配置时区jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC,或在 MySQL 数据库端配置时区解决此问题
# 5. 案例
将 spring-ssm 的案例改造为 springboot-ssm
- pom.xml
- 配置起步依赖,必要的资源坐标(druid)
- application.yml
- 设置数据源、端口等
- 配置类
- 全部删除
- dao
- 设置 @Mapper
测试类
页面
- 放置在 resources/static 目录中
上一篇: 下一篇: