SpringBoot学习记录

news2024/11/25 11:40:49

SpringBoot是用于加速Spring开发的。
我们先来看看如何使用SpringBoot来创建一个基于Web的程序,可以发现相较于SpringMVC其有巨大改变。
在这里插入图片描述
在这里插入图片描述

3.开发控制器类

 	@GetMapping("/{id}")
    public String getById(@PathVariable Integer id){
        System.out.println("id:"+id);
        System.out.println(port);
        return "hello springboot";
    }

在这里插入图片描述

在这里插入图片描述
在这里介绍一下SpringBoot的强大功能,这是一个集成了Tomcat容器的框架,在实际开发过程中,如果前端开发人员想要使用该项目的话则可以通过idea中带的package方法来创建一个可执行的jar包。

在这里插入图片描述
随后我们找到该文件夹所在的目录,在目录地址输入cmd,就可以直接切换到这个目录下了,随后输入Java -jar **.jar就可以执行了。
但在执行过程中出现了问题:

springboot-0.0.1-snapshot.jar中没有主清单属性

在这里插入图片描述
看到网上最多的原因是pom.xml文件中没有spring-boot-maven-plugin插件,然而我们查看pom.xml文件,发现是有配置插件spring-boot-maven-plugin的。
事实上这是由于该插件下进行了下面的配置才导致没有主类的。我们将其注释即可。

<configuration>
  <mainClass>com.wms.SpringbootVueWmsApplication</mainClass>
  <skip>true</skip>
</configuration>

再次运行,OK了

在这里插入图片描述

SpringBoot之所以能够这样快速启动,就是依赖了下面的这个插件所实现的

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

此外,为什么SpringBoot为何比Spring少了那么多配置呢,事实上,这都是由于SpringBoot为我们提供了大量的起步依赖。即含有starter的都是我们的起步依赖,而我们的程序要运行,依靠的便是引导类:Application

配置文件

在SpringBoot中主要有三种配置文件格式,分别是properties,yml以及yaml,其中我们日后最常用的便是yml格式的文件。

@Value直接读取

我们在配置文件中写入了配置信息后,这些配置信息该如何读取呢?
和我们之前的配置信息读取方式相同,使用@Value注解即可。

	@Value("${server.port}")
    private Integer port;
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id){
        System.out.println("id:"+id);
        System.out.println(port);
        return "hello springboot";
    }

但这种方式如果有很多个配置信息的话,我们岂不是要写很多个@Value注解,因此SpringBoot为我们提供了第二种配置文件读取方式,通过”环境“加载。

Environment(封装后读取)

	@Autowired
    private Environment environment;
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id){
        System.out.println("id:"+id);
        System.out.println(environment.getProperty("server.port"));
        return "hello springboot";
    }

实体类封装属性(封装后读取)

这种方式起到了一个遍历的作用,即其读取了所有的配置信息,但这依旧不是我们在开发中最常用的方式,下面介绍第三种方式。

server:
  port: 80
users:
  name: peng
  age: 20
  likes:
    - books
    - bike

定义映射类Users,并使用@Component声明为Bean,并使用@ConfigurationProperties来确定映射的数据

package com.example.springboot;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
@ConfigurationProperties(prefix = "users")
public class Users {
    private String name;
    private Integer age;
    private String[] likes;
    @Override
    public String toString() {
        return "Users{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", likes=" + Arrays.toString(likes) +
                '}';
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String[] getLikes() {
        return likes;
    }
    public void setLikes(String[] likes) {
        this.likes = likes;
    }
}

随后我们直接加载这个Bean就可以读取对应的配置信息了

	@Autowired
    private Users users;
    @GetMapping("/{id}")
    public String getById(@PathVariable Integer id){
        System.out.println("id:"+id);
        System.out.println(environment.getProperty("server.port"));
        System.out.println(users.toString());
        return "hello springboot";
    }

在这里插入图片描述

多环境开发配置

什么叫多环境开发配置呢,这是由于我们的环境不同,其配置也不相同导致的,那么我们该如何做呢?难道每次都要修改配置文件?

在这里插入图片描述
使用yml进行多环境配置,使用—可以将配置分开,使用spring.profiles.active设置要启用的环境,只有公共的则放到最上面。

#设置启用的环境
spring:
  profiles:
    active: dev
---
#开发环境
server:
  port: 80
spring:
  profiles: dev
---
#生成环境
server:
  port: 82
spring:
  profiles: pro
---
#测试环境
server:
  port: 83
spring:
  profiles: test
users:
  name: peng
  age: 20
  likes:
    - books
    - bike

此时我们访问连接时发现Users{name='null', age=null, likes=null},这是由于User的配置写在了测试环境中了,而目前我们启用的是开发环境。
上述这种配置方式采用的是—区分环境,在yml与yaml中都可以使用,而properties则是采用多文件区分环境,注意,在SpringBoot开发中配置文件的名字必须是application

在这里插入图片描述

多环境配置命令行参数

前面说过,我们可以将整个项目打包为jar包然后给测试人员进行测试,那么我们在发给测试人员前需要切换配置吗,事实上是不用的,我们可以在运行jar时进行指定,如下:

java -jar SpringBoot-0.0.1-SNAPSHOT.jar --spring.profiles.active=test

那么如果测试这个测试环境的端口已经被占用了呢,难道我们要重新修改端口再打包吗,不用的,我们 只需要如法炮制即可,我们可以在输入命令行时重新指定端口

java -jar SpringBoot-0.0.1-SNAPSHOT.jar --server.port=88

此外,SpringBoot默认对配置 文件进行分级,如果我们在application.yml中创建一个config文件夹并在里面重写一下application.yml,那么就会对原本的application.yml文件进行覆盖。其中3,4级是为了开发服务的,1,2级是为了测试服务的。

在这里插入图片描述

SpringBoot整合Junit

相较于Spring整合Junit,SpringBoot的实现更加简单。我们做的只是自动装配了UserService,contextLoads方法则是自动生成的,我们只需要在其内调用us.getAll方法即可。当然这个方法并没有什么特殊性,我们 可以随便改的。在这里不得不惊叹,SpringBoot用起来也太方便了吧。

@SpringBootTest
class ApplicationTests {
    @Autowired
    private UserService us;
    @Test
    void contextLoads() {
        us.getAll();
    }
}

事实上,这里运行test其实是加载了上面这个类,该类就相当于Spring中的配置文件。

在这里插入图片描述

即相当于下面的写法:

在这里插入图片描述

SpringBoot整合Mybatis

整合Mybatis需要重新创建一下,因为要引入Mybatis的依赖。
这里需要注意的是我们的MySQL是5.7的,因此这个8是不能用的,因此我们需要更换一下。

在这里插入图片描述

我们自己替换一下就可以了

 		<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>

此外,如果我们的配置文件发生了乱码,则可以通过setting将其设置为UTF-8来解决。

在这里插入图片描述
随后我们对Mybatis进行整合就可以了。
首先我们需要设定数据库的配置信息

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm_takeout
    username: root
    password: root

随后通过注解开发实现对应的Dao,与我们在Spring中的配置完全相同

package com.example.spingbootmybatis.dao;
import com.example.spingbootmybatis.domain.Menu;
import com.example.spingbootmybatis.domain.Users;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
@Mapper
public interface UserDao {
    @Select("select * from users")
    public List<Users> findAll();
    @Select("select * from users")
    public List<Users> show();
    public void edit(Users user);
    @Update("update users set money=money+#{money} where id=#{id}")
    public void inmoney(@Param("id") int id, @Param("money") int money);
    @Update("update users set money=money-#{money} where id=#{id}")
    public void outmoney(@Param("id") int id, @Param("money") int money);
    @Select("select * from menus where gname like '%${gname}%'")
    List<Menu> list(@Param("gname") String gname);
    @Select("select * from menus")
    List<Menu> lists();
}

至此,SpringBoot整合Mybatis就已经完成了。

在这里插入图片描述

SpringBoot整合SSM

前面的工作已经都完成了,那么接下来我们来使用SpringBoot整合SSM框架。

SpringBoot使用起来极为方便,我们只需要将对应的前端页面放到static这个文件夹下,随后配置好对应的Controller即可,这里博主使用了先前的一个项目进行重构,其前端框架为Layui。

在这里插入图片描述

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

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

相关文章

关于Linux中的history命令

前言&#xff1a;本文内容为实操学习记录&#xff0c;不具有调研价值&#xff0c;仅供参考&#xff01; 正文&#xff1a; 接触过Linux操作系统的朋友一般都知道history命令&#xff0c;直接输入history命令&#xff0c;会显示当前用户的历史输入记录。这个原理是linux会记录我…

了解一下npm i的流程与原理

流程 执行npm install&#xff0c;先判断有无lock文件。 1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的&#xff0c;老版本是树结构&#xff0c;可能会出现依赖重复安装的问题&#xff0c;老版本示意图如下&#xff1a; 作为前…

Python车道线偏离预警

程序示例精选 Python车道线偏离预警 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python车道线偏离预警》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推…

C语言-printf和scanf的区别详解

fprintf&#xff08;指定的格式写到文件里面。适用于所有的输出流&#xff0c;可以打印在屏幕上面&#xff09;fscanf&#xff08;指定的格式读取出来&#xff0c;适用于所有的输入流&#xff09; fprintf&#xff08;指定的格式写到文件里面&#xff09; 两个函数是一样的 打开…

EasyRecovery2024 安装步骤及功能特色介绍

在数字化时代&#xff0c;数据的重要性不言而喻。无论是个人用户还是企业用户&#xff0c;都可能面临数据丢失的风险。为了应对这一挑战&#xff0c;EasyRecovery作为一款专业的数据恢复软件&#xff0c;成为了越来越多人的选择。 EasyRecovery以其强大的功能和易用的界面&…

关于Kubernetes-v1.23.6-资源调度-StatefulSet-OnDelete当删除的时候才更新

前面提到的普通的滚动更新&#xff0c;都是修改完sts立即就会发生更新操作 而还有一种更新的策略为&#xff0c; OnDelete&#xff0c;即只有在 pod 被删除时会进行更新操作 还是先看一下web这个sts的当前更新策略如下&#xff1a; 这里我们修改&#xff0c;更新策略&#xf…

缓存数据库的意义、作用与种类详解

在现代计算机应用中&#xff0c;数据访问的性能往往是关键因素之一。随着数据量的增加和复杂应用的兴起&#xff0c;数据库的访问成本逐渐成为瓶颈。为了提高应用程序的响应速度、减轻后端数据库的负载压力&#xff0c;缓存数据库应运而生。 什么是缓存数据库&#xff1f; 缓存…

线程与同步

目录 一&#xff0c;线程概念 1&#xff0c;什么是线程 2&#xff0c;Linux 下的线程 3&#xff0c;POSIX 线程库 二&#xff0c;线程同步 1&#xff0c;数据不一致问题 2&#xff0c;如何解决这类问题 3&#xff0c;死锁 三&#xff0c;线程同步的运用 1&#xff0c…

知识图谱与大数据:区别、联系与应用

目录 前言1 知识图谱1.1 定义1.2 特点1.3 应用 2 大数据2.1 定义2.2 应用 3. 区别与联系3.1 区别3.2 联系 结语 前言 在当今信息爆炸的时代&#xff0c;数据成为了我们生活和工作中不可或缺的资源。知识图谱和大数据是两个关键概念&#xff0c;它们在人工智能、数据科学和信息…

Java基础之算数运算符的初级用法

运算符 运算符: 对字面量或者变量进行操作的符号 表达式: 用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式 不同运算符连接的表达式体现的是不同类型的表达式 一 .算数运算符 实践一下 加 减 乘 运行结果: 除 取模 运行结果 练习: 数值拆分 需求…

P5210A泰克P5210A高压差分探头

181/2461/8938产品概述&#xff1a; P5210A 是 Tektronix 的差分探头。差分探头是具有两个输入的有源探头。负输入和正输入连同驱动 50 欧姆电缆的地线以传输数字示波器通道的输出 泰克 P5210A 特性&#xff1a; 带宽&#xff1a;50 兆赫 差分电压&#xff1a;1000X&#xf…

LLMs之Grok-1.5:Grok-1.5的简介、安装和使用方法、案例应用之详细攻略

LLMs之Grok-1.5&#xff1a;Grok-1.5的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;xAI公司在不久前发布了Grok-1模型以及模型结构&#xff0c;揭示了公司到去年11月为止在大语言模型研发上的进步。2024年3月28日(美国时间)&#xff0c;xAI以“迅雷不及掩耳之势…

Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions(IA-YOLO)

1、总体概述 基于深度学习的目标检测在常规条件的数据集可以获得不错的结果&#xff0c;但是在环境、场景、天气、照度、雾霾等自然条件的综合干扰下&#xff0c;深度学习模型的适应程度变低&#xff0c;检测结果也随之下降&#xff0c;因此研究在复杂气象条件下的目标检测方法…

为什么要学Python?Python的优势在哪?

人生苦短&#xff0c;我用 Python 不知道从什么时候开始流行这句话 Python 是个什么神仙编程语言 为啥全世界都在鼓励孩子学 Python 简单容易上手 国内、国际的竞赛机会多&#xff0c;含金量足 Python 好就业、薪资高 下面且看详细分析 01 什么是Python / 科技编程老师…

变分信息瓶颈

变分信息瓶颈和互信息的定义 1 变分信息瓶颈 定义&#xff1a;变分信息瓶颈&#xff08;Variational Information Bottleneck&#xff09;是一种用于学习数据表示的方法&#xff0c;它旨在通过最小化输入和表示之间的互信息来实现数据的压缩和表示学习。这种方法通常用于无监…

安装docker 并搭建出一颗爱心树

1、docker介绍 Docker 是⼀个开源的容器运⾏时软件&#xff08;容器运⾏时是负责运⾏容器的软件&#xff09;&#xff0c;基于 Go 语 ⾔编写&#xff0c;并遵从 Apache2.0 协议开源。 Docker可以让开发者打包⾃⼰的应⽤以及依赖到⼀个轻量的容器中&#xff0c;然后发布到任何…

代码随想录训练营Day36:● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

435. 无重叠区间 题目链接 https://leetcode.cn/problems/non-overlapping-intervals/description/ 题目描述 思路 直接统计重叠区间的个数&#xff0c;就是需要删除的个数 public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,b)-> Intege…

【火猫TV】NBA:快船突然崩盘众人迷茫,都是续约惹的祸!

本赛季快船队的表现就像过山车一般&#xff0c;起起伏伏让人看得惊心动魄&#xff0c;他们在赛季初期一度找不到胜利的办法&#xff0c;后来威少主动担任替补&#xff0c;球队将组织大权给了哈登&#xff0c;然后战绩一路飙升。可是到了赛季末&#xff0c;快船队的胜率出现了大…

2024软件设计师备考讲义——UML(统一建模语言)

UML的概念 用例图的概念 包含 <<include>>扩展<<exted>>泛化 用例图&#xff08;也可称用例建模&#xff09;描述的是外部执行者&#xff08;Actor&#xff09;所理解的系统功能。用例图用于需求分析阶段&#xff0c;它的建立是系统开发者和用户反复…

HarmonyOS 应用开发之UIAbility组件启动模式

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景&#xff0c;系统提供了三种启动模式&#xff1a; singleton&#xff08;单实例模式&#xff09;multiton&#xff08;多实例模式&#xff09;specified&#xff08;指定实例模式&#xff09;…