当前位置: 首页 > 后端技术 > Node.js

SpringBoot(二.基础知识)

时间:2023-04-03 17:12:43 Node.js

1.配置文件SpringBoot提供了多种属性配置方式1)application.properties优先级最高server.port=802)application.yml次之优点:易读yaml类型配置文件比xml更易读-类型的配置文件,结构更清晰,更容易与脚本语言交互。数据是核心,数据比格式更重要。yaml更注重数据,而xml更注重格式。说明,每行以冒号结束并用缩进表示层级关系,同级左对齐,只允许有空格(不允许使用Tab键)。空格的多少并不重要,只要保证同级左对齐即可。在属性值前加空格(冒号+空格作为属性名和属性值的分隔符)表示注释==核心规则:在数据前加空格和冒号分隔==server:port:813)application.yamlserver:port:822.jar包1)pom.xml中打包并添加pluginorg.springframework.bootspring-boot-maven-plugin我们只需要使用Maven的package命令就会在目标目录下生成对应的Jar包。2)开始进入jar包所在位置,在命令提示符下输入如下命令jar-jarspringboot_01_quickstart-0.0.1-SNAPSHOT.jar执行上述命令即可看到SpringBoot运行的日志信息。3.parentSpringBoot关注到开发者在开发的时候对于依赖版本的选择往往有固定的匹配格式,而这些依赖版本的选择不能随意匹配。比如技术A的2.0版本和技术B的3.5版本是可以协同工作的,但是和技术B的3.7版本结合起来就会有冲突。其实很多开发者一直想做一件事,就是收集和梳理各种技术常用的依赖版本,打造最合理的依赖版本配置方案,使用起来更方便。SpringBoot看到这种情况这么容易,于是整理了各个技术版本的常用使用方案,供开发者参考。以后开发者可以直接使用它提供的版本方案,不用担心冲突,相当于SpringBoot列出了无数的技术版本搭配。本技术搭配表名称为parent。parent本身有很多版本,每个parent版本又包含数百个其他技术版本号,不同的版本号的父母之间使用的各种技术。开发者在使用某些技术时,可以直接使用SpringBoot提供的parent,parent帮助开发者统一版本管理各种技术。比如你要用Spring配合MyBatis开发,在没有parent之前怎么办?选择一个Spring版本,再选择一个MyBatis版本,然后一一确定这些技术关联的其他技术的版本。当你的Spring版本发生变化需要切换时,你的MyBatis版本也可能会随之切换。相关技术呢?可能要切换,切换后可能会出现问题。现在这一切工作都可以交给家长了。你不需要关注这些技术之间的版本冲突,你只需要关注你使用的是哪种技术,冲突由parent处理.有人可能会问,如果parent导入了一些我不想用的依赖怎么办?记住清楚,这个很重要,parent只是帮我们做版本管理,不负责给你导入坐标。说白了,还是你决定用什么,但是版本不是你来管理的。总体来说,使用parent可以帮助开发者统一管理版本。项目中的pom.xml继承了一个坐标org.springframework.bootspring-boot-starter-parent2.5.4打开后可以查看,继承一个坐标org.springframework.bootspring-boot-dependencies2.5.4这个坐标定义了两组信息,第一组是各种依赖于版本号的属性,下面列出依赖版本属性的部分。可以看出定义了几种技术的依赖版本号5.16.31.9.73.19.01.152.8.03.12.0<commons-pool.version>1.62.9.01.4.2005.4.32.Final6.2.0.Final4.5.132.12.42.0.11.1.41.19.0.484.13.2第二组是各种依赖坐标信息。可以看出依赖坐标定义中并没有具体的依赖版本号,而是引用了第一组信息中定义的依赖版本属性值org.hibernatehibernate-core${hibernate.version}junitjunit<版本>${junit.version}总之,SpringBoot程序的开发应该继承spring-boot-starter-parent。spring-boot-starter-parent中定义了几个依赖管理继承父模块,可以避免多个依赖使用同一个技术时的依赖版本冲突。继承parent也可以通过引入依赖来实现。4.starterSpringBoot注意到开发者在实际开发中往往对依赖坐标有一些固定的用法。比如你用spring-webmvc,每次都必须用spring-web写一个固定的组合。非常繁琐,而且格式固定,没有任何技术含量。看这种情况,SpringBoot似乎需要开发者一些帮助。整理和开发所有技术使用的固定搭配格式。以后你使用某项技术的时候,不用一次写一堆依赖,也很容易出错。我会让你成为代表一堆东西的东西。开发的时候,用我做过的就行。对于这样固定的技术搭配,SpringBoot将其命名为starter。starter在使用某种技术时,为依赖定义一个固定的搭配格式,也是最好的解决方案。使用starter可以帮助开发者减少依赖配置这个东西其实在入门案例中已经用到了,入门案例中的web函数就是用这个方法来添加依赖的.可以查看SpringBoot的配置源码,看到这些定义项目中的pom.xml中定义了SpringMVC技术的使用,但是并没有写SpringMVC的坐标,而是添加了一个名称包含starter的依赖组织。springframework.bootspring-boot-starter-web在spring-boot-starter-weborg.springframework中定义了几个具体的依赖坐标.bootspring-boot-starter2.5.4compileorg.springframework.启动spring-boot-starter-json2.5.4compileorg.springframework.bootspring-boot-starter-tomcat2.5.4编译org.springframeworkspring-web5.3.9编译org.springframeworkspring-webmvc5.3.9编译5.starter和parentstarter的区别是在坐标中设置了多个坐标。以前写多个坐标,现在写一个。用于减少依赖配置的写量parent定义了数百个依赖版本号。以前写依赖的时候需要手动控制版本。现在由SpringBoot管理,这样就不会有版本冲突了。用于减少依赖冲突。6.Restful接口1)Restful接口请求风格RESTFUL是Web应用的一种设计风格和开发方式。基于HTTP,可以定义为XML格式或JSON格式。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为增加、更改、删??除被调用资源。对资源的操作包括获取、创建、修改和删除,对应HTTP协议提供的GET、POST、PUT、DELETE方法。也就是说,使用RESTful风格的界面,你可能只能从界面上定位到它的资源,却无法知道它进行了哪些操作。您需要具体了解发生了哪些操作。执行的动作必须从其HTTP请求方法类型判断。具体HTTP方法及方法含义如下:GET(SELECT):从服务器获取资源(一项或多项)。POST(CREATE):在服务器上创建一个新的资源。PUT(UPDATE):更新服务器上的资源(客户端提供完整的资源数据)。PATCH(UPDATE):更新服务端的资源(客户端提供需要修改的资源数据)。删除(DELETE):从服务器中删除一个资源。2)Traditionalstyle和RestFul对比传统方式操作资源http://127.0.0.1/item/queryIt...(query,GET)http://127.0.0.1/item/saveIte...(new,POST)http://127.0.0.1/item/updateI...(Update,POST)http://127.0.0.1/item/deleteI...(Delete,GETorPOST)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,DELETE)7.请求参数常用注解6、7代码演示@RestController//@Controller+@ResponseBody@RequestMapping("Stu")//提取Stu@Slf4j//lombok的日志注解publicclassStudentController{@GetMapping("{stuId}/get")//定义请求路径publicStringgetStu(@PathVariable("stuId")StringstuId,@RequestParam("id")StringId,@RequestParam("name")Stringname){/***@PathVariable("stuId")url路径的参数*@RequestParam用于获取url中的参数,如果和前端参数一致,可以不写*/log.info("stuId:{},id:{},name:{}",stuId,Id,name);log.warn("stuId="+stuId);log.warn("id="+Id);log.warn("名称="+名称);return"查询斯图";}@PostMapping("create")//定义请求路径publicStringcreateStu(@RequestBodyMapmap,@RequestHeader("token")Stringtoken,@CookieValue("clientId")StringclientId,HttpServletRequestrequest){/***@RequestBody用于获取前端发送的数据Json*@RequestHeader用于获取请求头中的数据*@CookieValue用于获取cookie中的数据*/log.warn("令牌="+令牌);log.warn("clientId="+clientId);log.warn("map="+map.toString());Stringheader=request.getHeader("token");log.warn("他ader="+header";return"AddStu";}@PutMapping("update")//定义请求路径publicStringupdateStu(){return"ModifyStu";}@DeleteMapping("delete")//定义请求路径publicStringdeleteStu(){return"DeleteStu";}}