• SpringBoot 基础知识汇总 (史上最全)


    作者:大三的土狗

    专栏:SpringBoot入门到精通
    在这里插入图片描述


    前言

    1)Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。

    2)学习顺序挺重要的,建议不要一上手就学 Spring Boot,只有先学习下自己整合框架的方法,才能帮你理解 SpringBoot 解决的问题,感受到它的方便和高效。


    1、配置文件

    SpringBoot 提供了多种属性配置方式

    1)application.properties

    优先级最高

    server.port=80
    
    • 1

    2)application.yml

    第二优先级

    优点:

    • 容易阅读

      yaml 类型的配置文件比 xml 类型的配置文件更容易阅读,结构更加清晰

    • 容易与脚本语言交互

    • 以数据为核心,重数据轻格式

      yaml 更注重数据,而 xml 更注重格式

    语法规则

    • 大小写敏感

    • 属性层级关系使用多行描述,每行结尾使用冒号结束

    • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

      空格的个数并不重要,只要保证同层级的左侧对齐即可。

    • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

    • # 表示注释

    核心规则:数据前面要加空格与冒号隔开

    server:
    	port: 81
    
    • 1
    • 2

    3)application.yaml

    server:
    	port: 82
    
    • 1
    • 2

    2、Jar包

    1)打包

    在pom.xml加入插件

    
        org.springframework.boot
        spring-boot-maven-plugin
    
    
    • 1
    • 2
    • 3
    • 4

    我们只需要使用 Mavenpackage 指令打包就会在 target 目录下生成对应的 Jar 包。

    2)启动

    进入 jar 包所在位置,在 命令提示符 中输入如下命令

    jar -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar
    
    • 1

    执行上述命令就可以看到 SpringBoot 运行的日志信息。

    3、parent

    ​ SpringBoot关注到开发者在进行开发时,往往对依赖版本的选择具有固定的搭配格式,并且这些依赖版本的选择还不能乱搭配。比如A技术的2.0版与B技术的3.5版可以合作在一起,但是和B技术的3.7版合并使用时就有冲突。其实很多开发者都一直想做一件事情,就是将各种各样的技术配合使用的常见依赖版本进行收集整理,制作出了最合理的依赖版本配置方案,这样使用起来就方便多了。

    ​ SpringBoot一看这种情况so easy啊,于是将所有的技术版本的常见使用方案都给开发者整理了出来,以后开发者使用时直接用它提供的版本方案,就不用担心冲突问题了,相当于SpringBoot做了无数个技术版本搭配的列表,这个技术搭配列表的名字叫做parent

    parent自身具有很多个版本,每个parent版本中包含有几百个其他技术的版本号,不同的parent间使用的各种技术的版本号有可能会发生变化。当开发者使用某些技术时,直接使用SpringBoot提供的parent就行了,由parent帮助开发者统一的进行各种技术的版本管理

    ​ 比如你现在要使用Spring配合MyBatis开发,没有parent之前怎么做呢?选个Spring的版本,再选个MyBatis的版本,再把这些技术使用时关联的其他技术的版本逐一确定下来。当你Spring的版本发生变化需要切换时,你的MyBatis版本有可能也要跟着切换,关联技术呢?可能都要切换,而且切换后还可能出现问题。现在这一切工作都可以交给parent来做了。你无需关注这些技术间的版本冲突问题,你只需要关注你用什么技术就行了,冲突问题由parent负责处理。

    ​ 有人可能会提出来,万一parent给我导入了一些我不想使用的依赖怎么办?记清楚,这一点很关键,parent仅仅帮我们进行版本管理,它不负责帮你导入坐标,说白了用什么还是你自己定,只不过版本不需要你管理了。整体上来说,使用parent可以帮助开发者进行版本的统一管理

    • 项目中的pom.xml中继承了一个坐标
    
        
        org.springframework.boot
        spring-boot-starter-parent
        2.5.4
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 打开后可以查阅到其中又继承了一个坐标
    
        org.springframework.boot
        spring-boot-dependencies
        2.5.4
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 这个坐标中定义了两组信息,第一组是各式各样的依赖版本号属性,下面列出依赖版本属性的局部,可以看的出来,定义了若干个技术的依赖版本号
    
        5.16.3
        1.9.7
        3.19.0
        1.15
        2.8.0
        3.12.0
        1.6
        2.9.0
        1.4.200
        5.4.32.Final
        6.2.0.Final
        4.5.13
        2.12.4
        2.0.1
        1.1.4
        1.1
        9.0.48
        4.13.2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    ​ 第二组是各式各样的的依赖坐标信息,可以看出依赖坐标定义中没有具体的依赖版本号,而是引用了第一组信息中定义的依赖版本属性值

    
        
            
                org.hibernate
                hibernate-core
                ${hibernate.version}
            
            
                junit
                junit
                ${junit.version}
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    总之

    • 开发SpringBoot程序要继承spring-boot-starter-parent
    • spring-boot-starter-parent中定义了若干个依赖管理
    • 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
    • 继承parent的形式也可以采用引入依赖的形式实现效果

    4、starter

    ​ SpringBoot关注到开发者在实际开发时,对于依赖坐标的使用往往都有一些固定的组合方式,比如使用spring-webmvc就一定要使用spring-web。每次都要固定搭配着写,非常繁琐,而且格式固定,没有任何技术含量。

    ​ SpringBoot一看这种情况,看来需要给开发者带来一些帮助了。安排,把所有的技术使用的固定搭配格式都给开发出来,以后你用某个技术,就不用一次写一堆依赖了,还容易写错,我给你做一个东西,代表一堆东西,开发者使用的时候,直接用我做好的这个东西就好了,对于这样的固定技术搭配,SpringBoot给它起了个名字叫做starter

    ​ starter定义了使用某种技术时对于依赖的固定搭配格式,也是一种最佳解决方案,使用starter可以帮助开发者减少依赖配置

    ​ 这个东西其实在入门案例里面已经使用过了,入门案例中的web功能就是使用这种方式添加依赖的。可以查阅SpringBoot的配置源码,看到这些定义

    • 项目中的pom.xml定义了使用SpringMVC技术,但是并没有写SpringMVC的坐标,而是添加了一个名字中包含starter的依赖
    
        org.springframework.boot
        spring-boot-starter-web
    
    
    • 1
    • 2
    • 3
    • 4
    • 在spring-boot-starter-web中又定义了若干个具体依赖的坐标
    
        
            org.springframework.boot
            spring-boot-starter
            2.5.4
            compile
        
        
            org.springframework.boot
            spring-boot-starter-json
            2.5.4
            compile
        
        
            org.springframework.boot
            spring-boot-starter-tomcat
            2.5.4
            compile
        
        
            org.springframework
            spring-web
            5.3.9
            compile
        
        
            org.springframework
            spring-webmvc
            5.3.9
            compile
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    5、starter与parent的区别

    • starter是一个坐标中定了若干个坐标,以前写多个的,现在写一个,是用来减少依赖配置的书写量的
    • parent是定义了几百个依赖版本号,以前写依赖需要自己手工控制版本,现在由SpringBoot统一管理,这样就不存在版本冲突了,是用来减少依赖冲突的

    6、Restful接口

    1)Restful接口请求风格

      RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

      对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。换言而知,使用RESTful风格的接口但从接口上你可能只能定位其资源,但是无法知晓它具体进行了什么操作,需要具体了解其发生了什么操作动作要从其HTTP请求方法类型上进行判断。具体的HTTP方法和方法含义如下:

    • GET(SELECT):从服务器取出资源(一项或多项)。
    • POST(CREATE):在服务器新建一个资源。
    • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
    • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
    • DELETE(DELETE):从服务器删除资源。

    2)传统风格与RestFul对比

    1. 传统方式操作资源
    • http://127.0.0.1/item/queryItem.action?id=1 (查询,GET)
    • http://127.0.0.1/item/saveItem.action (新增,POST)
    • http://127.0.0.1/item/updateItem.action (更新,POST)
    • http://127.0.0.1/item/deleteItem.action?id=1 (删除,GET或POST)
    1. RestFul方式操作资源
    • http://127.0.0.1/item/1 (查询,GET)
    • http://127.0.0.1/item (新增,POST)
    • http://127.0.0.1/item (更新,PUT)
    • http://127.0.0.1/item/1 (删除,DELETE)

    7、请求参数常用注解

    翻我以前的文章
    请求参数: http://t.csdn.cn/tthWz
    注解:http://t.csdn.cn/5jJy6

    6、7 代码演示

    @RestController     //@Controller + @ResponseBody
    @RequestMapping("Stu")                                      //抽出Stu
    @Slf4j              //lombok的日志注解
    public class StudentController {
    
        @GetMapping("{stuId}/get")        // 定义请求路径
        public String getStu(@PathVariable("stuId") String stuId,
                             @RequestParam("id") String Id,
                             @RequestParam("name") String name
                             ) {
            /**
             * @PathVariable("stuId") url路径的参数
             * @RequestParam 用于获得url中的参数,如果与前端参数一致则,可以不写
             */
            log.info("stuId:{},id:{},name:{}", stuId, Id, name);
            log.warn("stuId="+stuId);
            log.warn("id="+ Id);
            log.warn("name="+name);
            return "查询Stu";
        }
    
        @PostMapping("create")        // 定义请求路径
        public String createStu(@RequestBody Mapmap,
                                @RequestHeader("token") String token,
                                @CookieValue("clientId") String clientId,
                                HttpServletRequest request
                                ) {
            /**
             * @RequestBody 用于获得前端发送的数据Json
             * @RequestHeader 用于获得请求头中的数据
             * @CookieValue 用于获得cookie中的数据
             */
            log.warn("token="+token);
            log.warn("clientId="+clientId);
            log.warn("map="+map.toString());
            String header = request.getHeader("token");
            log.warn("header="+header);
            return "新增Stu";
        }
    
        @PutMapping("update")        // 定义请求路径
        public String updateStu() {
            return "修改Stu";
        }
    
        @DeleteMapping("delete")        // 定义请求路径
        public String deleteStu() {
            return "删除Stu";
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    总结

      SpringBoot在以往我们通过SpringMVC+Spring+Mybatis框架进行开发的时候,我们已经学习了注解开发,配置数据源等,所以SpringBoot与Spring息息相关,毕竟其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,常用注解可以翻以前的文章或者及时百度。

  • 相关阅读:
    Mock数据:单元测试中的心灵鸡汤
    Rust之包,箱和模块管理(四):用use关键字引用其他包
    Python数据攻略-递归方式实现json多层级数据展平
    GBase 8c管理平台——2.安全管理平台GBase 8c MacTool
    土壤温湿度传感器
    二叉搜索树
    短链接网站系统设计与实践
    一文详解视觉Transformer模型压缩和加速策略(量化/低秩近似/蒸馏/剪枝)
    ubuntu server 更改时区:上海
    如何实现区块构建者角色的去中心化?
  • 原文地址:https://blog.csdn.net/qq_53463544/article/details/126290137