【SpringBoot】SpringBoot框架的整体环境搭建和使用(整合Mybatis,Druid,Junit4,PageHelper,logback等)

devtools/2024/11/15 1:02:42/

目录

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: 键值对格式 键名=值 键名不能乱写!!

为啥要用配置文件?

  • 用于自定义各种自动化配置的Bean对象的属性值, SpringBoot的启动类在启动的时候其底层会扫描所有的自动化的Bean配置以及配置文件中的属性值,将自定义的属性值赋值给对应的Bean对象!
  • 【通俗讲】因为它在加载springspringmvc的相关配置信息时,有些东西不是一成不变的,而是需要我们手工导入,比如,数据库的连接,不同的人有不同的链接信息,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起步依赖包括了springspringMVC的相关依赖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>

http://www.ppmy.cn/devtools/96373.html

相关文章

Spring IoCDI(中)--IoC的进步

通过上文的讲解和学习, 我们已经知道了Spring IoC 和DI的基本操作, 接下来我们来系统的学习Spring IoC和DI 的操作. 前⾯我们提到IoC控制反转&#xff0c;就是将对象的控制权交给Spring的IOC容器&#xff0c;由IOC容器创建及管理对 象&#xff0c;也就是bean的存储。 1. Bean的…

【python小脚本】摄像头rtsp流转hls m3u8 格式web端播放

写在前面 工作需要&#xff0c;简单整理实际上这种方式延迟太高了&#xff0c;后来前端直接接的海康的本地解码插件&#xff0c;走的 websockt博文内容为 摄像头 rtsp 实时流转 hls m3u8 的一个 Python 脚本理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚…

如果从mysql导出百万数据级的excel

如果从mysql导出百万数据级的excel&#xff0c;可能遇到的问题&#xff1f; 同步导数据&#xff0c;接口很容易超时。 如果把所有数据一次性装载到内存&#xff0c;很容易引起OOM。 数据量太大sql语句慢。 如果走异步&#xff0c;如何通知用户导出结果 如果excel文件太大&#…

XSS--DOM破坏案例与靶场

靶场连接https://xss.pwnfunction.com/challenges/ 目录 Ma SPaghet! Jeff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok,Boomer Ma SPaghet! <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHT…

wpf IDataErrorInfo 验证

我可以给你一个简单的例子来说明如何在WPF中使用IDataErrorInfo接口来显示错误信息&#xff0c;并通过样式&#xff08;Style&#xff09;和触发器&#xff08;Trigger&#xff09;来在UI上反映这些错误。 首先&#xff0c;你需要一个实现了IDataErrorInfo接口的模型类。这个接…

【人工智能】TensorFlow lite介绍、应用场景以及项目实践:使用TensorFlow Lite进行数字分类

一、TensorFlow Lite 介绍 TensorFlow Lite&#xff08;简称TFLite&#xff09;是谷歌开发的一种轻量级的深度学习框架&#xff0c;专为移动设备和嵌入式设备设计。它是TensorFlow的移动和嵌入式设备版本&#xff0c;旨在帮助开发者在资源受限的设备上执行机器学习模型。Tenso…

通过相机来获取图片

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何通过相机获取图片文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …

EmguCV学习笔记 VB.Net 2.4 Image类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址&#xff1a;VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…