Spring MVC是建立在Spring框架基础之上的。
Spring MVC主要解决了接收请求、响应结果的问题。
需要自定义类,在类上添加@Controller
/ @RestController
注解,则此类就是控制器类。
通常,建议在类上也添加@RequestMapping
配置请求路径中的前缀部分。
在类中自定义处理请求的方法:
@RequestMapping
系列注解来配置请求路径和某些参数public
JsonResult
如果要求客户端提交的请求参数是JSON格式的,则处理请求的方法的参数列表中,封装的数据类型必须添加@RequestBody
注解,如果要求提交的请求参数是FormData格式的,则不可以添加@RequestBody
注解。
如果某个请求参数是URL的一部分,在使用@RequestMapping
系列注解配置请求路径时,需要使用{}
格式的占位符,例如/albums/{id}/delete
,并且,在处理请求的方法的相关参数上,添加@PathVariable
注解。
另外,还可以在请求参数上添加@RequestParam
,此注解可以指定请求参数名称、限制必须提交、配置默认值,但此注解并不是必须的。
RESTful是一种服务器端软件的设计风格。
RESTful的典型表现是:在URL中会存在某些具有唯一性的参数值,例如id、用户名等。
RESTful还建议根据对数据操作的方式不同,使用不同的请求方式,例如删除数据时应该使用DELETE
这种请求方式,但,通常仍只使用GET
和POST
。
RESTful只是一种风格,并不是设计规范。
在前后端分离的开发模式下,响应方式都是“响应正文”的,可以:
@ResponseBody
@ResponseBody
@RestController
以上3种方式均可。
通常,为了保证服务器端响应结果的格式是统一的,会自定义数据类型,封装需要响应的数据,至少包括:
当处理请求的方法的返回值类型是以上封装的类型(即项目中的JsonResult
)时,且当项目中已经添加了jackson-databind
依赖时,此依赖项中的Converter会自动将方法返回的对象转换为JSON格式并响应到客户端去。
自定义统一处理异常的类,在类上添加@ControllerAdvice
/ @RestControllerAdvice
注解。
在类中自定义处理异常的方法:
@ExceptionHandler
public
HttpServletRequest
、HttpServletResponse
等,但不可以像处理请求的方法那么自由在同一个项目中,可以有多个统一处理异常的类,每个类中都可以有多个处理异常的方法,只要这些方法处理的异常不完全相同(各方法处理的异常允许存在继承关系)即可。
Spring MVC的核心组件:
DispathcerServlet
:用于统一接收请求,并分发HandlerMapping
:记录了请求路径与处理请求的控制器组件的对应关系Controller
:实际请求的组件ModelAndView
:封装了数据与视图名称的结果ViewResolver
:根据视图名称确定实际应用的视图组件
关于Spring MVC框架,你应该:
JsonResult
这种封装响应数据的类型的作用、设计思路另外,暂未涉及的:
Mybatis框架主要实现了简化数据库编程。
通常,使用Mybatis框架时,需要添加依赖:
mybatis
:Mybatis框架mybatis-spring
:Mybatis整合Springmysql-connector-java
:数据库依赖项spring-jdbc
:Spring整合JDBC除此以外,通常还会添加:
spring-test
:执行测试commons-dbcp
/ druid
等:数据库连接池在Spring Boot项目中,只需要添加mybatis-spring-boot-starter
和mysql-connector-java
即可,测试时,另外添加spring-boot-starter-test
。
在Spring Boot项目中,在application.properties
中配置:
spring.datasource.url
spring.datasource.username
spring.datasource.password
然后,需要在配置类上使用@MapperScan
指定Mapper接口所在的包,在启动项目时,Mybatis会扫描此包,并找到相关的接口,自动生成这些接口的代理对象。
另外,还需要在application.properties
中配置mybatis.mapper-locations
属性,用于指定XML文件的位置。
使用Mybatis实现数据库编程主要:
关于抽象方法:
int
,查询只需要保证返回值类型足够装得下查询结果即可@Param
注解
@Param
关于配置SQL语句:
可以使用@Insert
等节点配置SQL语句,但是不推荐,推荐使用XML文件来配置SQL语句
必须在
上配置namespace
属性,用于指定对应的接口
使用
等节点配置SQL语句,每个节点必须配置id
属性,用于指定对应的抽象方法
在配置
时,如果表的id是自动编号的,则应该配置useGeneratedKeys
和keyProperty
属性,以获取自动编号的id
在配置时,必须配置
resultMap
或resultType
这2个属性中的某1个
可以使用
节点封装SQL语句片段,并使用
节点进行引用,通常,使用
封装字段列表
使用
节点用于指导Mybatis封装查询结果
使用动态SQL的
可以实现对数组或List
集合类型的参数的遍历
使用动态SQL的
可以实现根据参数决定SQL语句中是否包含某个片段,用于处理更新数据的操作时,通常结合
节点一起使用
注意:
并没有匹配的类似else
的节点,如果要实现if...else
效果,可以使用2个条件完全相反的
,但是,这种做法效率偏低,另外,可以使用
系列节点来实现:
- <choose>
- <when test="条件">
- 满足条件时的SQL语句片段
- when>
- <otherwise>
- 不满足条件时的SQL语句片段
- otherwise>
- choose>
需要掌握以上所有内容
Spring Boot是一个基于Spring框架在的Maven项目,每个自行创建的Spring Boot项目都使用了官方的Spring Boot项目作为父级项目!
Spring Boot是一个基于“约定大于配置”思想的、自动完成了许多配置的框架。
Spring Boot框架的基础依赖项是spring-boot-starter
,而其它以spring-boot-starter
为Artifact前缀的依赖项都包含了它。
在spring-boot-starter
中,包含的典型依赖项有:
spring-context
所以,任何一个Spring Boot项目,都可以使用Spring框架的特性,并且可以使用日志。
并且,在Spring Boot项目中,默认在src/main/resource
下就有application.properties
文件,是项目中默认自动读取的配置文件。
关于application.properties
配置,在不同的环境下,某些配置的值应该是不同的,例如连接数据库的URL、用户名、密码等,所以,应该针对不同的环境,使用不同的配置,即Profile配置。
通常,关于Profile配置,至少分为3类:
甚至,同样是开发环境下,可能因为团队协作开发,各开发人员也使用了不同的配置。
使用Profile配置的方式是:
application-xxx.properties
文件,文件名中的xxx
是自定义的名称,通常是dev
、test
、prod
等,把各个环境下不同的配置编写在此文件中application.properties
中使用spring.profiles.active
属性激活某个Profile配置,此属性的值就是application-xxx.properties
文件中的xxx
部分当使用Profile配置后,这些配置文件默认并不会直接读取并应用,需要被激活才会被读取并应用!
在application.properties
中的配置是始终被读取并应用的!
YAML配置是以.yml
作为扩展名的配置文件。
Spring框架本身并不支持读取这类文件,需要额外添加依赖项,在Spring Boot项目中,默认已经集成必要的依赖项,可以直接读取这类文件。
在Spring Boot项目中,可以将.properties
的配置完全转移到.yml
文件中,并且,同样支持Profile配置,即可以同时存在application.yml
、application-dev.yml
等。
关于YAML配置,其语法特征是:
spring.datasource.url
这类属性,将根据小数点拆分为2行,每一行使用冒号表示结束,从下一行开始,缩进2个空格(不可以是TAB,但是,IntelliJ IDEA在编辑YAML时,按下的TAB会自动转换成2个空格),当属性名写完后,在冒号右侧添加1个空格,再填写属性值例如:
- spring:
- datasource:
- url: jdbc:mysql://localhost:3306/mall_pms
- username: root
- password: root