目录
1.介绍
1.1 配置文件
1.2 目录结构
2.基于SpringBoot的SpringMVC
4.整合Mybatis
5.整合Druid连接池
6.整合Junit4
7.整合Logback
8.整合PageHelper
9.SpringBoot整合Thymeleaf
编辑
springboot%E7%9A%84pom.xml-toc" style="margin-left:0px;">【附录】springboot的pom.xml
1.介绍
- Spring框架的优点是方便解耦、简化开发,但是需要很多的XML配置文件,除此之外,项目的依赖管理存在问题。在环境搭建时一旦选错了依赖的版本,随之而来的不兼容问题,会严重阻碍项目的开发进度。
- 而SpringBoot能够自动配置, 会根据你添加的依赖自动配置 Bean 和组件,减少了手动配置的工作量。还提供了一系列的起步依赖,这些依赖包含了构建特定类型应用所需的库和依赖项,例如 web, database, security 等。这些起步依赖中还包含了版本管理,你不需要指定每个依赖的具体版本号,它们都会被统一管理。
1.1 配置文件
文件格式
允许用 .ym l和 .properties 类型
- application.yml: 层级格式,必须严格的按照层级来声明,不同的层级使用空格来区别。
- application.properties: 键值对格式 键名=值 键名不能乱写!!
为啥要用配置文件?
配置文件位置和加载顺序
位置:
1.项目下直接创建
2.项目下创建config,再config目录下创建
3.在resources目录下直接创建。
4.在resources目录下创建config,再config目录下创建
加载顺序:(1)当多个配置文件的配置内容不同的时候取并集作为项目的配置信息
(2)当多个配置文件中有同类型的配置信息的时候:
1.同级别目录下的properties > yml
2.不同级别下:项目下的config > 项目下 >resources下的config > resources
1.2 目录结构
注意 :
- 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将依赖统一管理
子项目必须手动的说明要继承的资源的坐标,但是不用写版本号!(意思是虽然它继承了父项目的依赖但是使用的时候也是要指明要使用哪一个依赖才能使用,但是不要用写版本号了)
<!--继承--><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 {@AutowiredTestService testService;@GetMapping("/test")@ResponseBodypublic String test(Model model){return "我是基于SpringBoot的springmvc";}
}
测试成功
4.整合Mybatis
接下来就可以整合mybaits来进行数据哭的操作了。
1.在pom.xml中配置mybatis的启动器依赖和jdbc的驱动包依赖
<!--配置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配置文件中配置数据库的连接参数
# 数据库配置信息
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_ex?serverTimezone=Asia/Shanghaipassword: rootusername: root
3.在启动类上使用注解@MapperScan("mapper包的路径")来声明mapper接口的包路径,或者在每一个接口上使用mapper注解标识
5.整合Druid连接池
为啥要用数据库连接池?
原生第jdbc每次操作数据库需要建立连接,关闭连接会浪费极大的资源,如果很多个人同时连接数据库或者关闭,这样会造成数据库服务器的崩溃。而数据库连接池会提前建立好多个连接提供给我们使用,我们用完之后还回去即可,这样不必频繁的建立连接和关闭连接上消耗资源。
(1)配置Druid的启动依赖
<!--配置Druid数据库链接池的启动器依赖--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.18</version></dependency>
(2)在application.yml文件中配置Druid的相关配置,在上面的基础上添加的。
# 数据库配置信息
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_ex?serverTimezone=Asia/Shanghaipassword: rootusername: rootdruid: #Druid连接池的配置# 连接池的配置信息# 初始化大小,最小,最大initial-size: 5max-active: 30min-idle: 5# 配置获取连接等待超时的时间max-wait: 60000validation-query: SELECT 1 FROM DUAL#配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000test-while-idle: true# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,slf4j# 配置DruidStatViewServletstat-view-servlet:# 登录名login-username: admin# 登录密码login-password: adminurl-pattern: /druid/*# IP白名单(没有配置或者为空,则允许所有访问)allow: 127.0.0.1,reset-enable: false# 必须启用,要不会404enabled: true
# mapper映射的xml位置
6.整合Junit4
为啥要用它?
Springboot整合单元测试,便于程序员对controller层,service层,mapper层或者其它层的代码进行针对性测试。
测试类应该定义在test目录下的java目录中,test目录下的代码Maven不会打包
(1)配置Junit4的启动器依赖
<!--配置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 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的启动器依赖即可使用。详细使用说明放在下一个博客中。
<!--配置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%E7%9A%84pom.xml">【附录】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 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中引入就行,不用写版本号了(只需要写项目的坐标即可),这样做的好处就是
如果两个项目都继承了该项目,那这两个项目就不会有版本冲突了,由父项目统一管理版本号。
--><!-- 02Maven的项目类型: jar(默认类型),war,pomMaven的项目之间的关系: 依赖,继承,聚合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>