目录
[1.1 配置文件](#1.1 配置文件)
[1.2 目录结构](#1.2 目录结构)
1.介绍
- Spring框架的优点是方便解耦、简化开发,但是需要很多的XML配置文件,除此之外,项目的依赖管理存在问题。在环境搭建时一旦选错了依赖的版本,随之而来的不兼容问题,会严重阻碍项目的开发进度。
- 而SpringBoot能够自动配置, 会根据你添加的依赖自动配置 Bean 和组件,减少了手动配置的工作量。还提供了一系列的起步依赖,这些依赖包含了构建特定类型应用所需的库和依赖项,例如 web, database, security 等。这些起步依赖中还包含了版本管理,你不需要指定每个依赖的具体版本号,它们都会被统一管理。
1.1 配置文件
文件格式
允许用 .ym l和 .properties 类型
- application.yml: 层级格式,必须严格的按照层级来声明,不同的层级使用空格来区别。
- application.properties: 键值对格式 键名=值 键名不能乱写!!
为啥要用配置文件?
- 用于自定义各种自动化配置的Bean对象的属性值, SpringBoot的启动类在启动的时候其底层会扫描所有的自动化的Bean配置以及配置文件中的属性值,将自定义的属性值赋值给对应的Bean对象!
- 【通俗讲】因为它在加载spring,springmvc的相关配置信息时,有些东西不是一成不变的,而是需要我们手工导入,比如,数据库的连接,不同的人有不同的链接信息,mybatis映射的xml文件路径等等,配置文件起到读取我们自己导入内容的作用。
配置文件位置和加载顺序
位置:
1.项目下直接创建
2.项目下创建config,再config目录下创建
3.在resources目录下直接创建。
4.在resources目录下创建config,再config目录下创建
加载顺序:(1)当多个配置文件的配置内容不同的时候取并集作为项目的配置信息
(2)当多个配置文件中有同类型的配置信息的时候:
1.同级别目录下的properties > yml
2.不同级别下:项目下的config > 项目下 >resources下的config > resources
1.2 目录结构
java目录:声明包和java代码的
resource目录:
1.public:存放浏览器可以直接访问的资源
2.static:存放静态资源的,这里默认是放行的(在springMVC中要配置静态资源放行)
3.templates:存放html页面资源的,这个名字是固定的,必须使用请求转发才能访问。这里视图解析器已经自动配置了,并配置了前缀 WEB-INF/templates 和后缀(.html)
4.config:存放application配置文件的
5.mybatis:自定义目录,存放mapper映射的XML文件
注意 :static 目录是 SpringBoot 可以直接识别的目录,会将其中的静态资源编译到 web 项目中,并放到 tomcat 中使用。静态资源的访问路径中无需声明 static。例如:http://localhost:8080/a.png
IDEA 中经常出现放在 static 下的静态文件即使重启也不被编译。需要通过 Maven 面板 进行清空缓存,重新编译启动即可识别。
2.基于SpringBoot的SpringMVC
(1)先创建一个Maven项目
(2)在pom.xml中配置依赖继承,再导入spingboot起步依赖,其中springboot起步依赖包括了spring和springMVC的相关依赖tomacat的依赖以及相关他们的配置信息。
【说明】Maven项目有继承关系(统一管理依赖资源的版本号)
- 1.子Maven项目使用parent标签声明要继承的父项目的坐标
- 2.子Maven项目会自动拥有父项目pom.xml中配置的所有依赖
注:为了避免子项目的过度依赖,在父项目中使用dependencyManagement将依赖统一管理
子项目必须手动的说明要继承的资源的坐标,但是不用写版本号!(意思是虽然它继承了父项目的依赖但是使用的时候也是要指明要使用哪一个依赖才能使用,但是不要用写版本号了)
XML
<!--继承-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.11</version>
</parent>
//springboot的启动依赖
<!--web启动器依赖: Spring和SpringMVC的相关依赖以及SpringBoot启动类的依赖以及Tomcat的依赖以及相关配置信息-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
下面是SpringBoot起步依赖所包含的所有的jar包,常用的都已经封装好了。
(3)编写启动类
java
@SpringBootApplication
//定义mapper层的包扫描路径,给mybatis用的
@MapperScan("com.its.mapper")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class,args);
}
}
(4)编写controller层,然后进行测试
java
package com.its.controller;
import com.its.domain.Cloth;
import com.its.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@Controller
public class TestController {
@Autowired
TestService testService;
@GetMapping("/test")
@ResponseBody
public String test(Model model){
return "我是基于SpringBoot的springmvc";
}
}
测试成功
4.整合Mybatis
接下来就可以整合mybaits来进行数据哭的操作了。
1.在pom.xml中配置mybatis的启动器依赖和jdbc的驱动包依赖
XML
<!--配置MyBatis的启动器依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version><!-- 可以省略,spring-boot-starter-parent中存在其版本声明 -->
</dependency>
2.在application配置文件中配置数据库的连接参数
XML
# 数据库配置信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_ex?serverTimezone=Asia/Shanghai
password: root
username: root
3.在启动类上使用注解@MapperScan("mapper包的路径")来声明mapper接口的包路径,或者在每一个接口上使用mapper注解标识
5.整合Druid连接池
为啥要用数据库连接池?
原生第jdbc每次操作数据库需要建立连接,关闭连接会浪费极大的资源,如果很多个人同时连接数据库或者关闭,这样会造成数据库服务器的崩溃。而数据库连接池会提前建立好多个连接提供给我们使用,我们用完之后还回去即可,这样不必频繁的建立连接和关闭连接上消耗资源。
(1)配置Druid的启动依赖
XML
<!--配置Druid数据库链接池的启动器依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.18</version>
</dependency>
(2)在application.yml文件中配置Druid的相关配置,在上面的基础上添加的。
XML
# 数据库配置信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_ex?serverTimezone=Asia/Shanghai
password: root
username: root
druid: #Druid连接池的配置
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
max-active: 30
min-idle: 5
# 配置获取连接等待超时的时间
max-wait: 60000
validation-query: SELECT 1 FROM DUAL
#配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
test-while-idle: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 配置DruidStatViewServlet
stat-view-servlet:
# 登录名
login-username: admin
# 登录密码
login-password: admin
url-pattern: /druid/*
# IP白名单(没有配置或者为空,则允许所有访问)
allow: 127.0.0.1,
reset-enable: false
# 必须启用,要不会404
enabled: true
# mapper映射的xml位置
6.整合Junit4
为啥要用它?
Springboot整合单元测试,便于程序员对controller层,service层,mapper层或者其它层的代码进行针对性测试。
测试类应该定义在test目录下的java目录中,test目录下的代码Maven不会打包
(1)配置Junit4的启动器依赖
XML
<!--配置Junit4的启动器依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
(2)在测试目录下创建测试类以及测试方法,在测试类上使用注解@SpringBootTest注解声明。
(3)在测试类直接依赖注入获取想要测试的Bean对象即可。
(4)声明测试方法,使用@Test注解标注,返回值为void,无参。
注意:
单元方法在启动的时候底层会调用启动类,所以要保证单元方法所在的包路径和启动类的一致,如果不一致,需要在测试类上加@SpringBootTest(classes=启动类.class)
7.整合Logback
SpringBoot默认使用logback技术完成日志的打印,无需配置任何依赖,直接在resources目录下创建logback.xml文件即可,如下:
XML
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${catalina.base}/logs/" />
<!-- 控制台输出 -->
<appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志输出编码 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="Stdout" />
<appender-ref ref="RollingFile" />
</root>
<logger name="com.its.mapper" level="DEBUG"></logger>
<!--日志异步到数据库 -->
<!-- <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
日志异步到数据库
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
连接池
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
<user>root</user>
<password>root</password>
</dataSource>
</connectionSource>
</appender> -->
</configuration>
8.整合PageHelper
直接配置PageHelper的启动器依赖即可使用。详细使用说明放在下一个博客中。
XML
<!--配置PageHelper的启动器依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.7</version>
</dependency>
9.SpringBoot整合Thymeleaf
为啥要用Thymeleaf技术?
- SpringBoot推荐使用Thymeleaf技术作为其页面技术,因为Jsp页面技术过于臃肿,效率低下。
原理:
- 由Thymeleaf引擎和html页面模板,作用域组成,必须使用请求转发访问页面,浏览器访问页面单元方法,转发给对应的页面,被 Thymeleaf引擎拦截, Thymeleaf引擎加载页面模板,并按照模板中的占位从作用域中获取对应的数据完成填充,将填充后的页面响应给浏览器
补充:JSP本质上是一个servlet,他会被编译成java代码之后再拿到对应的数据,一同输出给浏览器。
使用
(1)配置Thymeleaf启动器依赖
(2)在resources目录下的templates目录下创建HTML模板并在其html标签上添加xmlns:th="http://www.thymeleaf.org"
(3) 编写HTML模板,常用的占位有th:text, th:value, th:if, th:each, th:href, th:onclick 全部以属性的形式在标签上使用
(4)编写页面的请求转发的单元方法(和jsp差不多)
【附录】springboot的pom.xml
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<groupId>com.its</groupId>
<artifactId>spring_total</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 01继承父项目,统一版本号,父项目里面已经有了我们很多常用的依赖,
如果我们需要直接在dependency中引入就行,不用写版本号了(只需要写项目的坐标即可),这样做的好处就是
如果两个项目都继承了该项目,那这两个项目就不会有版本冲突了,由父项目统一管理版本号。
-->
<!-- 02
Maven的项目类型: jar(默认类型),war,pom
Maven的项目之间的关系: 依赖,继承,聚合
Maven项目的继承关系(统一管理依赖资源的版本号):
a.子Maven项目使用parent标签声明要继承的父项目的坐标
b.子Maven项目会自动拥有父项目pom.xml中配置的所有依赖
注意:
为了避免子项目的过度依赖,在父项目中使用dependencyManagement将依赖统一管理
子项目必须手动的说明要继承的资源的坐标,但是不用写版本号!
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.11</version>
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--web启动器依赖: Spring和SpringMVC的相关依赖以及SpringBoot启动类的依赖以及Tomcat的依赖以及相关配置信息-->
<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>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version><!-- 可以省略,spring-boot-starter-parent中存在其版本声明 -->
</dependency>
<!--配置Druid数据库链接池的启动器依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.18</version>
</dependency>
<!--配置Junit4的启动器依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--配置Thymeleaf的启动器依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>