springboot简述

news2024/11/24 16:28:30

文章目录

    • 一、SpringBoot简介
      • 1、springboot快速入门
        • 1、开发步骤
          • 1.创建springboot入门项目
          • 2.创建controller
          • 3.启动服务器
          • 4.测试
        • 2、对比spring
        • 3、springboot工程快速启动
        • 4.切换web服务器
    • 二、配置文件
      • 1.配置文件格式
      • 2.properties配置文件
      • 3.yaml格式配置文件
        • 1.语法规则
        • 2.yaml配置文件的数据读取
          • 1.使用@value注解
          • 2.使用Environment对象
          • 3.自定义对象
    • 三、springboot整合junit
    • 四、springboot整合mybatis
      • 1.回顾一下spring整合mybatis
      • 2.springboot整合mybatis
        • 1.创建一个全新的模块导入相关依赖
        • 2.定义实体类
        • 3.定义dao接口
        • 4.定义测试类
        • 5.编写配置
        • 6.注意
        • 7.运行测试类
    • 五、结语

一、SpringBoot简介

SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程

使用了 Spring 框架后已经简化了我们的开发。而 SpringBoot 又是对 Spring 开发进行简化的,可想而知 SpringBoot 使用的简单及广泛性。

1、springboot快速入门

1、开发步骤

SpringBoot 开发起来特别简单,分为如下几步:

  • 创建新模块,选择Spring初始化,并配置模块相关基础信息
  • 选择当前模块需要使用的技术集
  • 开发控制器类
  • 运行自动生成的Application类
1.创建springboot入门项目

在这里插入图片描述
在这里插入图片描述
经过以上步骤后就创建了如下结构的模块,它会帮我们自动生成一个 Application 类,而该类一会在启动服务器时会用到,其实它就是服务器,springboot自身包含服务器,不需要我们导入服务器了。
在这里插入图片描述

== 注意:==

  1. 在创建好的工程中不需要创建配置类

  2. 创建好的项目会自动生成其他的一些文件,而这些文件目前对我们来说没有任何作用,所以可以将这些文件删除。

    可以删除的目录和文件如下:

    • .mvn
    • .gitignore
    • HELP.md
    • mvnw
    • mvnw.cmd
2.创建controller

com.example.controller 包下创建 BookController ,代码如下:

@RestController
@RequestMapping("/books")
public class BookController {
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id){
        System.out.println("id==>"+id);
        return "hello,springboot!";
    }
}

在这里插入图片描述

3.启动服务器

运行 SpringBoot 工程不需要使用本地的 Tomcat 和 插件,只运行项目 com.example 包下的 Application 类,我们就可以在控制台看出如下信息
在这里插入图片描述

4.测试

使用apifox工具进行测试
在这里插入图片描述
在这里插入图片描述

至此入门案例已经开发完成,我们写的只有controller层的一些内容,复杂的配置都省略了。

2、对比spring

在这里插入图片描述

  • 坐标

    Spring 程序中的坐标需要自己编写,而且坐标非常多

    SpringBoot 程序中的坐标是我们在创建工程时进行勾选自动生成的

  • web3.0配置类

    Spring 程序需要自己编写这个配置类。这个配置类大家之前编写过,肯定感觉很复杂

    SpringBoot 程序不需要我们自己书写

  • 配置类

    Spring/SpringMVC 程序的配置类需要自己书写。而 SpringBoot 程序则不需要书写。

注意:基于Idea的 Spring Initializr 快速构建 SpringBoot 工程时需要联网。

3、springboot工程快速启动

以后我们和前端开发人员协同开发,而前端开发人员需要测试前端程序就需要后端开启服务器,这就受制于后端开发人员。为了摆脱这个受制,前端开发人员尝试着在自己电脑上安装 TomcatIdea ,在自己电脑上启动后端程序,这显然不现实。

我们后端可以将 SpringBoot 工程打成 jar 包,该 jar 包运行不依赖于 TomcatIdea 这些工具也可以正常运行,只是这个 jar 包在运行过程中连接和我们自己程序相同的 Mysql 数据库即可。这样就可以解决这个问题,如下图
在这里插入图片描述
在打包之前确认自己是否导入打包插件,在我们创建springboot工程时默认是给我们导入好的,这里只是提一下,如果没有这个插件,打包好的jar包是有问题的。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.3.7.RELEASE</version>
</plugin>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入命令java -jar springboot_01-0.0.1-SNAPSHOT.jar启动工程,启动完成后我们依然可以通过apifox进行测试
在这里插入图片描述

4.切换web服务器

现在我们启动工程使用的是 tomcat 服务器,那能不能不使用 tomcat 而使用 jetty 服务器,而要切换 web 服务器就需要将默认的 tomcat 服务器给排除掉,怎么排除呢?使用 exclusion 标签
在这里插入图片描述
在这里插入图片描述
这样服务器就切换成功了,测试方法不变。

二、配置文件

1.配置文件格式

在这里以端口号的编写举例,主要有三种格式

  • application.properties

    server.port=80
    
  • application.yml

    server:
    	port: 81
    
  • application.yaml

    server:
    	port: 82
    

注意:SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同而已。

2.properties配置文件

在这里简单配置了一下应用名称和端口号

# 应用名称
spring.application.name=springboot_01
# 应用服务 WEB 访问端口
server.port=8080

3.yaml格式配置文件

YAML(YAML Ain’t Markup Language),一种数据序列化格式。

最开始我们使用的是xml,格式如下:

<enterprise>
    <name>mu</name>
    <age>18</age>
    <tel>111111</tel>
</enterprise>

properties 类型的配置文件如下

enterprise.name=mu
enterprise.age=18
enterprise.tel=111111

yaml 类型的配置文件内容如下

enterprise:
	name: mu
	age: 18
	tel: 111111

优点:

  • 容易阅读

    yaml 类型的配置文件比 xml 类型的配置文件更容易阅读,结构更加清晰

  • 容易与脚本语言交互

  • 以数据为核心,重数据轻格式

    yaml 更注重数据,而 xml 更注重格式

YAML 文件扩展名:

  • .yml (主流)
  • .yaml

上面两种后缀名都可以,以后使用更多的还是 yml 的。

1.语法规则

  • 大小写敏感
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)空格的个数并不重要,只要保证同层级的左侧对齐即可。
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔

核心规则:数据前面要加空格与冒号隔开

数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔,例如

enterprise:
  name: mu
  age: 18
  tel: 111111
  subject:
    - Java
    - 前端
    - 大数据

2.yaml配置文件的数据读取

1.使用@value注解

注解中用于读取属性名引用方式是:${一级属性名.二级属性名……}

我们可以在 BookController 中使用 @Value 注解读取配合文件数据,如下

@RestController
@RequestMapping("/books")
public class BookController {
    @Value("${server.port}")
    private Integer port;
    @Value("${enterprise.name}")
    private String name;
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id){
        System.out.println(port);
        System.out.println(name);
        return "hello,springboot!";
    }
}

我们创建一个enterprise实体类来封装数据

public class Enterprise {
    private String name;
    private int age;
    private String tel;
    private String[] subject;
	//setter and getter
    //toString
}

写yaml配置文件

server:
  port: 81
enterprise:
  name: mu
  age: 18
  tel: 11111
  subject:
    - Java
    - 前端
    - 大数据

测试
在这里插入图片描述
在这里插入图片描述

2.使用Environment对象

上面方式读取到的数据特别零散,SpringBoot 还可以使用 @Autowired 注解注入 Environment 对象的方式读取数据。这种方式 SpringBoot 会将配置文件中所有的数据封装到 Environment 对象中,如果需要使用哪个数据只需要通过调用 Environment 对象的 getProperty(String name) 方法获取。具体代码如下:

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private Environment env;
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id) {
        System.out.println(env.getProperty("server.port"));
        System.out.println(env.getProperty("enterprise.name"));
        return "hello,springboot!";
    }
}

注意:这种方式,框架内容大量数据,而在开发中我们很少使用。

3.自定义对象

SpringBoot 还提供了将配置文件中的数据封装到我们自定义的实体类对象中的方式。具体操作如下:

  • 将实体类 bean 的创建交给 Spring 管理。

    在类上添加 @Component 注解

  • 使用 @ConfigurationProperties 注解表示加载配置文件

    在该注解中也可以使用 prefix 属性指定只加载指定前缀的数据

  • BookController 中进行注入

Enterprise 实体类内容如下:

@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
    private String name;
    private int age;
    private String tel;
    private String[] subject;
	//setter and getter
    //toString
}

BookController 内容如下:

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private Enterprise ent;
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id) {
        System.out.println(ent.getName());
        System.out.println(ent.getSubject()[0]);
        return "hello,springboot!";
    }
}

注意:

使用第三种方式,在实体类上有如下警告提示
在这里插入图片描述

这个警告提示解决是在 pom.xml 中添加如下依赖即可

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

运行测试
在这里插入图片描述
在这里插入图片描述

三、springboot整合junit

步骤:

  • 在测试类上添加 SpringBootTest 注解
  • 使用 @Autowired 注入要测试的资源
  • 定义测试方法进行测试

创建一个全新springboot项目,创建时导入junit测试依赖
在这里插入图片描述
在这里插入图片描述

com.example.service 下创建 BookService 接口,内容如下

public interface BookService {
    public void save();
}

com.example.service.impl 包写创建一个 BookServiceImpl 类,使其实现 BookService 接口,内容如下

@Service
public class BookServiceImpl implements BookService {
    public void save() {
        System.out.println("book service is running ...");
    }
}

编写测试类

@SpringBootTest
class SpringbootJunitApplicationTests {
    @Autowired
    private BookService bookService;
    @Test
    void save() {
        bookService.save();
    }
}

运行服务器
在这里插入图片描述
==注意:==这里的引导类所在包必须是测试类所在包及其子包。

例如:

  • 引导类所在包是 com.example
  • 测试类所在包是 com.example
  • 一定要在实现类上加上@service使其能够被spring加载为bean管理,否则会报错

如果不满足这个要求的话,就需要在使用 @SpringBootTest 注解时,使用 classes 属性指定引导类的字节码对象。如 @SpringBootTest(classes = Springboot07TestApplication.class)

四、springboot整合mybatis

1.回顾一下spring整合mybatis

Spring 整合 Mybatis 需要定义很多配置类

  • SpringConfig 配置类

    • 导入 JdbcConfig 配置类

    • 导入 MybatisConfig 配置类

      @Configuration
      @ComponentScan("com.example")
      @PropertySource("classpath:jdbc.properties")
      @Import({JdbcConfig.class,MyBatisConfig.class})
      public class SpringConfig {
      }
      
  • JdbcConfig 配置类

    • 定义数据源(加载properties配置项:driver、url、username、password)

      public class JdbcConfig {
          @Value("${jdbc.driver}")
          private String driver;
          @Value("${jdbc.url}")
          private String url;
          @Value("${jdbc.username}")
          private String userName;
          @Value("${jdbc.password}")
          private String password;
      
          @Bean
          public DataSource getDataSource(){
              DruidDataSource ds = new DruidDataSource();
              ds.setDriverClassName(driver);
              ds.setUrl(url);
              ds.setUsername(userName);
              ds.setPassword(password);
              return ds;
          }
      }
      
  • MybatisConfig 配置类

    • 定义 SqlSessionFactoryBean

    • 定义映射配置

      @Bean
      public MapperScannerConfigurer getMapperScannerConfigurer(){
          MapperScannerConfigurer msc = new MapperScannerConfigurer();
          msc.setBasePackage("com.example.dao");
          return msc;
      }
      
      @Bean
      public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){
          SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
          ssfb.setTypeAliasesPackage("com.example.domain");
          ssfb.setDataSource(dataSource);
          return ssfb;
      }
      

2.springboot整合mybatis

1.创建一个全新的模块导入相关依赖

在这里插入图片描述
在这里插入图片描述

2.定义实体类

com.example.domain 包下定义实体类 User,内容如下

public class User {
    private Integer id;
    private String name;
    //setter and getter
    //toString
}

3.定义dao接口

@Mapper
public interface UserDao {
    @Select("select * from tbl_user where id = #{id}")
    public User getById(Integer id);
}

4.定义测试类

@SpringBootTest
class SpringbootMybatisApplicationTests {
    @Autowired
    private UserDao userDao;
    @Test
    void testGetById() {
        User user = userDao.getById(3);
        System.out.println(user);
    }
}

5.编写配置

我们代码中并没有指定连接哪儿个数据库,用户名是什么,密码是什么。所以这部分需要在 SpringBoot 的配置文件中进行配合。

使用druid数据源

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.16</version>
</dependency>

这里我使用的是创建springboot项目后自带的properties配置文件,个人感觉还挺好用的,我们对里面的一些配置进行修改

# 应用名称
spring.application.name=springboot_mybatis
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.example.mybatis.entity
# 数据库驱动:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=****
spring.datasource.password=****

6.注意

Mybatis 会扫描接口并创建接口的代码对象交给 Spring 管理,但是现在并没有告诉 Mybatis 哪个是 dao 接口。而我们要解决这个问题需要在BookDao 接口上使用 @Mapper

注意:

SpringBoot 版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区 jdbc:mysql://localhost:3306/blue?serverTimezone=UTC,或在MySQL数据库端配置时区解决此问题

7.运行测试类

在这里插入图片描述
在这里插入图片描述

至此springboot整合mybatis完成,主要就是在创建springboot工程时导入依赖,然后编写接口,在测试类中注入接口,在接口上使用**@mapper注解让其被spring管理**并加载为一个bean

五、结语

感谢各位大佬的浏览,有什么问题大家可以指出,私信或者评论都是可以的,互相学习~

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

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

相关文章

【C++天梯计划】1.10 二叉树(binary tree)

文章目录什么是二叉树&#xff1f;二叉树的定义二叉树的基本形态二叉树的性质例题1&#xff1a;二叉树的遍历题目描述输入输出样例代码例题2&#xff1a;哈夫曼树题目描述输入输出样例代码&#x1f386;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&…

学成在线页面设计案例

html结构 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content"widthdevice-width…

沉睡者IT - Web3采用现状:哪些企业采用了Web3,效果如何?

欢迎关注沉睡者IT&#xff0c;点上面关注我 ↑ ↑ 作为 Web 3 世界的“原住民”&#xff0c;我们已经能够看到个人和企业越来越多地尝试 Web 3 机制&#xff0c;推出 NFT、加密资产和数字商品。 了解他们为什么这样做、他们追求什么目标、哪些机制的效果最好和最差对我们来说…

python主题建模可视化LDA和T-SNE交互式可视化

我尝试使用Latent Dirichlet分配LDA来提取一些主题。 最近我们被客户要求撰写关于主题建模的研究报告&#xff0c;包括一些图形和统计输出。 本教程以自然语言处理流程为特色&#xff0c;从原始数据开始&#xff0c;准备&#xff0c;建模&#xff0c;可视化论文。 我们将涉及…

142.创建序列化类、序列化测试、反序列化测试

1.创建序列化类 什么是序列化&#xff0c;为什么要序列化&#xff1f; 当前web api应用中&#xff0c;前端要用到从后台返回的数据来渲染页面的时候&#xff0c;一般都是使用的json类型的数据&#xff0c;因为json类型简单直观便于理解&#xff0c;那么就需要在django框架中&am…

openEuler 通过 手工方式 安装 ceph 步骤

ceph集群在openEuler手工安装过程openEuler手工安装ceph 安装步骤前置要求1.openEuler版本2. Python 33. Systemd4. Time synchronization (such as chrony or NTP)5. LVM2 for provisioning storage devices安装1. 创建用户ceph2. 安装 ceph3. 生成配置项3.1 机器及组件规划列…

【Confluence】预览中文附件出现乱码,离线Linux下安装字体

what: confluence页面预览含有中文的附件时乱码 why&#xff1a;Linux服务器上 缺少中文字体 how&#xff1a; 一、安装字体 1、拷贝字体&#xff1a;linux上/usr/share/fonts/路径下新建目录msttcore&#xff0c;将windows的C:\Windows\Fonts的字体文件拷贝到/usr/share/fonts…

Mac Typora + PicGo + Github配置图床

Mac Typora PicGo Github配置图床 为了能把自己整理的博客发到CSDN上集集赞又介于一张张贴图很麻烦&#xff0c;所以搞了搞图床试试效果 下载PicGo 会魔法的建议直接爬长城&#xff1a;PicGo 不会魔法的用山大的镜像&#xff1a;PicGo Github图床设置 新建项目 随便起个…

详解:进程程序替换

目录一、前言二、什么是进程程序替换&#xff1f;三、进程程序替换的原理四、为什么要进行进程程序替换&#xff1f;五、如何进行进程程序替换&#xff1f;(常见进程程序替换系统调用接口)六、利用所学综合知识实现一个shell总结一、前言 一般情况下&#xff0c;对应的语言写的…

ELMO语言模型

ELMOELMO提出背景&#xff1a;解决一词多义问题。模型结构&#xff1a;双层双向的LSTM&#xff0c;字符卷积&#xff0c;第一层lstm表示更多的句法特征&#xff0c;第二层lstm表示更多的语义特征从ELMO开始以后学的语言模型都是预训练语言模型。预训练模型&#xff1a;1.预训练…

微机-------输入/输出接口(第六章)

目录 输入/输出接口概述输入/输出接口的功能CPU与输入/输出接口之间的信息⭐⭐输入/输出端口的编址方式统一编址独立编址输入/输出接口概述 CPU与外部设备进行信息交换时的困难: ①CPU和外设的速度差异非常大 ②CPU不能和外设直接通过引脚连接 注意: CPU和外设之间必须要设置…

5G LDPC polar 3GPP 定案过程

前言 看到中科大袁老师一段关于3GPP 组织 在 5G LDPC, polar 编解码定案过程&#xff0c;简单分享一下 一 简介 整个方案上百家公司整整争论了一年,最终定下来 其里碑阶段分3段如下&#xff1a; 二 主要争论点 当初主要有两大纠纷&#xff1a; 1&#xff1a; 数字信道 和控制…

基于thinkphp校园二手交易网站#毕业设计

随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 东方二手交易网站设计管理系统网站主要的功能模块包括首页、个人中心、卖家管理、买家信息管理、商品信息管理、订单信息管理、商品分类管理、系统管理…

基于51单片机电子微波炉控制系统(源程序+仿真+原理图+全套资料)

资料编号&#xff1a;203 功能介绍&#xff1a; 该电子微波炉采用51单片机制作&#xff0c;有基本的加热、冷却、启动、停止等功能&#xff0c;并通过MCU 控制其加热、冷却时间&#xff0c;LED 数码管显示时间。程序采用C语言编写&#xff0c;仿真使用Proteus&#xff0c;程序…

Redis的分布式锁问题(十)最强分布式锁工具:Redisson

Redisson的引入 我们先来看看之前的基于setnx实现的分布式锁存在的问题&#xff1a; 我们之前实现的分布式锁是基于redis的setnx命令的特性的&#xff01; 但是&#xff0c;这样子实现起来会有很多弊端&#xff01; 不可重入 简单的来说就是一旦setnx [key] [value]后&…

这才是图扑数字孪生污水处理厂该有的样子

近年来&#xff0c;智慧水务、数字水务成为水务行业的热点领域。对于污水处理领域&#xff0c;如何贯彻落实双碳战略&#xff0c;积极推进智慧水厂建设&#xff0c;显得尤为关键。 图扑软件依托自主研发的 HT for Web 产品&#xff0c;并结合视频融合、BIM、5G、物联网、云计算…

matplotlib 中子图subplot 绘图时标题重叠解决办法

引言 使用Python的matplotlib库绘制子图发现标题发生了重叠。 原来的代码&#xff1a; plt.rcParams[font.family][SimHei] datayear_genfor i in range(1,11):plt.subplot(5,2,i)typetype_df.index[:][i-1]setplot_TypeTime(i,data,type)plt.show()上网上寻找解决办法。 按照…

Allegro添加渐近线操作指导

Allegro添加渐近线操作指导 Allegro支持添加渐近线,让线宽变化的地方进行圆环的过渡,对于射频信号优化有很大帮助,类似下图 具体操作如下 首先设置参数,route-Gloss-Parameters 点击Fillet and Taper Trace前面的方框 勾选Allowed DRC, Unused Nets 勾选Tapered Trac…

BLUElegend传奇引擎不使用路由器架设单传奇的办法

使用BLUE LEGEND架设传奇私发服单机的朋友&#xff0c;是不是因为找不到路由器而无法架设单机服务端呢&#xff0c;这里介绍一种方法不需要买路由器来架设。 为什么LEG引擎需要路由器才能架设呢&#xff1f; 网上找了很多教程都得不到答案&#xff0c;有些人说是为了固定ip地址…

[附源码]计算机毕业设计SpringBoot网上鲜花购物系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…