# SpringBoot2学习 **Repository Path**: BY-KK/springboot-learning ## Basic Information - **Project Name**: SpringBoot2学习 - **Description**: SpringBoot 2 学习日常记录 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-02 - **Last Updated**: 2022-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringBoot2学习 ## 介绍 **学习目标** - 基础篇 - 能够创建SpringBoot工程 - 基于SpringBoot实现ssm整合 - 实战篇 - 运维实用篇 - 能够掌握SpringBoot程序多环境开发 - 能够基于Linux系统发布SpringBoot工程 - 能够解决线上灵活配置SpringBoot工程的需求 - 开发实用篇 - 能够基于SpringBoot整合任意第三方技术 - 原理篇 - 掌握SpringBoot内部工作流程 - 理解SpringBoot整合第三方技术的原理 - 实现自定义开发整合第三方技术的组件 # 基础篇 ## 1、SpringBoot入门程序开发 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来**简化**Spring应用的**初始搭建**以及**开发过程** | 类/配置文件 | Spring | SpringBoot | | ---------------------- | -------- | ---------- | | pom文件中的坐标 | 手工制作 | 勾选添加 | | web3.0配置类 | 手工制作 | 无 | | Spring/SpringMVC配置类 | 手工制作 | 无 | | 控制器 | 手工制作 | 手工制作 | **SpringBoot开发只需要关心控制器的制作** Spring程序缺点 - 依赖设置繁琐 - 配置繁琐 SpringBoot程序优点 - 起步依赖(简化依赖配置) - 自动配置(简化常用工程相关配置) - 辅助功能(内置服务器...) ## 2、创建SpringBoot项目 ### 2.1、基于Idea创建 **File->New->project...->Spring Initializr** ![](img/1.png) ![](img/2.png) 然后勾选所需集成的技术 ### 2.2、官网创建 https://start.spring.io/ 1. 创建项目,保存项目 2. 解压项目,通过IDE导入项目 ### 2.3、阿里云创建 https://start.aliyun.com/ ![](img/3.png) ## 3、入门案例解析 ### **parent** ![](img/4.png) 1. 开发SpringBoot程序要继承spring-boot-starter-parent 2. spring-boot-starter-parent中定义了若干个依赖管理 3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突 4. 继承parent的形式也可以采用引入依赖的形式实现效果 **减少依赖冲突** ### **starter** 包含了若干依赖的pom文件,若干个依赖信息 SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到**减少依赖配置**的目的 - 开发SpringBoot程序需要导入坐标时通常导入对应的starter - 每个不同的starter根据功能不同,通常包含多个依赖坐标 - 使用starter可以实现快速配置的效果,达到**简化配置的**目的 ### **引导类** 启动方式 ```java @SpringBootApplication public class Springboot0102QuickstartApplication { public static void main(String[] args) { SpringApplication.run(Springboot0102QuickstartApplication.class, args); } } ``` SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目 SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean ### **内嵌Tomcat** 1. 内嵌Tomcat服务器是SpringBoot辅助功能之一 2. 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将对象交给Spring容器管理 3. 变更内嵌服务器思想是去除现有的服务器,添加全新的服务器 ## 4、REST开发简介 REST:**Re**presentational **S**tate **T**ransfer,表现层资源状态转移。 - 传统风格资源描述形式 http://localhost/user/getById?id=1 http://locahost/user/saveUser - REST风格描述形式 http://localhost/user/1 http://localhost/user 优点: - 隐藏资源的访问行为,无法通过地址得知对资源是何种操作 - 书写简化 | REST风格 | 操作 | 请求方式 | | ------------------------ | ---------------- | ----------------- | | http://localhost/users | 查询全部用户信息 | GET(查询) | | http://localhost/users/1 | 查询指定用户信息 | GET(查询) | | http://localhost/users | 添加用户信息 | POST(新增/保存) | | http://localhost/users | 修改用户信息 | PUT(修改/更新) | | http://localhost/users/1 | 删除用户信息 | DELETE(删除) | 上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如:users、books、accounts...... 根据REST风格对资源进行访问称为**RESTful** ### @RequestMapping 名称:@RequestMapping 类型:方法注解 位置:SpringMVC控制器方法定义上方 作用:设置当前控制器方法请求访问路径 范例: ```java @RequestMapping(value = "/users/{id}", method = RequestMethod.GET) public String getById( @PathVariable Integer id) { System.out.println("ID" + id); return "{'module':'user getById'}"; } ``` 属性: - value(默认):请求访问路径 - method:http请求动作,标准动作(GET/POST/PUT/DELETE) ### @PathVariable 名称:@PathVariable 类型:形参注解 位置:SpringMVC控制器方法形参定义前面 作用:绑定路径参数与处理器方法形参间的关系,要去路径参数名与形参名一一对应 范例: ```java @DeleteMapping(value = "/users/{id}") public String delete(@PathVariable Integer id) { User user1 = (User) session.getAttribute("user"); if (user1.getId().equals(id)){ System.out.println(user1); session.removeAttribute("user"); return "{'module':'user delete'}"; } else { return "{'module':'user not delete'}"; } } ``` ### 接收参数注解 **@RequestBody** **@RequestParam** **@PathVariable** - 区别 - @RequestParam 用于接收url地址传参或表单传参 - @RequestBody 用于接收JSON数据 - @PathVariable用于接收路径参数,使用{参数名称}描述路径参数 - 应用 - 后期开发中,发送请求参数超过1个时,以JSON格式为主,@RequestBody应用广 - 如果发送非JSON格式数据,选用@RequestParam接收请求参数 - 采用RESTful进行开发,当参数数量较少时,可以采用@PathVariable接收请求路径变量,通常用于传递id值 ### @RestController简化开发 ```java @RestController @RequestMapping("/user") public class UserController { @GetMapping(value = "/{id}") public String getById(@PathVariable Integer id) { System.out.println("ID" + id); return "{'module':'user getById'}"; } @PostMapping public String save(@RequestBody User user) { System.out.println("user save..." + user); return "{'module':'user save'}"; } @DeleteMapping(value = "/{id}") public String delete(@PathVariable Integer id) { System.out.println(id); return "{'module':'user delete'}"; } @PutMapping public String update(@RequestBody User user) { System.out.println(user); return "{'module':'user update'}"; } } ``` **@DeleteMapping** **@GetMapping** **@PostMapping** **@PutMapping** 这四个注解就不需要单独像@RequestMapping设置method参数 示例: ```java @DeleteMapping(value = "/users/{id}") ``` @RestController == @Controller + @ResponseBody ## 5、基础配置 ### 5.1、属性配置 ### 5.2、配置文件分类 ### 5.3、yaml文件 ### 5.4、yaml数据读取