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

news2024/9/23 17:24:54

目录

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 {
    @Autowired
    TestService testService;
    @GetMapping("/test")
    @ResponseBody
    public 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.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的启动依赖

 <!--配置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.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的启动器依赖

 <!--配置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中引入就行,不用写版本号了(只需要写项目的坐标即可),这样做的好处就是
如果两个项目都继承了该项目,那这两个项目就不会有版本冲突了,由父项目统一管理版本号。
-->
    <!-- 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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openEuler系统安装Visual Studio Code

openEuler系统安装Visual Studio Code 背景安装密钥和存储库更新包缓存并使用dnf安装包Fedora 22及以上版本旧版本使用yum 安装过程截图安装成功看桌面效果 背景 openEuler(openEuler-24.03-LTS)安装了麒麟UKUI桌面但是没有麒麟软件商店想安装Visual Studio Code 安装密钥和…

计算机毕业设计选什么题目好? springboot 大学志愿填报系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

东晟时尚服饰文化传承与发展研发中心成立

近期&#xff0c;东晟时尚创新科技&#xff08;北京&#xff09;有限公司宣布成立东晟时尚服饰文化传承与发展研发中心&#xff0c;此举标志着公司在促进中国传统文化与现代时尚产业结合方面迈出了关键步伐。 作为一家在时尚科技推广和设计研发应用服务领域具有战略眼光的企业&…

微信云开发云存储 下载全部文件

一、安装 首先按照这个按照好依赖&#xff0c;打开cmd 安装 | 云开发 CloudBase - 一站式后端云服务 npm i -g cloudbase/cli 安装可能遇到的问题 ‘tcb‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。-CSDN博客 二、登录 在cmd输入 tcb login 三、…

导出运营数据Excel报表

文章目录 概要整体架构流程技术细节小结 概要 产品原型 在数据统计页面&#xff0c;有一个数据导出的按钮&#xff0c;点击该按钮时&#xff0c;其实就会下载一个文件。这个文件实际上是一个Excel形式的文件&#xff0c;文件中主要包含最近30日运营相关的数据。表格的形式已经…

C语言(16)——初识单链表

1.链表的概念及结构 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 结构图&#xff1a; 补充说明&#xff1a; 1、链式机构在逻辑上是连续的&#xff0c;在物理结构上不⼀定连续 2、…

【网络】自定义(应用层)协议——序列化和反序列化

我们接着上一篇&#xff1a;http://t.csdnimg.cn/Xt18d 我们之前写的代码都是在应用层的&#xff0c;而TCP是在应用层下面一层的传输层 1.自定义协议&#xff08;应用层&#xff09; 1.1.应用层和传输层的关系 应用层和传输层的概述 应用层&#xff1a;位于网络协议的最高层…

Apollo9.0 PNC源码学习之Planning模块—— Lattice规划(四):纵向运动轨迹规划

参考文章: (1)Apollo6.0代码Lattice算法详解——Part5: 生成横纵向轨迹 (2)自动驾驶规划理论与实践Lattice算法详解 0 前言 纵向运动规划主要是车辆的速度规划,对应于车辆油门和刹车的控制 reference_line和reference_line_info的区别及联系:ReferenceLineInfo 结构中…

全网最最最详细Keepalive的详解

1 Keepalived简介 Keepalived是一款开源的、免费的高可用软件&#xff0c;广泛应用于互联网IT企业中&#xff0c;以其轻量级、配置简单、管理方便等特点受到青睐。以下是Keepalived的详细简介&#xff1a; 1.1 基本概念 定义&#xff1a;Keepalived是一个类似于Layer 3、4 &…

Nginx系列-负载均衡

文章目录 Nginx系列-负载均衡1. 负载均衡基础1.1 负载均衡定义1.2 Nginx负载均衡原理 2. 负载均衡策略2.1 轮询&#xff08;Round Robin&#xff09;2.2 加权轮询&#xff08;Weighted Round Robin&#xff09;2.3 IP哈希&#xff08;IP Hash&#xff09;2.4 最少连接&#xff…

JavaEE----Servlet过滤器

前言 在现代Web开发中&#xff0c;Servlet技术是Java EE&#xff08;Jakarta EE&#xff09;的核心部分。随着Web应用复杂性的增加&#xff0c;Servlet过滤器&#xff08;Filter&#xff09;提供了一种灵活的方法来对请求和响应进行处理 Servlet过滤器是一种特殊的Java对象&a…

C语言钥匙迷宫2.0

目录 开头程序程序的流程图程序游玩的效果结尾 开头 大家好&#xff0c;我叫这是我58。废话不多说&#xff0c;咱们直接开始。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <Windows.h> enum color {Y,B,R …

Linux 开机自动挂载共享文件设置

选择一个要共享的文件 点击确定 -> 确定 启动虚拟机 执行下面的命令 /YumSource 是我选择的共享文件夹&#xff0c;自行替换自已选择的文件夹 mkdir -p /mnt/hgfs cat >> /etc/fstab << EOF .host:/YumSource /mnt/hgfs fuse.vmhgfs-fuse allow_other defaul…

探索生成式AI在文档处理中的应用:llm Whisperer

在现代科技的快速发展中&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;正逐渐改变我们处理文档的方式。虽然许多生成式AI模型在处理文档时表现出色&#xff0c;但面对复杂文档时&#xff0c;大多数开源模型仍显得力不从心。甚至连GPT-4在某些情况下也会遇到…

性能测试-性能监控分析与调优(三)《实战-CPU瓶颈分析、内存问题分析、gc、tomcat性能调优,数据库监控-redis\mysql》

性能监控 使用命令监控 cpu瓶颈分析 top命令 在进行性能测试时使用top命令&#xff0c;界面如下 上图可以看出 - CPU 概况区&#xff1a; %Cpu(s): - us&#xff08;用户进程占用CPU的百分比&#xff09;, 和 sy&#xff08;系统进程占用CPU的百分比&#xff09; 的数…

【16】暴力递归改dp(上)

目录 一.机器人问题 二.最少硬币问题 一.机器人问题 题目&#xff1a;N表示位置1-N&#xff0c;S表示机器人开始位置&#xff0c;e表示结尾位置&#xff0c;k表示机器人必须走k步&#xff0c;问一共有多少种方法&#xff1f; 情况&#xff1a; 如果第1个位置&#xff0c;下次…

交通感知与车路协同系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设残哥 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目、 源…

PHP—MySQL(PHP连接数据库)

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 二、PHP 和 MySQL 的合作方式 三、PHP连接数据库 3.1、MySQLi拓展 ​编辑 3.2、建立与数据库的连接 &#xff08;4&#xff09;创建SQL语句 &#xff08;5&#xff09;获取结果 &#xff08;6&#xff09…

STM32(二):GPIO

GPIO(General Purpose Input Output)通用输入输出口 1.可配置为8种输入输出模式&#xff0c;引脚电平:0V~3.3V&#xff0c;部分引脚可容忍5V&#xff0c;输出模式下可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等&#xff0c;输入模式下…

在vscode使用markdown格式、自动补齐、以及快捷键

在扩展中搜索markdown all in one&#xff0c;下载使用即可。