当前位置: 首页 > news >正文

SpringBoot学习记录

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(封装后读取)

	@Autowiredprivate 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: pengage: 20likes:- 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;@Overridepublic 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就可以读取对应的配置信息了

	@Autowiredprivate 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: pengage: 20likes:- 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 {@Autowiredprivate UserService us;@Testvoid 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.Driverurl: jdbc:mysql://localhost:3306/ssm_takeoutusername: rootpassword: 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。

在这里插入图片描述

相关文章:

SpringBoot学习记录

SpringBoot是用于加速Spring开发的。 我们先来看看如何使用SpringBoot来创建一个基于Web的程序&#xff0c;可以发现相较于SpringMVC其有巨大改变。 3.开发控制器类 GetMapping("/{id}")public String getById(PathVariable Integer id){System.out.println("…...

财富池指标--通达信顾比均线实战指标免费源码

顾比均线是由两组均线构成&#xff0c;短期组为3、5、8、10、12、15。长期组为&#xff1a;30、35、40、45、50、60。顾比均线由澳大利亚的投资家戴若-顾比先生发明&#xff0c;因此叫顾比线。 顾比均线可以广泛运用于股票、期货和外汇交易中&#xff0c;只要是能运用K线图的投…...

AJAX(一):初识AJAX、http协议、配置环境、发送AJAX请求、请求时的问题

一、什么是AJAX 1.AJAX 就是异步的JS和XML。通过AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组合在一起使用的新方式。 2.XML 可扩展标记语言。XML被设计用来传输和…...

idea常用的快捷键总结:

idea常用的快捷键总结&#xff1a; Ctrl相关的&#xff1a; Ctrl F 在当前文件进行文本查找 &#xff08;必备&#xff09; Ctrl R 在当前文件进行文本替换 &#xff08;必备&#xff09; Ctrl Z 撤销 &#xff08;必备&#xff09; Ctrl Y 删除光标所在行 或 删除选中的…...

LeetCode 热题 100 题解(一):哈希部分

《LeetCode热题 100》 经过了两个多月&#xff0c;终于刷完了代码随想录的题目&#xff0c;现在准备开始挑战热题一百了&#xff0c;接下来我会将自己的题解以博客的形式同步发到力扣和 c 站&#xff0c;希望在接下来的征程中与大家共勉&#xff01; 题组一&#xff1a;哈希 题…...

C语言 | qsort()函数使用

目录&#xff1a; 1.qsort介绍 2.使⽤qsort函数 排序 整型数据 3.使⽤qsort函数 排序 结构体数据 4. qsort函数的模拟实现冒泡排序 qsort()函数 是一个 C语言编译器函数库自带的排序函数&#xff0c; 它可以对指定数组&#xff08;包括字符串&#xff0c;二维数组&#x…...

继承的特点 | java

/*Java中继承的特点&#xff1a;A:Java只支持单继承&#xff0c;不支持多继承。 B:Java支持多层继承(继承体系),间接继承 */class Father(){} class Mother(){}class son extends Father(){} // 正确 class son2 extends Father , Mother {} // 不正确 1. Java只支持单继承…...

6、jenkins项目构建类型-项目类型介绍

文章目录 一、自由风格项目1、拉取代码2、演示改动代码后的持续集成二、Maven项目构建三、Pipeline流水线项目构建(☆☆☆)1、Pipeline简介(1)概念(2)使用Pipeline有以下好处(3)如何创建Jenkins Pipeline呢?2、安装Pipeline插件3、Pipeline语法快速入门(1)Declarati…...

指针函数的应用——找出哪些学生有不及格的科目

下面的代码实现了以下功能&#xff1a; 定义了一个函数 getFailStudent&#xff0c;它接收一个指向整数数组的指针&#xff0c;并遍历该数组&#xff0c;查找是否存在不及格的成绩。如果找到了不及格的成绩&#xff0c;就返回指向不及格学生所在行的指针&#xff1b;否则返回 N…...

【微服务】Gateway

文章目录 1.基本介绍官方文档&#xff1a;https://springdoc.cn/spring-cloud-gateway/#gateway-starter1.引出网关2.使用网关服务架构图3.Gateway网络拓扑图&#xff08;背下来&#xff09;4.Gateway特性5.Gateway核心组件1.基本介绍2.断言3.过滤 6.Gateway工作机制 2.搭建Gat…...

王道C语言督学营OJ课后习题(课时14)

#include <stdio.h> #include <stdlib.h>typedef char BiElemType; typedef struct BiTNode{BiElemType c;//c 就是书籍上的 datastruct BiTNode *lchild;struct BiTNode *rchild; }BiTNode,*BiTree;//tag 结构体是辅助队列使用的 typedef struct tag{BiTree p;//树…...

Filter、Listener、AJAX

Filter 概念&#xff1a;Filter 表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、 Listener)之一。 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、统一编码处理、敏感…...

FastAPI+React全栈开发04 FastAPI概述

Chapter01 Web Development and the FARM Stack 04 Introducing FastAPI FastAPIReact全栈开发04 FastAPI概述 Now we will look at a brief introducion to the Python REST-API framework of choice - FastAPI. Additionally, we will go over a high-level overview of t…...

基于单片机的二维码LCD显示控制设计

**单片机设计介绍&#xff0c;基于单片机的二维码LCD显示控制设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的二维码LCD显示控制设计是一个集硬件、软件与通信于一体的综合性项目。此设计的主要目标是实现单片机…...

Ubuntu20.04下PCL安装,查看,卸载等操作

Ubuntu20.04下PCL安装&#xff0c;查看&#xff0c;卸载等操作 项目来源 https://github.com/PointCloudLibrary/pclhttps://pointclouds.org/documentation/modules.htmlhttps://pcl.readthedocs.io/projects/tutorials/en/master/ 点云学习&#xff1a; https://github.c…...

Android TargetSdkVersion 30 安装失败 resources.arsc 需要对齐且不压缩。

公司项目&#xff0c;之前targetSDKVersion一直是29&#xff0c;近期小米平台上架强制要求升到30&#xff0c;但是这个版本在android12上安装失败&#xff0c;我用adb命令安装&#xff0c;报错如下图 adb: failed to install c: Program Files (x86)(0A_knight\MorkSpace \Home…...

c++20中的jthread再谈

一、介绍 在前面的C20新功能中&#xff0c;简单的介绍过相关的std::jthread的应用。当时觉得它虽然比std::thread方便一些&#xff0c;但也没有多大的优势。可在后面的不断的学习中&#xff0c;发现std::jthread的使用上确实有优秀之处&#xff0c;相对于传统的线程编程&#…...

Fastgpt 无法启动或启动后无法正常使用的讨论(启动失败、用户未注册等问题这里)

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排&#xff0c;从而实现复杂的问答场景&#xff01; FastGPT是非常实用并且相当厉害的个人知识库AI项目&#xff0c;项目是非常…...

Rust 实战练习 - 7. FFI, 库, ABI, libc

FFI FFI&#xff08;Foreign Function Interface&#xff09;是这样一种机制&#xff1a;用一种编程语言写的程序能调用另一种编程语言写的函数&#xff08;routines&#xff09;。 调用约定&#xff0c;类型表示和名称修饰这三者的统称&#xff0c;即是众所周知的应用二进制…...

vue实现把Ox格式颜色值转换成rgb渐变颜色值(开箱即用)

图示&#xff1a; 核心代码&#xff1a; //将0x格式的颜色转换为Hex格式&#xff0c;并计算插值返回rgb颜色 Vue.prototype.$convertToHex function (colorCode1, colorCode2, amount) {// 确保输入是字符串&#xff0c;并检查是否以0x开头let newCode1 let newCode2 if (t…...

从零开始:用正则表达式处理日期时间格式的完整指南

从零开始&#xff1a;用正则表达式处理日期时间格式的完整指南 在数据处理和文本分析中&#xff0c;日期时间格式的校验一直是个高频需求。无论是表单验证、日志分析还是数据清洗&#xff0c;确保日期时间格式的正确性都至关重要。正则表达式作为文本处理的瑞士军刀&#xff0c…...

轻量级OpenClaw监控:nanobot镜像运行状态仪表盘搭建

轻量级OpenClaw监控&#xff1a;nanobot镜像运行状态仪表盘搭建 1. 为什么需要监控OpenClaw运行状态 上周我在本地部署了基于nanobot镜像的OpenClaw环境&#xff0c;用来对接Qwen3-4B模型实现自动化办公。刚开始使用时一切顺利&#xff0c;直到某天早上发现OpenClaw服务已经停…...

springboot交通道路监测感知与车路协同系统可视化大屏

目录技术架构设计数据采集与处理可视化大屏功能模块系统集成与部署关键技术点测试与迭代项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术架构设计 采用SpringBoot作为后端框架&#xff0c;提供RESTful API接口&#xff1b;…...

Ubuntu 22.04 开机卡在/dev/sda3: clean的磁盘空间分析与扩容实战

1. 问题现象与初步诊断 当你兴冲冲地按下Ubuntu 22.04的开机键&#xff0c;却看到屏幕卡在/dev/sda3: clean这个神秘提示时&#xff0c;那种感觉就像开车时突然遇到路障——明明昨天还能正常使用&#xff0c;今天怎么就罢工了&#xff1f;这种情况我遇到过不止一次&#xff0c;…...

LingBot-Depth部署避坑指南:常见问题与解决方案汇总

LingBot-Depth部署避坑指南&#xff1a;常见问题与解决方案汇总 1. 引言&#xff1a;为什么需要这份指南 当你第一次尝试部署LingBot-Depth时&#xff0c;可能会遇到各种意想不到的问题——从模型下载失败到GPU内存不足&#xff0c;从端口冲突到奇怪的输出结果。这些问题往往…...

手把手教你用YOLOv5训练自己的交通标志数据集(从LabelImg标注到模型部署)

从零构建YOLOv5交通标志检测器的实战指南 在自动驾驶和智能交通系统快速发展的今天&#xff0c;准确识别道路标志已成为计算机视觉领域的重要应用场景。不同于传统图像处理方法&#xff0c;基于深度学习的目标检测技术能够适应复杂环境变化&#xff0c;而YOLOv5以其卓越的速度-…...

RCLAMP0542T.TCT‌静电保护TVS 二极管阵列 SEMTECH 电子元器件IC 芯片

RCLAMP0542T.TCT‌ 是由 ‌SEMTECH‌ 公司推出的一款超低电容、双通道ESD&#xff08;静电放电&#xff09;保护 TVS 二极管阵列&#xff0c;具备0.45pF 超低电容、5A 浪涌承受能力和超小型 SLP1610P4T 封装&#xff0c;专为高速数据接口设计&#xff0c;广泛应用于通信设备、消…...

清音刻墨镜像免配置亮点:内置10+中文领域词典(医疗/法律/IT)开箱即用

清音刻墨镜像免配置亮点&#xff1a;内置10中文领域词典&#xff08;医疗/法律/IT&#xff09;开箱即用 1. 为什么字幕对齐需要专业词典&#xff1f; 做视频字幕的朋友都知道&#xff0c;最头疼的不是生成文字&#xff0c;而是让文字和声音完美对齐。普通字幕工具遇到专业术语…...

告别丑曲线!PPT波浪线绘制保姆级教程(含压缩技巧)

告别丑曲线&#xff01;PPT波浪线绘制保姆级教程&#xff08;含压缩技巧&#xff09; 在商务演示、学术报告或品牌提案中&#xff0c;一条流畅的波浪线往往能成为视觉焦点——它既能引导观众视线&#xff0c;又能传递动态趋势。但PPT自带的形状库中&#xff0c;那些生硬的预设曲…...

AI 自动获客系统正在重构企业线索获取方式

在数字化营销持续深化的当下&#xff0c;企业获客成本逐年攀升&#xff0c;传统 “广撒网” 的线索获取模式早已难以为继。销售团队大量时间耗费在无效线索筛选上&#xff0c;真正用于精准跟进、成交的时间不足两成&#xff0c;人力与投入的失衡让企业陷入增长内耗。而 AI 自动…...