《1天搞定Spring boot +vue 全栈开发》后端学习笔记
前言
课程 b站链接:1.课程介绍及环境准备_哔哩哔哩_bilibili
对springboot 的开发实践有很好的指导作用(原理涉及的不多),课程很干,适合初学者,但需要有Jave EE 基础。
涉及到的技术栈如下:
课程前的一点引言
市面上软件架构模式分为两种:
架构对比:
这个教程主要针对BS架构模式:
前端开发:针对浏览器的开发。
后端开发:主要是基于WEB服务器和数据库的交互来对浏览器的请求进行应答。
后端环境配置:Java JDK,开发工具 :IDEA
项目管理工具:Maven
主打的就是一个自动化项目管理,如果开发过程中使用别人的资源,在pom文件写出来,然后保存就从网上的maven仓库咔咔咔下载Jar包并且导入你的项目。省心的一批。妈妈再也不用担心我会烦心依赖管理或者有依赖冲突了!
涉及到的源代码都放到java目录下面, 资源都可以放到resources目录,web项目放到webapp目录,测试放到:test目录。
统一的开发目录让不同人开发的项目也可以拿到手之后一目了然项目组织形式。
maven配置:
解压就能用不用安装,注意不要有中文。配置的话,可以配置一下本地仓库的位置,不配置也可以,有默认位置。还可以配置一下,网上下载时的镜像地址,搞成国内的,更快速。
可以看到不配置的话,默认在c盘用户目录下面/.m2/repository 。配置的话在localRepository标签里面修改即可。配置镜像可以去网上找代码cv
在IDEA中创建项目:类型要创建maven项目。
IDEA中集成了maven,但是你也要配置一下位置,如下:
Springboot介绍
SSM (Spring +SpringMVC +mybatis)项目 有大量的xml配置文件,配置管理,依赖管理都很费劲,所以最后优化出了springboot 这个一站式开发框架。
自带了WEB服务器,不用自己部署。war文件时Tomcat要使用所必要的打包格式,而这里打包就打成Jar就可以了。
Starters: 大型应用需要很多依赖,依赖之间可能因为版本问题有了冲突,就很烦,而springboot里面已经定制好了一些依赖启动器,一个顶一堆依赖,而且肯定不冲突,maven配置文件中一写,直接起飞。
快速创建springboot项目
IDEA创建项目时,选择spring initializer,其实也是基于maven项目的,只不过是有了一些基本的springboot配置。
Group组织:填公司域名或者倒置。
Artifact:项目名称
java version:根据安装的JDK
开发的是web项目,所以如图,会自动安装springMVC项目
创建好之后目录结构就和之前说的一样,下面解读一下pom文件:
parent依赖:springboot提供,可以认为是一个父级的项目,一些maven依赖会自动的加到当前项目中。
spring MVC的依赖,有了这个才能开发一个web项目
测试的依赖 。
再看一下目录结构:
这个static是放css ,js ,图片等静态web资源,一些html的模板放到template中,这个教程是前后端分离的一个教程,所以这个resource文件夹里面没用。
还有一点碎碎念,比如什么项目运行要哪个类,怎么初步验证写个controller
项目热部署
如果后端修改一点代码,如果想生效,必须重新启动项目才能生效,这就太麻烦了。所以需要热部署。在pom添加那个devtools组件,然后在application.properties 中配置一下这个组件,然后IDEA设置一下即可。记得添加完依赖之后,要刷新一下maven(添加了旁边就有一个maven刷新按钮)
在右侧maven窗口可以查看你添加了哪些依赖。
Web入门:
webmvc依赖主要提供了一些web开发的注解,比如控制器的注解等等。
Controller :两种注解
来帮助开发者创建controller
MVC模式:Model:存储数据的 Controller :做协调控制的。View 显示数据
@Controller 注解不推荐,配合thymeleaf 可以开发web应用,但是前后端不分离。
那个return “name” ,实际上是会寻找hello.html页面。这个不赘述,了解就好
@RestController 注解
将返回的对象数据转换成json格式,可以返回对象,可以返回string ,可以返回List ,Map 等
路由映射
后端如何接受从前端来的请求并且返回?前端访问一个网址(url),后端根据网址进行路由映射,后处理请求并返回
@RequestMapping 。属性参数看似很多,实际上开发过程中常用的就前两个
里面那个代码中,属性中规定了只有GET请求才能映射到这个方法。这种写法等价于下面那个@GetMapping
参数传递
QueryString 就是那个 ?nickname=zhangsan&phone=123
就是用来传递参数的,而后端那里,不加多余注解啥的,直接在方法的参数列表中一一对应就可以,但是名称要一样。这个是简单版的。这个形式传不传参数都可以访问到这个方法。
这个例子多了一个@RequestParam 注解 ,代表的是参数映射,意思是将请求url中的参数nickname映射到后面的String name ,这样就可以不用名字一模一样。此外这个注解还有一层语义:就是这个参数是必须的,如果url中没带这个参数,那么这个方法不会被访问到 如果想让其变成非必须参数,注解里加属性required = false 即可。
post请求
post请求就没法用浏览器输入网址来发送了,需要前端或者一些调试工具 如postman 或者apipost
那个Query就是将参数放在地址栏的模拟请求,而Body就是不会在地址栏显示的模拟请求。
post参数既能放在地址栏,也可以在请求体里面。但post请求一般都更倾向放在请求体里面
如果参数特别多,在这个方法参数列表写一堆属性不现实,所以可以封装成一个对象。注意这个对象的属性的安排必须要和前端传来的参数名称一模一样,此时才能自动封装成一个对象
前端的发送的请求体如果是Json格式,那么参数列表加注解@RequestBody 就会自动解析并赋值,但是这个方法有一个要求就是你的User 类里的属性的名称和类型都必须和请求体里面的Json对象对应上,尤其是类型,Json对象也是有类型的 ,你把数据域的引号去掉,就变成数字类型了。提一嘴Json对象的Key域必须是带双引号的 。
在apipost中 ,可以设置post的请求体类型,默认是x-www那个,有时会是Json
Web 进阶
访问静态资源,
当静态资源放在项目中之前说过的那个static 文件夹中,你就可以通过网址来访问,比如输入
localhost/test.jpg 。 就可以在浏览器访问static文件夹中一个叫test.jpg的图片。
过滤规则是什么?
你看上面那个网址,它是直接放在根目录下面的,不方便管理,所以可以添加一点额外的规则,来让在根目录下面的静态资源访问无效。比如过滤规则配置为:
就是你必须访问localhost/images/test.jpg才能访问资源,尽管你并没有创建这个文件夹。
文件上传
表单内有两个输入框,表单数据传输时有其编码格式(右侧框体内的部分),自动生成分隔符,分隔符之间是每个输入框的信息以及内容,第一段是文字输入框的部分,第二段是文件输入框的部分,如果是音视频等文件的话 ,会是二进制格式。这个格式啥的做了解就可以。
默认的tomcat限制了上传文件大小,可以修改。
后端接收时,主要是在映射方法上加一个MutipartFile 参数,注意,文件参数一定要和表单中输入框的那个参数名字是一致的,否则传不过来。传过来之后,我们的目的是将其文件保存到服务器端,所以transferTo就有用处了。
选中的这行的代码目的是得到当前服务器运行的项目路径。为什么要有这个?我们的目的是将用户上传的文件保存到服务器本地,所以一定知道路径才能保存。而我们最终实际的服务器都是部署在linux上的,“云服务器”,所以能够动态的读取路径才可以。 注意这个路径不是我们之前说的那种/static的项目内部路径,而是服务器的路径,tomcat的路径嗷,大概这样式的:
这个HttpServletRequest 对象是java EE中自带的类 ,代表的是网络请求对象。.getServletContext()对象可以获得到当前请求运行的上下文,即取得web服务器。.getRealPath()可以获取到服务器中的特定目录 。那个upload 路径,在服务器中创建出来即可 。这个参数不用在请求中显式地发送,系统自动传递该参数。
如果要apipost中模拟上传文件,类型一定要选formdata那个
这个方法做了两件事,1:如果路径不存在,那么创建/upload/路径 2:创建文件对象,文件对象的路径是之前获取到的路径加上传过来的文件的原始名称比如:../upload/a.jpg,调用传输文件的transferTo方法将该文件保存到这个文件对象中去。
保存成功后,如果你想在项目中访问这个东西,那么就可以配置static location 到这个路径里去了 。
这里配置没有加classpath::是因为这个目录不在项目包里面,而是在服务器那里,第一个反斜杠就代表着服务器的路径。
注意奥。你每次重新运行Springboot 项目 那个tomcat的运行路径都会改变,此时你上次运行保存本地的文件,下次运行访问就找不到路径了。
拦截器:
作为一个了解,可能会用到这个。
大型web系统可能会有很多的Controller,但是这些不同的控制器可能会做一些统一的操作 ,比如:执行某些操作时,如果用户没登陆,让他登录。这些代码没必要重复的写,所以有个拦截器,做一些全局的统一的操作,。
拦截器的使用原理如下,我们根据需求来定义拦截器和重写拦截器方法:
prehandle 方法其实是使用最多的。
拦截器的定义:
创建拦截器类,需要实现HandleInterceptor 类的继承 。然后重写父类里面的方法。根据条件,通过返回值决定这个拦截器是否通过,不通过,就拦截下来了。
拦截器需要注册,否则无法使用。这个注册需要通过java的配置类来完成。
那个LoginInterceptor 是自己创建的拦截器类。
Restful:
是一种架构风格,原则,当你的架构符合restful 原则, 那么你就这个架构称之为restful架构。
Restful的特点:
使用Restful风格非常简单,在controller 中对应各种路径方法即可。
http状态码:
Springboot 实现restful
restful的架构,发送请求的链接设计与传统的不同
传统的架构设计删除用户可能设计为:localhost/del?id=10
但是restful的链接设计就需要遵循网址是资源这一原则,删除:localhost/user/id 。不包含动词,并且传参也变成了用路径传参这个方法。这样的传参方式在controller 中也需要有对应的写法。
你看上面那个ppt中get 和delete 的请求路径是一样的,这个其实是没有关系的,因为请求方式不一样。
大概的restfulApi 的实现方式是下面这样子的。而且你看传参方式也改变了,变成了路径上的花括号,还有多了方法参数列表中的注解,不加这个注解的话,只能获取路径中问好后面的参数并赋值,但是restful 风格没有在路径中添加问号的原则。其他创建,修改什么的用到的用户信息,都在请求体里面。
Swagger:
基于restful风格,用来调试接口,和生成测试文档的工具。用了之后,所有控制器的方法都会映射到一个网页上去,有什么接口,一目了然 。这样测试人员便于测试,而且前后端交流,省去了交流有哪些接口的时间。
使用swagger需要的配置、
添加配置类,其实配置类里能修改的东西非常少,大部分是死的。
使用swagger:
使用后,所有的controller中的请求处理方法都会显示到工具提供的页面,并且可以有对应的测试按钮,之前都是用postman或者apipost ,那么现在就可以直接用swagger。
swagger提供了一些注解,来进行说明,并同步显示到页面上。
Mybatis Plus :
ORM介绍:
ORM为了解决代码中的对象和关系型数据库中的记录相互映射的问题,比如有了它从数据库中查询出来的数据可以自动转换成想要的对象,后端需要保存的对象可以转换成数据库中的表的一行数据;两者实际形式是毫不沾边的,但是通过ORM,二者可以用起来浑然一体。
Mybatis-plus介绍 :
mybatis-plus 是mybatis的增强 ,更少的配置,更方便的使用。
Mybatis -plus 配置
数据库连接池,连接池技术是为了一次性可以操作多个数据库连接,提高使用效率。
对数据库的操作,都是通过Mapper来实现的,实际上Mapper都是个接口,实现不需要你操心,只需要你声明对应的方法,还有在注解里面写好需要的sql语句就可以了。
MapperScan 注解是告诉你的Mapper文件在哪里。
在Mapper文件内使用的注解。
编写Mapper接口,Mapper注解告诉项目这是个Mapper。
在sql语句中,使用#符号来获取到调用方法时传入的参数,如果是传入的对象,也不用慌,写属性名就可以了,但要注意和类中的属性名一致。
使用Mapper的话,在controller中使用自动注入的userMapper,虽然是接口,但是spring会自动帮你实现并且给你注解的这个东西赋值。
controller 方法,遵循restful原则 应该要Json数据,那么方法返回对象设置为List时 ,那么它会自动转换成Json 数据。
实际上之前讲的东西都是mybatis的用法,这些基础的增删改查,在mybatis-plus 可以简化为:
mybatis-plus 是国人编写的,文档都是中文的,很友好。可以没事干去瞅瞅,有啥注解不懂了,一查就会。
《1天搞定Spring boot +vue 全栈开发》后端学习笔记相关推荐
- 读书笔记《Spring Boot+Vue全栈开发实战》(下)
本书将带你全面了解Spring Boot基础与实践,带领读者一步步进入 Spring Boot 的世界. 前言 第九章 Spring Boot缓存 第十章 Spring Boot安全管理 第十一章 S ...
- 《Spring Boot+Vue全栈开发实战》读书笔记
写在前面 嗯,回家处理一些事,所以离职了,之前的公司用开源技术封装了一套自己的低代码平台,所以之前学的spring Boot之类的东西都忘了很多,蹭回家的闲暇时间复习下. 笔记整体以 Spring B ...
- Spring Boot+Vue全栈开发实战——花了一个礼拜读懂了这本书
很幸运能够阅读王松老师的<Spring Boot+Vue全栈开发实战>这本书!之前也看过Spring Boot与Vue的相关知识,自己也会使用了Spring Boot+Vue进行开发项目. ...
- Spring Boot 专栏全栈开发实战
2020 年 11 月 12 日,Spring 官方发布了 Spring Boot 2.4.0 GA 的公告,链接为 Spring Boot 2.4.0 available now.为了让大家能够学习 ...
- ehcache springboot_阿里内部进阶学习SpringBoot+Vue全栈开发实战文档
前言 Spring 作为一个轻量级的容器,在JavaEE开发中得到了广泛的应用,但是Spring 的配置烦琐臃肿,在和各种第三方框架进行整合时代码量都非常大,并且整合的代码大多是重复的,为了使开发者能 ...
- 《SpringBoot+vue全栈开发实战项目》笔记
前言 Spring 作为一个轻量级的容器,在JavaEE开发中得到了广泛的应用,但是Spring 的配置繁琐臃肿,在和各种第三方框架进行整合时代码量都非常大,并且整合的代码大多是重复的,为了使开发者能 ...
- SpringBoot+vue全栈开发实战笔记太香了
Spring 作为一个轻量级的容器,在JavaEE开发中得到了广泛的应用,但是Spring 的配置繁琐臃肿,在和各种第三方框架进行整合时代码量都非常大,并且整合的代码大多是重复的,为了使开发者能够快速 ...
- springboot+vue全栈开发
目录 SpringBoot+Vue全栈开发 前后端框架: 项目目录结构: springboot项目创建配置 开发环境热部署 路由映射 Method匹配 参数传递 注意点1 注意点2 SpringBoo ...
- 快速搞定前端技术一面 匹配大厂面试要求学习笔记
快速搞定前端技术一面 匹配大厂面试要求学习笔记 第1章 课程介绍[说说面试的那些事儿] 本章会出几个面试题,分析每道题目设计的知识点,然后总结出一个完整的知识体系.让我们开始 "题目-> ...
最新文章
- 远程办公,你希望在家工作几天?
- 切糕[HNOI2013]
- 【三种可能问题】RuntimeError: cuDNN error: CUDNN_STATUS_NOT_SUPPORTED
- 【随感】tomorrow ,new semester ,finally i have time to read some books~
- 发布ASP.NET程序至IIS7
- 指纹识别 python_python 网站指纹识别
- 关于对知识的系统建立和站在更高层次进行理解的必要性
- Asp.net2.0里访问Web.config的Section的示例
- dual vector space
- Android getevent,sendevent,input keyevent
- jquery 文本编辑器插件
- css grid随页面大小_前端三大布局,float,flex,grid的介绍。
- 数学建模比赛需要那些c语言的知识,数学建模需要掌握哪些编程语言和技术
- python在linux下打包程序_Python打包程序
- 怎么给pdf添加水印-四个简单步骤
- python识别文字坐标_python识别图片上的文字并返回文字在图片中的坐标
- 微信车主服务代扣的坑
- Springboot毕设项目电子银行业务办理系统38kny(java+VUE+Mybatis+Maven+Mysql)
- java中laber字体颜色设置,重写jxl中可用的颜色实现自定义颜色
- 序贯蒙特卡洛的粒子简并性问题