B058-SpringBoot
目录
- springboot
- 概念与作用
- 入门案例
- springboot运行方式
- 热部署
- 配置文件
- Profile多环境支持
- 整合测试-springboot-test
- Springboot-web
- 1.返回json数据
- 2.返回页面(模板技术)thymeleaf
- 1.导入thymeleaf依赖
- 2.模板文件
- 3.controller
- 4.启动类
- SSM整合
- 1.导包
- 2.项目目录结构+配置文件+扫描注解
- 3.测试
- 事务的传播机制
springboot
概念与作用
springboot是为 spring服务的,为简化Spring项目配置而生
它使用maven的方式对Spring应用开发进行进一步封装和简化
是用来简化spring应用搭建,开发,部署,监控的开发工具
简化Spring应用的搭建,开发,部署,监控的开发工具
简单的说,它使用maven的方式对Spring应用开发进行进一步封装和简化。
提供自动化配置
使编码更简单,使配置更简单,使部署更简单,使监控更简单
入门案例
创建Maven父项目和子项目
导入Spring Boot依赖
父节点添加parent依赖管理 子节点添加spring-boot-starter-web依赖
编码测试
新建一个Controller类
新建启动类
浏览器测试代码运行
<!--groupId:打包后放到本地仓库的路径artifactID:模块ID,同项目名
-->
<groupId>cn.itsource</groupId>
<artifactId>springboot-parent</artifactId>
<!--打包jar/war:将当前项目打包成jar或者warpom:代表当前项目是父项目,不写任何java代码,只用来管理子项目和插件maven-plugin:将当前项目打包成maven插件(牛)
-->
<packaging>pom</packaging>
父子项目在pom.xml文件的互相定位

springboot运行方式
1.直接点击main方法
2.使用插件运行
3.打包运行
配置打包依赖 用package命令 到jar包所在路径cmd打开黑窗口 运行jar
热部署
1.添加依赖
2.启动项目
3.改代码
4.重新编译(关键)
配置文件
application.yml
application.properties (首选)
1.有了properties 可以存在yml吗? 可以存在
2.如果同时存在,我该用谁? 优先用properties,但是可以同时使用不一样的配置
yml(推荐)
冒号
空格 回车/换行 缩进/tab (最后一个值,只需要空格)
Profile多环境支持
1.多文档块 (不推荐使用)
将所有的环境配置写到一个yml中,通过—(必须是三个横杆)做分隔

2.多文件方式
application-环境名.yml active表示生效环境

整合测试-springboot-test
1.基本测试 junit
2.基于Spring的测试在测试类加注解@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")
3.SpringBoot测试 - 使用流程导对应包/依赖 引入测试依赖包MyBean @Component启动类 @SpringBootApplication psvm SpringApplication测试类 @RunWith(SpringRunner.class) @SpringBootTest(classes = App.class)
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApp.class)
public class TestSpringBoot {@AutowiredMyBean myBean;@Testpublic void testHello(){System.out.println(myBean);}
}
Springboot-web
1.返回json数据
如我们的controller中的所有方法,返回的都是json格式
那么请你使用:@RestController === @Controller + @ResponseBody
2.返回页面(模板技术)thymeleaf

1.导入thymeleaf依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.模板文件
页面引入thymeleaf命名空间以支持th属性,使用th属性获取来自controller里model的数据
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>aaa</title>
</head>
<body><div th:text="${msg}">你好大兄弟</div>
</body>
</html>
3.controller
后端用model往页面添加数据,返回页面
@Controller
@RequestMapping("/thy")
public class ThyController {@RequestMapping("/index")public String toIndex(Model model){model.addAttribute("msg", "你好,thymeleaf!!!");return "hello";//页面路径/名称}
}
因为thymeleaf是页面,需要放置到资源文件中,SpringBoot的默认配置会到resources/templates/找模板

4.启动类
SSM整合
1.导包
导入mybatis核心包(mysql+jdbc)、Mybatis提供的SpringBoot依赖包、SpringBoot测试包
<dependencies><!-- mysql 数据库驱动. --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--Mybatis提供的SpringBoot依赖包--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.1.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies>
2.项目目录结构+配置文件+扫描注解
项目目录结构 domain query mapper service controller

核心配置文件yml (数据源四大金刚 扫描别名和扫描文件路径)
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql:///mybatisusername: rootpassword: rootmybatis:type-aliases-package: cn.itsource.domain,cn.itsource.query # 可免除实体类@Component注解mapper-locations: classpath:cn/itsource/mapper/*.xml
启动类加@MapperScan扫描
@SpringBootApplication
@MapperScan("cn.itsource.mapper")
public class SsmApp {public static void main(String[] args) {SpringApplication.run(SsmApp.class,args);}
}
3.测试
表&实体 -> mapper接口+xml实现 -> service -> test -> controller
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SsmApp.class)
public class TestProduct {@AutowiredProductServiceImpl productService;@Testpublic void test(){productService.loadAll().forEach(a->{System.out.println(a);});}@Testpublic void testSave(){Product product = new Product("测试数据");productService.save(product);}
}
注意resource包下不能一次直接建多层包
事务的传播机制
一组操作同时成功或者同时失败
@Override@Transactionalpublic void save(Product product) {productMapper.save(product);//int i=1/0;}
只读事务 —加到查询上面
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)public List<Product> loadAll() {return productMapper.loadAll();}
类与方法上同时存在的注解使用哪个?就近原则
@Service@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)public class ProductServiceImpl implements IProductService {@AutowiredProductMapper productMapper;@Override@Transactional // 后面不写等同于@Transactional(readOnly = false, propagation = Propagation.REQUIRED)public void save(Product product) {productMapper.save(product);//int i=1/0;}@Overridepublic List<Product> loadAll() {return productMapper.loadAll();}}
一个方法里只能有一个事务

事务的传播机制:
REQUIRED:支持当前事务,如果当前没有事务,则新建一个事务(默认)
SUPPORTS:支持当前事务,当前当前没有事务,就不加事务
REQUIRES_NEW:新建事务,如果当前有事务,则把事务挂起,等着我先执行完成
NEVER: 不支持事务,如果当前有事务,则抛出异常
事务传播机制的作用:用来保证一组操作只有一个事务,解决事务冲突。
@Options(useGeneratedKeys = true, keyProperty = “id”, keyColumn = “id”)
@Insert(“insert into Demo(name,password) values(#{name},#{password})”)
public long save(Demo name);//对象上面也有
相关文章:
B058-SpringBoot
目录 springboot概念与作用入门案例springboot运行方式热部署配置文件Profile多环境支持整合测试-springboot-testSpringboot-web1.返回json数据2.返回页面(模板技术)thymeleaf1.导入thymeleaf依赖2.模板文件3.controller4.启动类 SSM整合1.导包2.项目目…...
龙迅LT9611UXC 2PORT MIPICSI/DSI转HDMI(2.0)转换器+音频,内置MCU
龙迅LT9611UXC 1.描述: LT9611UXC是一个高性能的MIPI DSI/CSI到HDMI2.0转换器。MIPI DSI/CSI输入具有可配置的单 端口或双端口,1高速时钟通道和1~4高速数据通道,最大2Gbps/通道,可支持高达16Gbps的总带 宽。LT9611UXC支持突发…...
STM32存储左右互搏 I2C总线读写FRAM MB85RC1M
STM32存储左右互搏 I2C总线读写FRAM MB85RC1M 在较低容量存储领域,除了EEPROM的使用,还有铁电存储器FRAM的使用,相对于EEPROM, 同样是非易失性存储单元,FRAM支持更高的访问速度, 其主要优点为没有EEPROM持续写操作跨页…...
1340. 跳跃游戏 V;2039. 网络空闲的时刻;2767. 将字符串分割为最少的美丽子字符串
1340. 跳跃游戏 V 核心思想:动态规划记忆化搜索。定义dfs(i),表示从i开始最多可以访问多少个下标,然后统计往左跳和往右边跳的最大值,思路其实比较简单,但是代码我感觉还是不太好想。 2039. 网络空闲的时刻 核心思想…...
ElementUI之CUD+表单验证
目录 前言: 增删改查 表单验证 前言: 继上篇博客来写我们的增删改以及表单验证 增删改查 首先先定义接口 数据样式,我们可以去elementUI官网去copy我们喜欢的样式 <!-- 编辑窗体 --><el-dialog :title"title" :visib…...
Linux:nginx---web文件服务器
我这里使用的是centos7系统 nginx源码包安装 Linux:nginx基础搭建(源码包)_鲍海超-GNUBHCkalitarro的博客-CSDN博客https://blog.csdn.net/w14768855/article/details/131445878?ops_request_misc%257B%2522request%255Fid%2522%253A%25221…...
go 端口转发 代理V2 --chatGPT
问:broker(localPort, targetPort), 实现远程访问localPort的http代理转发到目标机器 gpt: 要实现一个简单的 HTTP 代理服务器,你可以使用 Go 的 net/http 包来处理 HTTP 请求和响应。以下是一个示例,演示如何创建一个 HTTP 代理服务器将本地…...
idea环境下如何打包可运行jar?
工作中有时候偶尔写一些工具类、小程序,可是java程序员制作一个可运行jar实在折腾,利用idea开发环境,可以快速打包自己的可运行jar。具体怎么操作呢? 创建一个空白的java项目并完成自己的程序开发 完成java代码: /**…...
基于FFmpeg的Android播放器
基于FFmpeg的Android播放器 文章目录 基于FFmpeg的Android播放器1. 前言2. 编译相关组件库3. 解码器4. 解码流程5. 音频输出6. 视频输出(需要优化) 1. 前言 FFmpeg是一个最有名的开源的编解码库,实现了通常的编解码逻辑。它还能够根据平台特…...
osgPBR(十五)镜面IBL--查看不同级别的HDR环境贴图
首先,设置可以使用Mipmap,启用三线性过滤,设置最大级别和最小级别 osg::ref_ptr<osg::TextureCubeMap> tcm new osg::TextureCubeMap; tcm->setTextureSize(128, 128);tcm->setFilter(osg::Texture::MIN_FILTER, osg::Texture:…...
Docker的学习记录
Docker是一个被广泛使用的开源容器引擎,基于Go语言,遵从Apache2.0协议开源。 docker的三个概念:容器、镜像和仓库。 镜像(Image):镜像是Docker中的一个模板。通过 Docker镜像 来创建 Docker容器ÿ…...
Android Jetpack组件架构:ViewModel的原理
Android Jetpack组件架构:ViewModel的原理 导言 本篇文章是关于介绍ViewModel的,由于ViewModel的使用还是挺简单的,这里就不再介绍其的基本应用,我们主要来分析ViewModel的原理。 ViewModel的生命周期 众所周知,一般…...
数据分析(python)学习笔记1.0
《利用Python进行数据分析》(原书第2版) 《利用Python进行数据分析》(原书第2版) 《利用Python进行数据分析》(原书第2版) 社区和会议 除了网络搜索,科学、数据相关的Python邮件列表对于解决问题也非常有帮助。可以看看下列邮件列表: pydata:与数据分析和pandas相…...
SW免安装的toolbox只读问题
把SOLIDWORKSDATA 整体复制到另外的目录,然后这里设置目录位置。不然原始位置有只读属性...
nodejs在pdf中绘制表格
需求 之前我已经了解过如何在pdf模板中填写字段了 nodejs根据pdf模板填入中文数据并生成新的pdf文件https://blog.csdn.net/ArmadaDK/article/details/132456324 但是当我具体使用的时候,我发现我的模板里面有表格,表格的长度是不固定的,所…...
使用不同尺寸的传感器拍照时,怎么保证拍出同样视场范围的照片?
1、问题背景 使用竞品机做图像效果对比时,我们通常都会要求拍摄的照片要视场范围一致,这样才具有可比性。之前我会考虑用同样焦距、同样分辨率的设备去拍照对比就可以了,觉得相机的视场范围只由镜头焦距来决定。 但如果对于不同尺寸的传感器…...
01-工具篇-windows与linux文件共享
一般来说绝大部分PC上装的系统均是windows,为了开发linux程序,会在PC上安装一个Vmware的虚拟机,在虚拟机上安装ubuntu18.04,由于windows上的代码查看软件、浏览器,通信软件更全,我们想只用ubuntu进行编译&a…...
医疗实施-住院流程详解
住院就诊流程详解 1.病人入院登记2.病人进入病区3.医生操作病人4.医嘱录入与审核执行5. 医嘱收费前在对应业务系统的操作5.1.药物医嘱5.2.检查检验医嘱5.3.手术医嘱 6.住院医嘱费用的产生7. 医嘱收费后在对应业务系统的操作8. 病人出院 这篇文章是基于我的文章《医疗实施-住院就…...
本地连接服务器 jupyter notebook
本地连接服务器 jupyter notebook 一、前提工作二、服务器操作三、Windows 操作 一、前提工作 准备一台Linux云服务器新建一个用户,并切换到此用户安装 Anaconda 二、服务器操作 远程服务器上安装和配置 Jupyter Notebook: pip3 install jupyter接着…...
Android 使用Kotlin封装RecyclerView
文章目录 1.概述2.运行效果图3.代码实现3.1 扩展RecyclerView 3.2 扩展Adapter3.3 RecyclerView装饰绘制3.3.1 以图片实现分割线3.3.2 画网格线3.3.3空白的分割线3.3.4 不同方向上的分割线 3.4 使用方法 1.概述 在一个开源项目上看到了一个Android Kotlin版的RecyclerView封装…...
美胸-年美-造相Z-Turbo在网络安全领域的创新应用:恶意代码可视化分析
美胸-年美-造相Z-Turbo在网络安全领域的创新应用:恶意代码可视化分析 1. 当安全分析遇上图像生成:一个意想不到的跨界组合 最近在调试一个自动化威胁分析流程时,我偶然发现了一个有趣的现象:当把一段混淆后的JavaScript恶意代码…...
AIVideo效果展示:输入主题输出专业视频,惊艳案例分享
AIVideo效果展示:输入主题输出专业视频,惊艳案例分享 1. 专业级视频生成效果概览 AIVideo一站式AI长视频工具能够将简单的文字主题转化为完整的专业视频作品。只需输入一个主题,系统就会自动完成从文案创作、分镜设计、画面生成到配音剪辑的…...
不止于复现:用Fluent UDF模拟化学反应放热的3个高级技巧与收敛性优化
不止于复现:用Fluent UDF模拟化学反应放热的3个高级技巧与收敛性优化 在储氢反应器仿真领域,许多工程师能够完成基础的能量源项UDF加载,却常常陷入残差震荡、计算结果失真的困境。本文将从三个实战维度,分享如何让化学反应放热模拟…...
YOLOv8自定义检测头踩坑记:手把手教你修复‘NotImplementedError: new_detect task‘错误
YOLOv8自定义检测头实战:从报错到修复的深度解析 当你在YOLOv8框架中尝试添加一个名为new_detect的自定义检测头时,突然遇到NotImplementedError: new_detect task错误,这可能会让你感到困惑。本文将带你深入理解YOLOv8的任务调度机制&#x…...
等保测评必看!用组策略批量关闭445/139端口(域环境适用版)
企业域环境下批量关闭高危端口的组策略实战指南 在等保测评和日常安全运维中,445、139、135等端口因其历史漏洞和潜在风险,常被列为必须管控的高危端口。对于拥有数百甚至上千台终端的中大型企业来说,逐台手动配置不仅效率低下,更…...
5个核心功能提升音频处理效率:AsrTools语音转文字工具用户指南
5个核心功能提升音频处理效率:AsrTools语音转文字工具用户指南 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into a…...
零基础一键配置黑苹果:OpCore-Simplify智能工具让复杂变简单
零基础一键配置黑苹果:OpCore-Simplify智能工具让复杂变简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果配置时面对满屏代…...
Windows10下用VS2019编译UE4.27源码的完整避坑指南(附环境配置截图)
Windows 10下用VS2019编译UE4.27源码的完整避坑指南 第一次在Windows 10上编译UE4.27源码,就像在迷宫中寻找出口——每个转角都可能藏着意想不到的陷阱。作为一位经历过无数次编译失败的老兵,我深知那些看似简单的步骤背后隐藏的魔鬼细节。本文将带你避开…...
工业相机+Python视觉系统崩溃频发?(产线停机损失超¥8600/小时的5个隐藏代码陷阱)
第一章:工业相机视觉系统崩溃的根源诊断工业相机视觉系统在产线部署中一旦突发崩溃,往往表现为图像丢失、帧率归零、设备离线或软件进程异常终止。此类故障表面随机,实则多由底层软硬件协同失配引发,需从驱动层、通信协议、资源调…...
手搓STM32H743开源飞控系列教程---(五) 飞控IMU方向调整
1. 为什么需要调整飞控IMU方向 第一次玩飞控的朋友可能会遇到一个奇怪现象:明明把飞控板水平放在桌面上,地面站显示的姿态却歪了30度。这种情况十有八九是IMU安装方向与飞控默认设定不匹配导致的。我刚开始玩穿越机时就踩过这个坑,当时把飞控…...
