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

目录

1.介绍 

1.1 配置文件

1.2 目录结构

2.基于SpringBoot的SpringMVC

4.整合Mybatis

5.整合Druid连接池

6.整合Junit4

7.整合Logback

8.整合PageHelper

9.SpringBoot整合Thymeleaf

​编辑

【附录】springboot的pom.xml


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将依赖统一管理
子项目必须手动的说明要继承的资源的坐标,但是不用写版本号!(意思是虽然它继承了父项目的依赖但是使用的时候也是要指明要使用哪一个依赖才能使用,但是不要用写版本号了)

   <!--继承--><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)编写启动类

@SpringBootApplication
//定义mapper层的包扫描路径,给mybatis用的
@MapperScan("com.its.mapper")
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class,args);}
}

(4)编写controller层,然后进行测试

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的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.rhkb.cn/news/403456.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]

本文介绍了GUI的图形界面编程&#xff08;相关视频是哔站上的应该搜这个题目就能找到&#xff09;&#xff0c;文章还是很基础的&#xff0c;反正我是小白从0开始&#xff0c;主要的结构tinkter库、重要组件简介&#xff08;这个不用死记硬背 用的时候再说&#xff09;、Label&…

用于不平衡医疗数据分类的主动SMOTE

一、主动学习如何应用于不平衡数据的处理 首先&#xff0c;主动SMOTE不是像经典的SMOTE那样从训练集中随机选择一个样本作为生成合成样本的轴心点&#xff0c;而是通过不确定性和多样性采样来智能地进行样本选择&#xff0c;这是主动学习的两种技术。 在数据不平衡的情况下&…

Ubuntu上安装Redis的详细教程

1、安装redis 首先&#xff0c;访问Redis官网&#xff0c;点击首页的【Get Started】&#xff0c;然后点击Install Redis on Linux 安装 终端依次输入以下命令&#xff0c;如果过程中没有错误提示&#xff0c;则redis安装完成。 sudo apt install lsb-release curl gpg cu…

计算机科学速成课笔记

计算机速成课个人理解概要 1.计算机的本质 计算机的本质&#xff1a;极其简单的组件&#xff0c;经过一层层复杂的抽象&#xff0c;做出复杂的工作 2.控制电流的技术发展 继电器→真空管→晶体管 拥有了细微控制电流的手段 tip:早期机械计算机&#xff0c;被虫子(bug)卡住…

基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码

介绍 适用于高能耗企业、建筑、工厂、园区的水、电、气、热、油、空压机等能源数据采集、分析、报表&#xff1b; 基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码 软件架构 软件功能 数字大屏 使用说明

机器学习第十一章-特征选择与稀疏学习

11.1子集收集与评价 属性称为"特征" &#xff0c;对当前学习任务有用的属性称为"相关特征" 、没什么用的属性称为"无关特 征" . 从给定的特征集合中选择出相关特征于集的过程&#xff0c;称为"特征选择"。 特征选择是一个重要的"…

Linux | Linux进程万字全解:内核原理、进程状态转换、优先级调度策略与环境变量

目录 1、从计算机组成原理到冯诺依曼架构 计算机系统的组成 冯诺依曼体系 思考&#xff1a;为什么计算机不能直接设计为 输入设备-CPU运算-输出设备 的结构&#xff1f; 2、操作系统(Operator System) 概念 设计OS的目的 描述和组织被管理对象 3、进程 基本概念 进程id和父进程…

数据结构入门——07堆

1.堆 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树数据结构&#xff0c;具有以下两个主要特性&#xff1a; 结构特性&#xff1a; 堆是一棵完全二叉树&#xff0c;即除了最后一层的叶子节点外&#xff0c;每一层都是满的&#xff0c;最后一层的叶子节点从左向右依次…

志愿服务管理系统--论文pf

TOC springboot360志愿服务管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广…

[SWPUCTF 2021 新生赛]babyrce

我们传cookie admin1 访问http://node5.anna.nssctf.cn:29911/rasalghul.php 在PHP中&#xff0c;preg_match函数是一个用于进行正则表达式匹配的内置函数。它可以通过正则表达式对一个字符串进行匹配&#xff0c;判断该字符串是否满足正则表达式的规则。 发现过滤空格&#x…

xss之DOM破坏

文章目录 DOM破坏漏洞的复现https://xss.pwnfunction.com/基于bp学院DOM破坏漏洞复现思路分析实现 常见的xss触发的标签没有过滤的情况存在过滤的情况 DOM破坏 DOM破坏就是⼀种将 HTML 代码注⼊⻚⾯中以操纵 DOM 并最终更改⻚⾯上 JavaScript ⾏为的技术。 在⽆法直接 XSS的情…

牛客JS题(四十五)数组去重

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; set的灵活用法去除的判别标准 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><style>/* 填写样式 */</style></head><bo…

【Docker】Docker Compose(容器编排)

一、什么是 Docker Compose docker-compose 是 Docker 官方的开源项目&#xff0c;使用 python 编写&#xff0c;实现上调用了 Docker 服务的 API 进行容器管理及编排&#xff0c;其官方定义为定义和运行多个 Docker 容器的应用。 docker-compose 中有两个非常重要的概念&…

趣映 v2.3.8 高级版 剪映替代品 解锁会员功能

看到名字&#xff0c;想必很多网友会联想到剪映&#xff0c;没错&#xff0c;趣映也是一款类似剪映的视频编辑工具。趣映为用户提供了全面的视频编辑和制作&#xff0c;更专注于动画视频制作的软件。功能齐全&#xff0c;操作简单&#xff0c;可以帮助用户从灵感创作到成片输出…

MYSQL----表的创建

1.创建表 create table 表名&#xff08; field1 datetype, field2 datetype, field3 datetype &#xff09; 1.field字段名&#xff0c;也就是属性&#xff0c;相当于java类里面的成员属性 2.datetype 数据类型 3.最后一个字段的定义&#xff0c;结束没有逗号 4.字段的定义在…

【学习总结】JVM篇

JVM JVM基础知识 主力机型 HotSpot VM HotSpot虚拟机时OpenJDK和OracleJDK中默认的Java虚拟机。它最初并非由Sun公司所开发&#xff0c;而是由一家名为“Longview Technologies”的小公司设计。Sun公司注意到这款虚拟机在即时编译等多个方面有着优秀的理念和实际成果&#…

解决问题:Arcgis10.8“数据“-“导出至CAD“时就卡死了

问题现象&#xff1a;我们在使用Arcgis10.8软件&#xff0c;执行 “数据导出至CAD”操作时&#xff0c;会出现卡死的情况&#xff0c;步骤如下图所示&#xff1a; 解决方案&#xff1a;在菜单栏依次选择“地理处理”-“地理处理选项”&#xff0c;然后在“后台处理”和“发生错…

金价多次尝试刷新最高纪录,美国零售销售数据是绊马索

金价一直在试探新高&#xff0c;该纪录为每盎司2,485美元。而且&#xff0c;强劲的美国零售销售报告正在阻止金价的上涨。 由于强大的阻力&#xff0c;金价无法继续上涨。一周的净空头头寸大增。 发布了强于预期的美国零售销售报告后&#xff0c;金价承受了压力。期望的50个基…

递归--数据结构--黑马

递归 总结一句话&#xff0c;上手直接多刷Leetcode&#xff0c;比看这个更有用。 定义 递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集。 例如&#xff0c;单链表递归遍历的例子&#xff1a; void f(Node node) {if (node null) {retu…

Ubuntu18.04 配置EtherCAT主站IGH SOEM

IGH IGH 是开源的EtherCAT 主站软件 一、安装依赖 sudo apt update sudo apt install build-essential linux-headers-$(uname -r) mercurial autoconf libtool 也不知道安装的完全不完全 uname -r 可以查看内核&#xff0c;我安装的ubuntu18.04的内核版本是 5.4.0-84-gen…