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);//对象上面也有

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

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

相关文章

【动态规划】动态规划经典例题 力扣牛客

文章目录 跳台阶 BM63 简单跳台阶扩展 JZ71 简单打家结舍 LC198 中等打家劫舍2 LC213中等最长连续递增序列 LC674 简单乘积最大子数组LC152 中等最长递增子序列LC300 中等最长重复子数组LC718最长公共子串NC BM66最长公共子序列LC1143 中等完全平方数LC279零钱兑换 LC322 中等单…

QT的ui设计中改变样式表的用法

在QT的ui设计中,我们右键会弹出一个改变样式表的选项,很多人不知道这个是干什么的。 首先我们来看下具体的界面 首先我们说一下这个功能具体是干嘛的, 我们在设置很多控件在界面上之后,常常都是使用系统默认的样式,但是当有些时候为了美化界面我们需要对一些控件进行美化…

【数据结构】链表与LinkedList

作者主页&#xff1a;paper jie 的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精…

小程序编译器性能优化之路

作者 | 马可 导读 小程序编译器是百度开发者工具中的编译构建模块&#xff0c;用来将小程序代码转换成运行时代码。旧版编译器由于业务发展&#xff0c;存在编译慢、内存占用高的问题&#xff0c;我们对编译器做了一次大规模的重构&#xff0c;采用自研架构&#xff0c;做了多线…

链表经典面试题(一)

面试题 1.反转链表的题目2.反转链表的图文分析3.反转链表的代码实现 1.反转链表的题目 2.反转链表的图文分析 我们在实现反转链表的时候,是将后面的元素变前面&#xff0c;前面的元素变后面&#xff0c;那么我们是否可以理解为&#xff0c;用头插法的思想来完成反转链表呢&…

Cannot download sources:IDEA源码无法下载

问题 Swagger的相关包&#xff0c;无法看到注释&#xff1b; 在class文件的页面&#xff0c;点击下载源码&#xff0c;源码下载不了&#xff0c;IDEA报下面的错误。 报错 Cannot download sources Sources not found for: io.swagger.core.v3:swagger-annotations:2.2.9 解决…

读者写者问题—内含408真题

读者写者问题—含408 一、问题描述 一个数据问价或记录可以被多个进程共享&#xff0c;我们把只读该文件的进程称为“读者进程”&#xff0c;其他进程为“写者进程”。允许多个进程同时读一个共享对象&#xff0c;但不允许一个写者进程和其他写者进程或读者进程同时访问共享对…

点亮一个LED+LED闪烁+LED流水灯——“51单片机”

各位CSDN的uu们好呀&#xff0c;这是小雅兰的最新专栏噢&#xff0c;最近小雅兰学习了51单片机的知识&#xff0c;所以就想迫不及待地分享出来呢&#xff01;&#xff01;&#xff01;下面&#xff0c;让我们进入51单片机的世界吧&#xff01;&#xff01;&#xff01; 点亮一个…

Linux基础命令汇总

用户管理 su 切换用户&#xff1a;su 用户名 logname 显示当前用户的登录用户名&#xff1a;logname useradd 创建用户&#xff1a;useradd 用户名创建用户时指定用户的主组&#xff1a;useradd -g 组名 用户名 usermod 添加附属组&#xff1a;usermod -G 组…

2023年8月嵌入式项目开发专题总汇

一、前言 本文介绍基于嵌入式系统和C语言开发的系列项目。这些项目涵盖了多个领域&#xff0c;从自动化控制到游戏开发&#xff0c;从计算机网络到物联网应用。通过这些项目的开发过程&#xff0c;将深入探讨各种技术和解决方案&#xff0c;并分享相关经验和知识。 在本文中&…

cesium 雷达扫描 (线行扩散效果)

cesium 雷达扫描 (线行扩散效果) 1、实现方法 使用ellipse方法加载圆型,修改ellipse中material方法来实现效果 2、示例代码 2.1、 <!DOCTYPE html> <html lang="en"><head><<

分类预测 | Matlab实现BES-ELM秃鹰搜索算法优化极限学习机分类预测

分类预测 | Matlab实现BES-ELM秃鹰搜索算法优化极限学习机分类预测 目录 分类预测 | Matlab实现BES-ELM秃鹰搜索算法优化极限学习机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 Matlab实现BES-ELM秃鹰搜索算法优化极限学习机分类预测&#xff08;完整源码和数…

【CVPR 2023】DSVT: Dynamic Sparse Voxel Transformer with Rotated Sets

文章目录 开场白效果意图 重点VoxelNet: End-to-End Learning for Point Cloud Based 3D Object DetectionX-Axis DSVT LayerY-Axis DSVT Layer Dynamic Sparse Window AttentionDynamic set partitionRotated set attention for intra-window feature propagation.Hybrid wind…

优维低代码实践:应用级配置

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

[NOIP2012 提高组] 开车旅行

[NOIP2012 提高组] 开车旅行 题目描述 小 A \text{A} A 和小 B \text{B} B 决定利用假期外出旅行&#xff0c;他们将想去的城市从 $1 $ 到 n n n 编号&#xff0c;且编号较小的城市在编号较大的城市的西边&#xff0c;已知各个城市的海拔高度互不相同&#xff0c;记城市 …

亚信科技AntDB数据库 高并发、低延迟、无死锁,深入了解AntDB-M元数据锁的实现

AntDB-M在架构上分为两层&#xff0c;服务层和存储引擎层。元数据的并发管理集中在服务层&#xff0c;数据的存储访问在存储引擎层。为了保证DDL操作与DML操作之间的一致性&#xff0c;引入了元数据锁&#xff08;MDL&#xff09;。 AntDB-M提供了丰富的元数据锁功能&#xff0…

Koa处理请求数据

在开发中&#xff0c;后端接收到请求参数后&#xff0c;需要解析参数。请求分为很多种类型&#xff0c;比如常见的get和post。 请求参数 Koa本身可以解析get请求参数&#xff0c;不能解析post请求参数。例如&#xff1a; router.get(/api/get/userInfo, async (context) >…

新手--安装好Quartus II13.0(带modelsim集成包)并用Quartus II搭建一个工程

前言 今天是国庆节&#xff0c;我们正式来学习Quartus II13.0软件的安装与使用。学习verilog与学习C语言都是学习一门语言&#xff0c;那么学习一门语言&#xff0c;光看理论不敲代码绝对是学习不好的。要用verilog语言敲代码&#xff0c;就要像C语言那样搭建起语言的编译环境&…

C语言 Cortex-A7核 IIC实验

iic.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" /* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT do{…

B. Comparison String

题目&#xff1a; 样例&#xff1a; 输入 4 4 <<>> 4 >><< 5 >>>>> 7 <><><><输出 3 3 6 2 思路&#xff1a; 由题意&#xff0c;条件是 又因为要使用尽可能少的数字&#xff0c;这是一道贪心题&#xff0c;所以…