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

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.返回页面&#xff08;模板技术&#xff09;thymeleaf1.导入thymeleaf依赖2.模板文件3.controller4.启动类 SSM整合1.导包2.项目目…...

龙迅LT9611UXC 2PORT MIPICSI/DSI转HDMI(2.0)转换器+音频,内置MCU

龙迅LT9611UXC 1.描述&#xff1a; LT9611UXC是一个高性能的MIPI DSI/CSI到HDMI2.0转换器。MIPI DSI/CSI输入具有可配置的单 端口或双端口&#xff0c;1高速时钟通道和1~4高速数据通道&#xff0c;最大2Gbps/通道&#xff0c;可支持高达16Gbps的总带 宽。LT9611UXC支持突发…...

STM32存储左右互搏 I2C总线读写FRAM MB85RC1M

STM32存储左右互搏 I2C总线读写FRAM MB85RC1M 在较低容量存储领域&#xff0c;除了EEPROM的使用&#xff0c;还有铁电存储器FRAM的使用&#xff0c;相对于EEPROM, 同样是非易失性存储单元&#xff0c;FRAM支持更高的访问速度&#xff0c; 其主要优点为没有EEPROM持续写操作跨页…...

1340. 跳跃游戏 V;2039. 网络空闲的时刻;2767. 将字符串分割为最少的美丽子字符串

1340. 跳跃游戏 V 核心思想&#xff1a;动态规划记忆化搜索。定义dfs(i)&#xff0c;表示从i开始最多可以访问多少个下标&#xff0c;然后统计往左跳和往右边跳的最大值&#xff0c;思路其实比较简单&#xff0c;但是代码我感觉还是不太好想。 2039. 网络空闲的时刻 核心思想…...

ElementUI之CUD+表单验证

目录 前言&#xff1a; 增删改查 表单验证 前言&#xff1a; 继上篇博客来写我们的增删改以及表单验证 增删改查 首先先定义接口 数据样式&#xff0c;我们可以去elementUI官网去copy我们喜欢的样式 <!-- 编辑窗体 --><el-dialog :title"title" :visib…...

Linux:nginx---web文件服务器

我这里使用的是centos7系统 nginx源码包安装 Linux&#xff1a;nginx基础搭建&#xff08;源码包&#xff09;_鲍海超-GNUBHCkalitarro的博客-CSDN博客https://blog.csdn.net/w14768855/article/details/131445878?ops_request_misc%257B%2522request%255Fid%2522%253A%25221…...

go 端口转发 代理V2 --chatGPT

问&#xff1a;broker(localPort, targetPort), 实现远程访问localPort的http代理转发到目标机器 gpt: 要实现一个简单的 HTTP 代理服务器&#xff0c;你可以使用 Go 的 net/http 包来处理 HTTP 请求和响应。以下是一个示例&#xff0c;演示如何创建一个 HTTP 代理服务器将本地…...

idea环境下如何打包可运行jar?

工作中有时候偶尔写一些工具类、小程序&#xff0c;可是java程序员制作一个可运行jar实在折腾&#xff0c;利用idea开发环境&#xff0c;可以快速打包自己的可运行jar。具体怎么操作呢&#xff1f; 创建一个空白的java项目并完成自己的程序开发 完成java代码&#xff1a; /**…...

基于FFmpeg的Android播放器

基于FFmpeg的Android播放器 文章目录 基于FFmpeg的Android播放器1. 前言2. 编译相关组件库3. 解码器4. 解码流程5. 音频输出6. 视频输出&#xff08;需要优化&#xff09; 1. 前言 FFmpeg是一个最有名的开源的编解码库&#xff0c;实现了通常的编解码逻辑。它还能够根据平台特…...

osgPBR(十五)镜面IBL--查看不同级别的HDR环境贴图

首先&#xff0c;设置可以使用Mipmap&#xff0c;启用三线性过滤&#xff0c;设置最大级别和最小级别 osg::ref_ptr<osg::TextureCubeMap> tcm new osg::TextureCubeMap; tcm->setTextureSize(128, 128);tcm->setFilter(osg::Texture::MIN_FILTER, osg::Texture:…...

Docker的学习记录

Docker是一个被广泛使用的开源容器引擎&#xff0c;基于Go语言&#xff0c;遵从Apache2.0协议开源。 docker的三个概念&#xff1a;容器、镜像和仓库。 镜像&#xff08;Image&#xff09;&#xff1a;镜像是Docker中的一个模板。通过 Docker镜像 来创建 Docker容器&#xff…...

Android Jetpack组件架构:ViewModel的原理

Android Jetpack组件架构&#xff1a;ViewModel的原理 导言 本篇文章是关于介绍ViewModel的&#xff0c;由于ViewModel的使用还是挺简单的&#xff0c;这里就不再介绍其的基本应用&#xff0c;我们主要来分析ViewModel的原理。 ViewModel的生命周期 众所周知&#xff0c;一般…...

数据分析(python)学习笔记1.0

《利用Python进行数据分析》(原书第2版) 《利用Python进行数据分析》(原书第2版) 《利用Python进行数据分析》(原书第2版) 社区和会议 除了网络搜索,科学、数据相关的Python邮件列表对于解决问题也非常有帮助。可以看看下列邮件列表: pydata:与数据分析和pandas相…...

SW免安装的toolbox只读问题

把SOLIDWORKSDATA 整体复制到另外的目录&#xff0c;然后这里设置目录位置。不然原始位置有只读属性...

nodejs在pdf中绘制表格

需求 之前我已经了解过如何在pdf模板中填写字段了 nodejs根据pdf模板填入中文数据并生成新的pdf文件https://blog.csdn.net/ArmadaDK/article/details/132456324 但是当我具体使用的时候&#xff0c;我发现我的模板里面有表格&#xff0c;表格的长度是不固定的&#xff0c;所…...

使用不同尺寸的传感器拍照时,怎么保证拍出同样视场范围的照片?

1、问题背景 使用竞品机做图像效果对比时&#xff0c;我们通常都会要求拍摄的照片要视场范围一致&#xff0c;这样才具有可比性。之前我会考虑用同样焦距、同样分辨率的设备去拍照对比就可以了&#xff0c;觉得相机的视场范围只由镜头焦距来决定。 但如果对于不同尺寸的传感器…...

01-工具篇-windows与linux文件共享

一般来说绝大部分PC上装的系统均是windows&#xff0c;为了开发linux程序&#xff0c;会在PC上安装一个Vmware的虚拟机&#xff0c;在虚拟机上安装ubuntu18.04&#xff0c;由于windows上的代码查看软件、浏览器&#xff0c;通信软件更全&#xff0c;我们想只用ubuntu进行编译&a…...

医疗实施-住院流程详解

住院就诊流程详解 1.病人入院登记2.病人进入病区3.医生操作病人4.医嘱录入与审核执行5. 医嘱收费前在对应业务系统的操作5.1.药物医嘱5.2.检查检验医嘱5.3.手术医嘱 6.住院医嘱费用的产生7. 医嘱收费后在对应业务系统的操作8. 病人出院 这篇文章是基于我的文章《医疗实施-住院就…...

本地连接服务器 jupyter notebook

本地连接服务器 jupyter notebook 一、前提工作二、服务器操作三、Windows 操作 一、前提工作 准备一台Linux云服务器新建一个用户&#xff0c;并切换到此用户安装 Anaconda 二、服务器操作 远程服务器上安装和配置 Jupyter Notebook&#xff1a; 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封装…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...