在之前的文章中我们已经学习了SSM的全部内容以及相关整合
SSM是Spring的产品,主要用来简化开发,但我们现在所介绍的这款框架——SpringBoot,却是用来简化Spring开发的框架
SpringBoot是由Pivowtal团队提供的全新框架,其设计目的就是用来简化Spring应用的初始搭建以及开发过程,用来简化开发工具的工具,你是否已经满怀期待~
温馨提醒:在学习前请学习SSM内容以及Maven的高阶内容(依赖传递)等内容
SpringBoot是由Pivotal团队提供的全新框架,其设计目的就是用来简化Spring应用的初始搭建以及开发过程
SpringBoot是针对Spring的繁琐过程进行优化而产生的框架
Spring程序缺点:
SpringBoot程序优点:
我们通过一个简单的SpringBoot案例和SSM案例的比较来展现SpringBoot的优势
首先我们回忆一下SSM框架的基本构造图:

我们来总结一些SSM框架必备的一些文档:
相对而言,我们的SpringBoot将SSM的框架内容隐藏起来,达到简化框架的作用
我们下面来介绍创建一个SpringBoot框架的具体步骤:





package com.itheima.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id ==> "+id);
return "hello , spring boot!";
}
}
package com.itheima;
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);
}
}
以上至此,我们的SpringBoot项目就开发完毕了
除此之外,我们的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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
我们会发现需要我们书写代码的部分仅仅只有Collector这一部分,相比于SSM框架简化了并非一点点
我们将SSM框架与SpringBoot框架进行简单的对比:
| 类/配置文件 | Spring | SpringBoot |
|---|---|---|
| pom文件中的坐标 | 手工添加 | 勾选添加 |
| web3.0配置类 | 手工添加 | 无 |
| Spring/SpringMvc配置类 | 手工添加 | 无 |
| 控制器 | 手工添加 | 手工添加 |
我们可以明显比较出两者的显著差距!
注意:基于IDEA开发的SpringBoot框架需要联网到SpringBoot官网加载程序框架结构
我们在实际工作中,可能使用的开发工具并非只有IDEA
那么IDEA中存在有SpringBoot的开发架构,其他不包含SpringBoot开发架构选项的软件就无法开发了吗?
我们可以选择到官网进行jar包下载直接导入开发即可:




我们在实际开发中,常常会做到前后端分离开发
那么我们的SpringBoot中所使用的服务器或开发软件等是否还需要交付给前端呢
SpringBoot为我们提供了一种全新的服务器开启方法,我们只需要将SpringBoot打包后交付给前端,前端就可直接进行开启

java -jar SpringBoot文件包名.jar(可tab键补全)
注意点:
我们需要将所需的数据库信息交付给前端,因为SpringBoot只负责项目的开启,与数据库无关
该方法是由一种pom.xml中的插件支持的,请确保存在该插件(SpringBoot自动创建)
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
在简单介绍SpringBoot的项目开发之后,你是否有疑惑为什么SpringBoot能够省略如此多的信息来直接开发
其实这一切都是源于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>
<!----ctrl+左键 可以查看源码>
<!--Maven的继承机制,继承了spring-boot-starter-parent配置文件,再点开查看父类spring-boot-dependencies-->
<!--spring-boot-dependencies里包含了大量的properties,dependencyManagement,build可供选择使用-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--固定使用1.8JDK-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--起步依赖,查看源码可以查看到关于SpringMvc的相关依赖,包括SpringMVC和Tomcat-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--起步依赖,查看源码可以查看到test的相关依赖-->
<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>
总而言之,SpringBoot创建时自带的一系列起步依赖帮助我们简化了大量SSM的繁琐操作
我们再来详细介绍几个词语:
Starter:
Parent:
实际开发:
SpringBoot程序启动方法就是开启Application.java文件即可
package com.itheima;
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);
}
}
我们给出两个注意点:
我们最后给出一个Maven使用技巧来切换服务器
SpringBoot中默认使用Tomcat服务器并安装了对应插件,
那么我们如果想切换服务器,只需要排除掉Tomcat插件,并添加新的插件即可
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<!--我们采用排除依赖的方法去除tomcat服务器-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--我们新添新的jetty服务器坐标即可-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</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>
我们在Spring中能够实现的技术,在SpringBoot中同样可以实现
接下来我们依次来介绍一些SpringBoot基本配置的方法和多环境开发的问题
SpringBoot为我们提供了三种配置格式来管理SpringBoot的配置(注意:以下配置均存在于resources文件夹中):
# 修改服务器端口号为80
server.port=80
# 修改服务器端口号为81(注意:存在空格)
server:
port: 81
# 修改服务器端口号为82(注意:存在空格)
server:
port: 82
当三者均存在时,其优先级为:application.properties>application.yml >application.yaml
以上三种配置格式均在resources文件夹下创建相对应名称以及后缀的文件下书写:

注意:
application.properties属于SpringBoot自带,不需要创建
application.yml,application.yaml需要自我创建,因而不被标记为配置文件
如果我们希望该文件被标记为配置文件并包含有补全功能,我们需要手动设置为配置文件
我们在这里详细介绍一下yaml文件:
优点:
YAML文件扩展名:
YAML语法规则:
大小写敏感
属性层级关系
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不能使用tab)
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
# 表示注释
使用 - 来表示数据开始符号(数组)
YAML语法使用规范示例:
server:
port: 82
logging:
level:
root: info
likes:
- music
- game
- PE
YAML的数据读取方法:
首先我们先给出我们在yml文件中所列出的属性:
lesson: SpringBoot
server:
port: 80
enterprise:
name: itcast
age: 16
tel: 4006184000
subject:
- Java
- 前端
- 大数据
下面我们来介绍yaml数据读取的三种方法:
package com.itheima.controller;
import com.itheima.domain.Enterprise;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/books")
public class BookController {
//使用@Value读取单一属性数据
@Value("${lesson}")
private String lesson;
@Value("${server.port}")
private Integer port;
@Value("${enterprise.subject[0]}")
private String subject_00;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(lesson);
System.out.println(port);
System.out.println(subject_00);
return "hello , spring boot!";
}
}
package com.itheima.controller;
import com.itheima.domain.Enterprise;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/books")
public class BookController {
//使用Environment封装全配置数据(自动装配封装Environment,里面会包含yaml中所有属性和属性值)
@Autowired
private Environment environment;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
// 我们采用environment的getProperty方法,根据属性名,获得属性值
System.out.println(environment.getProperty("lesson"));
System.out.println(environment.getProperty("server.port"));
System.out.println(environment.getProperty("enterprise.age"));
System.out.println(environment.getProperty("enterprise.subject[1]"));
return "hello , spring boot!";
}
}
// 自定义对象Enterprise实现类(属于Domain)
package com.itheima.domain;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Arrays;
//封装yaml对象格式数据必须先声明当前实体类受Spring管控
@Component
//使用@ConfigurationProperties注解定义当前实体类读取配置属性信息,通过prefix属性设置读取哪个数据
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
private String name;
private Integer age;
private String tel;
private String[] subject;
@Override
public String toString() {
return "Enterprise{" +
"name='" + name + '\'' +
", age=" + age +
", tel='" + tel + '\'' +
", subject=" + Arrays.toString(subject) +
'}';
}
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;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String[] getSubject() {
return subject;
}
public void setSubject(String[] subject) {
this.subject = subject;
}
}
// 服务层Controller
package com.itheima.controller;
import com.itheima.domain.Enterprise;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/books")
public class BookController {
// 自动装配实现类即可
@Autowired
private Enterprise enterprise;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(enterprise);
return "hello , spring boot!";
}
}
<!--实现自定义对象封装时会产生警告,我们需要添加以下依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
我们在开发过程中可能会采用不同的环境,频繁的转换环境当然不是一个好办法
SpringBoot选择配置多环境来控制环境选择启动
我们从两种不同的配置文件方向来讲解多环境:
# yaml采用 --- 来表示环境层级更换
# yaml采用 spring:profiles:active: 环境id 设置启用的环境
spring:
profiles:
active: dev
---
#开发环境
#yaml采用 spring:config:activate:on-profile: 环境id 来定义当前环境id(规范写法)
spring:
config:
activate:
on-profile: dev
#以下属于环境配置
server:
port: 80
---
#生产
#yaml采用 spring:profiles: 环境id 来定义当前环境id(旧版写法,同样适用)
spring:
profiles: pro
#以下属于环境配置
server:
port: 81
---
#测试
#yaml采用 spring:profiles: 环境id 来定义当前环境id(旧版写法,同样适用)
spring:
profiles: test
#以下属于环境配置
server:
port: 82
---
# application.properties文件(环境主文件)
#设置启用的环境
spring.profiles.active=pro
# application-dev.properties文件(环境配置文件)
# 设置相关资源配置
server.port=8080
# application-pro.properties文件(环境配置文件)
# 设置相关资源配置
server.port=8081
# application-test.properties文件(环境配置文件)
# 设置相关资源配置
server.port=8082
我们前面提及过SpringBoot的快速启动直接将jar包打包后发给前端就可以采用命令行启动服务器
但是我们的配置可能会导致更多的细节问题:

前端在调用时,可以采用指令来更改默认环境
默认开启服务器
java -jar jar包名称.jar
更换默认条件开启服务器样板
java -jar jar包名称.jar --配置属性=配置值
更换默认环境开启服务器
java -jar jar包名称.jar --spring.profiles.active=test
更换默认端口号开启服务器
java -jar jar包名称.jar --server.port=88
更换条件可以叠加使用
java -jar jar包名称.jar --spring.profiles.active=test --server.port=88
SpringBoot中存在有很多的环境设置,不仅如此,包括有Maven也存在有多环境配置
那么Maven的多环境配置优先级和SpringBoot的多环境配置优先级谁的更高呢?
我们通过一个简单的案例来证明:
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_05_maven_and_boot_profile</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<!--开启${}占位符作用于yaml文件中的解析-->
<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>
</plugins>
</build>
<!--配置多个环境-->
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<!--给出属性值-->
<properties>
<profile.active>dev</profile.active>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>pro</id>
<!--给出属性值-->
<properties>
<profile.active>pro</profile.active>
</properties>
<!--默认为生产环境-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<!--给出属性值-->
<properties>
<profile.active>test</profile.active>
</properties>
</profile>
</profiles>
</project>
# 设置启用的环境
# 采用${}引用Maven中的属性
spring:
profiles:
active: ${profile.active}
---
#开发
spring:
profiles: dev
server:
port: 80
---
#生产
spring:
profiles: pro
server:
port: 81
---
#测试
spring:
profiles: test
server:
port: 82
---
端口号为81
那么关于Maven的测试就到这里结束
我们的环境配置可以写于许多位置,由此我们大致分为四类:




我们将这些位置进行分类并排出优先级:
不同位置环境配置作用:
在基本介绍了SpringBoot之后,我们介绍最重要的一部分——整合第三方技术
下面我们以三个小案例来展现SpringBoot的整合
SpringBoot是用于简化Spring的工具,所以我们分别从Spring和SpringBoot的视角进行整合
我们先给出Spring整合JUnit的代码:
// 设置运行器
@RunWith(SpringJUnit4ClassRunner.class)
// 加载环境
@ContextConfiguration(classes = SpringConfig.class)
public class UserServiceTesst{
// 自动装配测试对象
@Autowired
private BookService bookService;
// 测试方法
@Test
public void testSave(){
bookService.save();
}
}
我们从头说起:

<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_07_test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--我们提供了spring-boot-starter来做依赖传递(web时用的是spring-boot-starter-web)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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>
// 这里就是包,倘若为com.itheima1,classes需要设置为启动类.class
package com.itheima;
import com.itheima.Springboot07TestApplication;
import com.itheima.service.BookService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
// 设置JUnit加载的SpringBoot启动类(类似于@RunWith和@ContextConfiguration的整合)
@SpringBootTest
class Springboot07TestApplicationTests {
// 自动装配测试对象(未发生变化)
@Autowired
private BookService bookService;
// 测试方法(未发生变化)
@Test
public void save() {
bookService.save();
}
}
/*
名称:@SpringBootTest
类型:测试类注解
位置:测试类定义上方
作用:设置JUnit加载的SpringBoot启动类
相关属性:
classes:设置SpringBoot启动类
注意点:
如果该测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定
当该测试类与启动主Java类不属于同一目录名称下时,需要设置classes属性为启动类
@SpringBootTest(classes = Springboot07TestApplication.class)
*/
我们如果想要采用SpringBoot整合SSM,那么就需要同时整合以下三门技术:
但SpringBoot本身就是为了简化Spring,SpringMVC而存在,所以这两部分整合实际上我们已经完成了
所以我们将MyBatis单列出来提前进行整合学习,为后续的SSM整合打下基础##
Spring对MyBatis的整合主要从三部分进行:
我们在这里就不做赘述了,如果遗忘可以查看之前的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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_08_mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--自动添加MyBatis相关依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--自动添加mysql相关依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--手动添加druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.itheima.domain;
public class Book {
private Integer id;
private String name;
private String type;
private String description;
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", type='" + type + '\'' +
", description='" + description + '\'' +
'}';
}
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 String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
package com.itheima.dao;
import com.itheima.domain.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
// 注意:我们SpringBoot整合中的SpringConfig已经被省略,所以我们的JdbcConfig和MyBatisConfig配置类不用配置
// JdbcConfig主要用于配置DataSource,我们将会在yaml配置文件中配置
// MyBatisConfig配置sqlSessionFactoryBean,大部分属于固定代码,唯一的变量setTypeAliasesPackage我们选择设置整个代码包
// MyBatisConfig配置MapperScannerConfigurer映射地址,我们选择在dao数据层采用@Mapper来代替操作
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
# 直接配置datasource即可
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
package com.itheima;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Springboot08MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot08MybatisApplication.class, args);
}
}
package com.itheima;
import com.itheima.dao.BookDao;
import com.itheima.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot08MybatisApplicationTests {
@Autowired
private BookDao bookDao;
@Test
void testGetById() {
Book book = bookDao.getById(1);
System.out.println(book);
}
}
我们SpringBoot的最后课程就是用来整合SSM
我们同样采用和之前SSM案例整合的代码对比来介绍SpringBoot的SSM整合
我们先给出之前SSM整合的大致框架:

我们来简单介绍上述代码的作用不做具体代码展示了(如有需要可以查看之前文章SSM整合):
由于我们的SSM内容过多,我们针对上次的SSM案例进行整合,部分内容不做修改,我们仅介绍更改部分
下面让我们开始运行SpringBoot开始整合:

<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_09_ssm</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_09_ssm</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--TODO 添加必要的依赖坐标-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
# TODO 配置数据源相关信息
server:
port: 80
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: root
// 我们前面有提起Config文件夹全部删除,导致我们需要手动配置dao的数据层映射
package com.itheima.dao;
import com.itheima.domain.Book;
import org.apache.ibatis.annotations.*;
import java.util.List;
// TODO 添加@Mapper
@Mapper
public interface BookDao {
@Insert("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})")
public int save(Book book);
@Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")
public int update(Book book);
@Delete("delete from tbl_book where id = #{id}")
public int delete(Integer id);
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
@Select("select * from tbl_book")
public List<Book> getAll();
}

package com.itheima.service;
import com.itheima.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class BookServiceTest {
@Autowired
private BookService bookService;
@Test
public void testGetById(){
Book book = bookService.getById(2);
System.out.println(book);
}
@Test
public void testGetAll(){
List<Book> all = bookService.getAll();
System.out.println(all);
}
}
最后为大家展示一下SpringBoot整合后的整体框架:

好的,关于SpringBoot的内容就介绍到这里,希望能为你带来帮助!
该文章属于学习内容,具体参考B站黑马程序员李老师的SSM框架课程
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我一直在Rails上做两个项目,它们运行良好,但在这个过程中重新发明了轮子,自来水(和热水)和止痛药,正如我随后了解到的那样,这些已经存在于框架中。那么基本上,正确了解框架中所有智能部分的最佳方法是什么,这将节省时间而不是自己构建已经实现的功能?从第1页开始阅读文档?是否有公开所有内容的特定示例应用程序?一个特定的开源项目?所有的rails交通?还是完全
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion我希望能够将模板化的YARD文档样式注释插入到我现有的Rails遗留应用程序中。目前它的评论很少。我想要具有指定参数的类header和方法header(通过从我假定的方法签名中提取)和返回值的占位符。在PHP代码中,我有一些工具可以检查代码并在适当的位置创建插入到代码中的文档header注释。在带有Ducktyping等的Ruby中,我确信诸如@params等类型之类
我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有
我为你们准备了一个简单的。我想要一个特色内容部分,其中排除了当前文章所以这可以通过delete_if使用MiddlemanBlog:但是我使用的是中间人代理,所以我无法访问current_article方法...我有一个YAML结构,其中包含以下模拟数据(以及其他数据),文件夹设置如下:data>site>caseStudy>RANDOM-ID423536.yaml(由CMS生成)在每个yaml文件中,您会发现如下内容::id:2k1YccJrQsKE2siSO6o6ac:title:Heyplace我的config.rb看起来像这样data.site.caseStudy.eachdo
据我了解,Python的扭曲框架为网络通信提供了更高级别的抽象(?)。我正在寻找在Rails应用程序中使用与twisted等效的Ruby。 最佳答案 看看EventMachine.它不像Twisted那样广泛,但它是围绕事件驱动网络编程的相同概念构建的。 关于python-Ruby是否有相当于Python的扭曲框架作为网络抽象层?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9
如果您希望在Spring中启用定时任务功能,则需要在主类上添加 @EnableScheduling 注解。这样Spring才会扫描 @Scheduled 注解并执行定时任务。在大多数情况下,只需要在主类上添加 @EnableScheduling 注解即可,不需要在Service层或其他类中再次添加。以下是一个示例,演示如何在SpringBoot中启用定时任务功能:@SpringBootApplication@EnableSchedulingpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.ru
软件特点部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式,支持大文件的读取。支持实时打印新增的日志(类终端)。支持日志搜索。使用手册基本页面配置路径配置日志所在的目录,配置后按回车键生效,下拉框选择日志名称。选择日志后点击生效,即可加载日志。windows路径E:\java\project\log-view\logslinux路径/usr/local/XX历史模式历史模式下,不会读取新增的日志。针对历史文件可以分页读取,配置分页大小、跳转。历史模式下,支持根据关键词搜索。目前搜索引擎使用的是jdk自带类库,搜索速度相对较低,优点是比较简单。2G日志全文搜
1.依赖导入org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-validation2.validation常用注解@Null被注释的元素必须为null@NotNull被注释的元素不能为null,可以为空字符串@AssertTrue被注释的元素必须为true@AssertFalse被注释的元素必须为false@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值@D