粗略的看完了雷神的SpringBoot2的教程,这是第一季的第二部分的内容,希望出慢一点,毕竟源代码解析部分都没怎么看。。等会用了再看,教程指路:这里
目录
1.配置文件
yaml语法
基本语法
案例
添加提示
2.Web开发
1.idea配置
2.静态资源访问
1.webjar
2.欢迎页
3.favicon图标
4.静态资源的配置原理(暂略)
3.请求参数处理
1.请求映射
请求映射原理(暂略)
2.普通参数和基本注解
[1]普通注解
[2]复杂注解
3.POJO封装过程(暂略)
4.参数处理原理(暂略)
5.响应数据和内容协商(都是源码,暂略)
响应数据(暂略)
内容协商(暂略)
6.视图解析和引擎模板
视图解析-Thymeleaf
7.拦截器
8.文件上传
9.SpringBoot异常处理
10.web原生组件注入(Servlet,Filter,Listener)
1.使用Servlet API
11.嵌入式Servlet容器
定制Servlet容器
3.数据访问-SQL
1.数据源的自动配置
2.使用第三方的数据源(Druid)
3.使用第三方的数据源(druid)方法二
4.整合MyBatis操作-配置文件方式
5.整合MyBatis操作-纯注解方式(了解)
6.整合MyBatis_Plus
CRUD案例
Mybatis-Plus如何分页
Mybatis-Plus如何删除用户
4.数据访问-NoSQL(略)
5.单元测试
断言(assertions)
简单断言
数组断言
组合断言
异常断言
超时断言
快速失败
前置条件(assumptions)
嵌套测试
参数化测试
6.指标监控(了解,p77-80)
7.SpringBoot高级特性
Profile-环境切换
使用方式1
使用方式2-命令行
profile-条件装配
profile-分组
外部化配置
自定义Start(了解)
0.小知识点
以前配置文件为properties文件,同时兼容一种YAML文件,适合用来做以数据为中心的配置文件
简写为,yml。如果我们有两个配置文件我们会优先使用.propertyies配置文件
注意:单引号和双引号是有区别的,双引号会使用转移字符,单引号不会使用转义字符。
https://start.aliyun.com/
数据类型
为了使用yml文件的时候有提示我们需要添加依赖
由于和真正的业务逻辑无关,所以在最后打包的时候我们不需要加载这个内容,提高速度
选择spring initializer 勾选web,lobok,tools
这里注意如果网络不行我们使用阿里的地址https://start.aliyun.com/,在一开始不选择spring.io
静态资源目录为:类路径:
只要静态资源放在下面这些路径下就可以直接访问到
访问方式为:当前项目根路径/+静态资源名
原理:静态映射/**。请求进来之后先去找Controller看能不能处理,如果不能处理我们在寻找静态资源处理器,如果静态资源也找不到就会404
由于开始的访问路径为类路径,但是这样不方便我们以后为拦截器的设置,所以我们可以在前面添加一个地址。
上面这个路径就要修改为下面这个路径
上述的操作都是改变的访问路径,我们同样可以修改静态资源的存放路径,修改了存放路径之后只要不是存放在修改后路径的静态文件都是无法访问到的。
在静态资源路径下写index.html
或者是能够处理/index请求的Controller
都会作为欢迎页
把所需要的图片使用favicon.ico的名称保存在静态资源路径下即可
要使用rest风格的代码我们需要手动开启
rest原理:
如果想要修改name中的_method
@PathVariable("id")案例:
@RequestHeader案例:
@RequestParam案例:
@CookieValue案例
@RequestBody案例:
@RequestAttribute案例:
@MatrixVariable案例:
使用分号的都是使用矩阵变量的方式。
注意:SpringBoot默认禁用了矩阵变量的功能
我们需要手动开启:原理:对于路径的处理,UrlPathHelper进行解析,使用removeSemicolonContent支持矩阵变量
手动开启方案:
什么是矩阵变量:
上述方式会出错,因为我们需要使用功能路径变量表示的方法
矩阵变量必须有url路径变量才可以被解析
根据客户端接收UN鞥李的不同,返回不同媒体类型的数据
需要引入依赖
在需要使用的爷面前添加上约束
SpringBoot默认不支持JSP,需要引入第三方的模板引擎技术实现页面渲染
我们可以使用Thymeleaf模板引擎
小案例:
引入starter
自动配置好了thymeleaf
boot中的拦截器为:HandlerInterceptor
/**表示拦截所有内容,包括控制器,静态资源
使用案例:
前端页面需要的内容:
Controller中的内容:
其中的逻辑
修改文件上传的相关参数:
自定义错误页面:在静态资源文件夹下,或者是templates文件夹下的error文件夹使用404.html,或者500.html
指定原生的servlet组件都放在哪里:使用webXXXXX的前提
使用WebServlet效果:直接响应,没有结果Spring的拦截器
使用webFilter的案例
使用WebListener
第二种方式使用servlet API使用RegistrationBean
只需要写一个配置类,放入容器中
ServletRegistrationBean
FilterRegistrationBean
ServletRegistrationBean
导入依赖
官方不导入驱动?因为我们不知道使用什么数据库,不同数据库的驱动不同、
我们导入驱动,这里可以不写版本,有版本仲裁(默认8.0.23)
配置文件
测试
导入依赖
配置信息
或者是
测试
配置druid监控页面
配置文件中的配置
由于之前的配置我们小组可以直接在yml中配置即可
直接使用第三方starter
伺候我们只需要放到配置文件中即可
首先需要引入依赖
创建配置类xml
注意这里需要标明@Mapper注解才能被扫描到
配置mybatis规则
测试:
因为我们都是service和mybatis交互所以我们创建service
记得开启驼峰命名策略否则可能匹配不上
或者是:注意这个地方我们只能配置一个,如果使用configuration我们就不能指定config-location。
这个是一个推荐写法:其中configuration指定mybatis全局配置文件中的相关配置项
使用自增主键:
MP是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为了简化开发提高效率。
首先引入配置文件
导入数据库数据
数据源配置
在启动类中添加MapperScan
准备bean类,这个地方的唯一要求就是我们的所有属性都需要在数据库中有,但是我们可以通过注解标明这是一个不存在的属性。(我认为这里不能存在不存在属性是因为我们是继承的基类,基类中的方法会检查左右的属性,不管是否为临时属性,并且返回的也是全部信息,所以我们需要特地标注这个为不存在的属性)
我们的Mapper继承(extends)了基类的Mapper之后我们可以不用自己写简单的CUDR操作
基类中的对象的查找方法为:我们直接在数据库中查找和类名相同的表,如果不是一一对应的我们就需要使用一个注解
需要先启用插件
之后开始分页
补充分页信息
使用数据的方式为page.records。这样才能取到数据。
前端页面
使用Redis
在aliyun上面购买redis。
2.4以上版本不能使用junit4,得手动添加
单元测试使用方法
注释:
常用注解:
所有测试之后都会有详细的报告
断言的情况下,前面的失败之后后面的不会执行。
断定业务逻辑一定会出现异常
嵌套测试的情况下,外层的Test不能驱动内层的Before(After)等方法。
嵌套测试相当于,每一个嵌套的内部作为一个整体,外部和内部是分开测试的相互独立,当然嵌套里面的嵌套也是和外层独立的。
怎么用
测试:
暴露所有Endpoints
方便多环境适配,快速环境切换
命令行最优先。
甚至可以获取到环境变量
在以下地点配置配置文件都可以,后面的覆盖前面的,就是后面的优先级高,第五条需要放在linux中
1.@RestController:相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面
2.@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML
3.如何获取值
@RequestParam注解表示,将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
@PathVariable注解表示,从地址获取参数
或者使用功能@Value
4.绑定配置文件
@component 需要先添加这个,因为只有容器才可以使用下面的配置文件
@configurationProperties(prefix ="这里是配置文件中的XXXX")
5.使用thymaleaf抽取公共内容: