mybatis-spring-springMVC-springBoot总结

mybatis-spring-springMVC-springBoot总结

介绍

第一节 mybatis

1、mybatis简介

MyBatis原本是Apache软件基金会的一个开源项目叫iBatis,2010年这个项目由Apache迁移到了google code上来管理并改名为MyBatis,2013年又迁移到了Github。

MyBatis是一个非常优秀的持久层框架(DAO层框架),它是对JDBC的封装,使得开发者只需要关注SQL语句(业务)本身即可,无需开发者处理加载驱动、获取连接、创建Statement等繁琐的操作。
MyBatis最大的特点就是把SQL语句写在XML配置文件中,而且MyBatis执行完SQL语句之后可以以对象形式返回(POJO/POJO集合等)

MyBatis是一个实现类ORM思想的持久层框架ORM(Object/Relation Mapping)对象/关系映射,对象就是指的java中的类的实例,关系指的是关系型数据库

ORM思想:将数据库中的关系数据表映射为java中的对象,把对数据表的操作转换为对对象的操作,实现面向对象编程。因此ORM的目的是使得开发人员以面向对象的思想来操作数据库。
比如:原来添加使用的是INSERT INTO…,如果使用了实现ORM思想的持久层框架,就可以在Java程序中直接调用api,比如insert(User),达到操作对象即可操作数据库的效果。

Hibernate是一个全自动的ORM持久层框架,只需要编写POJO,在XML中定义好POJO属性和数据库表字段的映射/对应关系,就可以在Java中实现以面向对象的方式进行操作。SQL语句都不用编写,但是因为性能等问题,市场占有率越来越低。

MyBatis框架是一个半自动的ORM持久层框架,也可以在Java中实现以面向对象的方式操作数据库,但是需要我们自己编写SQL语句,MyBatis是目前比较流行的DAO中持久层的框架技术。

2、mybatis使用基本步骤

mybatis-spring-springMVC-springBoot总结_第1张图片

第二节 spring

0、Spring中的事务控制
0.1 事务简介
  • Spring的事务控制都是基于AOP的,它既可以使用编程的方式实现,也可以使用配置的方式实现
  • Spring框架为我们提供了一组事务控制的接口,spring-tx.jar
  • JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层事务处理的解决方
0.2 Spring中事务控制API介绍
  • PlatformTransactionManager
    此接口是Spring的事务管理器,它里面提供了我们常用的操作事务的方法,如下:

    • 获取事务状态信息:
      TransactionStatus getTransaction(@Nullable TransactionDefinition var1) throws
      TransactionException;
    • 提交事务:
      void commit(TransactionStatus var1) throws TransactionException;
    • 回滚事务:
      void rollback(TransactionStatus var1) throws TransactionException;
  • TransactionDefinition它是事务的定义信息对象,里面包含如下方法:

    • 取事务对象名称:
      String getName();
    • 获取事务的隔离级别:
      int getIsolationLevel();
    • 获取事务的传播行为:
      int getPropagationBehavior();
    • 获取事务超时时间:
      int getTimeout();
    • 获取事务是否只读:
      boolean isReadOnly();
      等等
0.3 Spring事务配置相关标签及属性

mybatis-spring-springMVC-springBoot总结_第2张图片

1、spring简介(IOC+AOP)

Spring是分层的JavaSE/EE应用的轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层(Web层)SpringMVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界中众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。

老的框架组合:

​ Struts2+Spring+Hibernate(SSH)

​ SpringMVC+Spring+MyBaits(SSM)

新的框架组合:

​ Spring+SpringBoot+MyBatis(新SSM)

2、spring优势
  • 1.方便解耦,简化开发

通过Spring提供的IOC容器,可以将对象的依赖关系交由Spring进行控制,避免硬编码所造成的程序过度耦合。用户也不必再为单例模式、属性文件的解析等这些底层的需求编写代码,可以更加专注于上层的业务。

  • 2.AOP编程的支持

通过Spring的AOP功能,方便进行面向切面编程,许多不容易用OOP实现的功能可以通过AOP轻松实现。

  • 3.方便程序的测试

可以使用非容器依赖的编程方式进行几乎所有的测试工作

  • 4.方便集成各种优秀的框架

Spring可以降低各种框架的使用难度,提供了对各种框架的支持

-5. 降低Java API的使用难度

Spring 对JavaEE API进行了封装,例如:JDBC、JavaMail

  • 6.Spring源码是经典的学习范例

Spring源码设计精妙、结构清晰、匠心独用等处处体现大师对Java设计模式的灵活运用及Java技术的高深造诣。它的源代码是Java技术最佳实践的范例。

3、控制反转 IOC—Inverse Of Control
3.1.内聚和耦合
  • 耦合性(Couping),也叫耦合度,它是对模块之间关联程度的度量在软件工程中,耦合指的就是对象之间的依赖关系。对象之间的耦合越高,则表明模块的独立性和可重用性越差,且维护成本越高。因此,对象的设计应使类和构件之间的耦合最小。软件设计中通用用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个标准就是高内聚低耦合。

  • 内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应恰好做一件事,它描述的是模块内的功能联系。
    耦合是软件结构中各个模块之间相互连接的一种度量,耦合强弱取决于模块之间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据的复杂度。程序讲究的低耦合,高内聚。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依赖度却不要那么紧密。

程序的耦合:就是程序之间的依赖关系
包括:
类之间的依赖
方法之间的依赖
解耦:
降低程序之间的依赖关系
实际开发中:
应该做到:编译期不依赖,运行时才依赖
解耦思路:
第一步:使用反射来创建对象,而避免使用new关键字
第二步:通过读取配置文件来获取要创建的对象全限定类名

3.2. IOC概述

IOC(Inverse Of Control)中文的解释是”控制反转“,对象的使用者不是创建者,作用是将对象的创建反转给Spring框架来创建和管理。

控制反转怎么去理解呢?其实它反转的是什么呢?反转的是对象的创建工作。举个例子:平常我们在Servlet或者service里面创建对象,都是使用new的方式来直接创建对象,现在有了spring之后,我们就再也不new对象了,而是把对象创建的工作交给spring容器去维护,我们只需要向spring容器要对象即可。

IOC的作用:消减计算机程序的耦合(降低代码中的依赖关系)

4、依赖注入(DI)

依赖注入(DI):Dependency Injection。就是让Spring框架给Bean对象的属性进行赋值,它是Spring框架核心IOC的具体体现。

  • 我们在编写程序时,通过控制反转,把对象的创建交给了Spring,但是代码中不可能出现没有依赖的情况,IOC解耦只是降低它们的依赖关系,但是不会消除。
  • 简单的来说,依赖注入(DI)就是坐等框架把所有需要的对象传过来,而不要我们自己去获取。
4.1. 构造方法注入

使用构造方法的方式,给POJO中的属性传值

要求:POJO需要提供一个有参数的构造方法


    <bean id="account" class="com.wojia.domain.Account">
        
            




            




            
            <constructor-arg value="1001"/>
            <constructor-arg value="zhangsan"/>
            <constructor-arg value="8888.0"/>
            <constructor-arg ref="date"/>
    bean>
    <bean id="date" class="java.util.Date"/>
4.2、set方法注入

顾名思义,就是在类中提供需要注入成员的set方法,在实际开发中,使用比较多。


    <bean id="account2" class="com.wojia.domain.Account">
        
        <property name="id" value="1003"/>
        <property name="accountName" value="小明"/>
        <property name="money" value="6666.88"/>
        <property name="birthday" ref="date"/>
    bean>

给List结构的集合属性注入数据时:

  • array、list、set这三个标签通用,另外赋值可以之间给value属性即可,也可以使用bean标签配置一个对象,或者用ref标签引用另一个已经配置好的bean的唯一标识
  • 在Map结构的集合属性注入数据时:
    • map标签使用entry子标签注入值,entry标签可以使用key和value属性存入map中的数据
    • 使用value-ref属性指定已经配好的bean的引用
5、Spring整合MyBatis开发

Spring和MyBatis都是框架,整合到底是MyBatis接管Spring,还是Spring接管MyBatis呢?

MyBatis框架是一个持久层ORM框架,而Spring是一个综合性的框架。所以,整合是Spring整合MyBatis,也就是Spring把MyBatis的一些工作接管了,让Spring框架接管SqlSessionFactory工厂的创建,同时再通过读取mapper配置文件创建dao代理实现类,并把它存入IOC容器,包括数据源或者连接池也都交给spring来管理。

Spring和MyBatis它们都有独立的配置文件,我们在整合时,有两种选择。第一种就是保留两个框架的配置文件,第二种就是只保留Spring的配置文件,把mybaits相关的配置都写在spring配置文件中。

6、AOP概述
6.1.什么是AOP

AOP:全程是Aspect Orientied Programming,面向切面编程。

  • 在软件行业中,AOP为面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热门,也是Spring框架中一个核心,也是函数式编程的一种衍生类型。利用AOP可以对业务逻辑各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时也提高了开发效率。
  • 简单的来说,AOP就是把我们程序中重复的代码抽取出来,在需要执行的时候,使用动态代理技术,在不修改源代码的基础上,对我们已有的方法进行增强
  • AOP面向切面编程,是一种新的编程方式,是对传统OOP的补充
6.2.AOP的作用及优势

作用:

  • 在程序运行期间,不修改源代码的基础上,对已有的方法进行增强。

优势:

  • 减少重复代码
  • 提高开发效率
  • 维护方便
6.3.AOP的应用【重点】
  1. Spring中AOP的专业术语
  • Joinpoint(连接点)
    • 所谓连接点就是指那些需要被拦截的点,在Spring中,这些点指的就是方法,因为Spring只支持基于方法的连接点。
  • PointCut(切入点)
    • 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义
  • Advice(通知/增强)
    • 所谓通知是指拦截到jointpoint之后需要做的事情就是通知
    • 通知类型:前置通知、后置通知、异常通知、最终通知、环绕通知
  • Introduction(引介—引入)
    • 引介是一种特殊的通知在不修改类代码的前提下,introducation可以在运行期间为类动态地添加一些方法或属性。
  • Target(目标对象)
    • 代理的目标对象
  • Weaving(织入)
    • 就是把增强应用到目标对象创建新的代理对象的过程
  • Proxy(代理)
    • 一个类被AOP织入增强,就产生一个结果,代理类
  • Aspect(切面)
    • 就是切入点和通知(引介)的结合
  1. AOP术语总结
  • JoinPoint:连接点(所有可以被增强的方法)
    • 类里面哪些方法可以被增强,这些方法称为连接点
  • PointCut:切入点(具体项目中真正已经被增强的方法)
    • 在类里面可以有很多方法被增强,但是实际开发中,我只对具体的某个几个方法增强,那么这些实际增强的方法就称为切入点
  • Advice:通知/增强(具体用于增强方法的代码)
    • 比如给某个切入点(方法)扩展了校验权限的功能,那么这个校验权限即可称之为增强或者通知
    • 通知分为:
      • 前置通知:在原来方法之前执行
      • 后置通知:在原来方法执行之后执行,特点:可以得到被增强方法的返回值
      • 异常通知:目标方法出现异常执行,如果方法没有异常,不会执行,特点:可以获取异常的信息
      • 最终通知:指的是无论是否有异常,总是被执行的。
      • 环绕通知:在方法执行前和后执行,特点:可以阻止目标方法执行
  • Aspect,切面(所有的通知都是在切面中的)
7、spring的IOC注解

spring常用注解,点击跳转

7.1 @Autowired (自动装配)
  • 自动按照类型注入,当时用注解注入时,set方法可以省略,它只能注入其他bean类型
  • 如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出 BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。

示例:
mybatis-spring-springMVC-springBoot总结_第3张图片
mybatis-spring-springMVC-springBoot总结_第4张图片

7.2 @Qualifier(指定注入Bean的名称)
  • @Autowired是根据类型进行自动装配的。在上面的例子中,如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出 BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。

示例:
mybatis-spring-springMVC-springBoot总结_第5张图片

7.3 @Resource (与@Autoowired类似)

1、@Resource的装配顺序:

  • @Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
  • 指定了name或者type则根据指定的类型去匹配bean
  • 指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

2、区分一下@Autowired和@Resource两个注解的区别:

  • @Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
  • @Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
    Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。
7.4 @Component (配置管理的资源,又分为3层注解)
  • @Component是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。
  • @Component 根据三层架构分为三个注解
    • @Controller 用在Controller层类上
    • @Service 用在Service层类上
    • @Repository 用在DAO层(因为Dao层是mapper接口,一般不用)
7.5 @Scope (用于指定scope作用域的,用在类上)
  • 用于改变作用范围,同xml文件中bean标签的scope属性
7.6 @Value (用于注入基本类型)
7.7 @Configuration (指定当前类是一个配置类)注意:用此注解可不使用xml配置文件
  • 作用:用于指定当前类是一个配置类,创建容器上从此类上加载注解,获取容器需要使用AnnoationApplocationContext(类.class)
  • 属性:value,指定配置类的字节码
7.8 @ComponentScan (指定扫描包)
  • 作用:用于指定spring在初始化容器时要扫描的包,作用于一样
  • 属性backage:用于指定扫描的包
7.9 @Bean (创建一个对象)
  • 作用:只能写在方法上,表明使用次方法创建一个对象,并存入spring容器
  • 属性 name:是当前@Bean注解方法创建对象的唯一标识
7.10 @Import (导入其他配置类)
  • 作用:用于导入其他配置类,被引入的其他配置类可以写或不写@Cpnfiguration
  • 属性 value[]:用于指定其他配置类的字节码
7.11 @PropertySource (加载.properties文件中的配置)
  • 作用:用于加载.properties文件中的配置
  • 属性 value[]:用于指定properties文件的位置,若在类路径下,需写classpath
    示例:
    mybatis-spring-springMVC-springBoot总结_第6张图片
    mybatis-spring-springMVC-springBoot总结_第7张图片
8、java的注解
8.1注意

Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。

8.2 @Resource (与@Autowired注解作用非常相似)

@Resource注解与@Autowired注解作用非常相似,

说一下@Resource的装配顺序:

  • @Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配

  • 指定了name或者type则根据指定的类型去匹配bean

  • 指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

区分一下@Autowired和@Resource两个注解的区别:

  • @Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配

  • @Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了

8.3 @PostConstruct (标识是:初始化方法)

在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入)。

8.4 @PreDestroy (标识是:销毁方法)

在方法上加上注解@PreDestroy,这个方法就会在Bean初始化之后被Spring容器执行。

第三节 springMVC

1、 MVC模式

MVC全名是 Model View Controller,是模型(model)—视图(view)—控制器(controller)的 缩写,是一种用于设计创建web应用程序表现层的模式。MVC中每个部分各司其职:

  • Model(模型): 通常指的是我们的数据模型,作用一般情况用于封装数据
  • View(视图): 通常指的就是我们的jsp或者html,作用一般就是展示数据的 通常视图是依赖模 型数据创建的。
  • Controller(控制器): 是应用程序中处理用户交互的部分,作用一般就是处理程 序逻辑的。 它相对于前两个不是很好理解,这里举个例子: 例如: 我们要保存一 个用户的信息,该用户信息中包含姓名,性别年龄等等 这时候表单输入要求年龄必须是1-100 之间的整数,姓名和性别不能为空,并且把数据填充到模型中,此时处理js的校验之外,服务器端也应该有 数据准确性的校验,那么校验就是控制器该做的。当校验失败后,由控制器负责把错误页面展示给使用者; 如果校验成功,也是控制器负责把数据填充到模型,并且调用业务层实现完整的业务需求。
2、 SpringMVC概述
  • Spring为表现层(展现层、Web层)提供了基于MVC设计理念的优秀的Web框架,是目前最受欢迎的MVC框架之一。
  • Spring3.0后几乎是全面超越Struts2,成为最优秀的MVC框架
  • SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,而无须实现任何接口
  • 支持REST风格的URL请求,RestFul
  • 充分利用了Spring的IOC
  • SpringMVC是一种轻量级的、基于MVC的WEB层应用框架
3、 SpringMVC的执行流程

mybatis-spring-springMVC-springBoot总结_第8张图片

①用户发送请求至前端控制器DispatcherServlet。
②DispatcherServlet收到请求调用HandlerMapping处理器映射器。
③处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器
(如果有则生成)一并返回给DispatcherServlet。
④DispatcherServlet调用HandlerAdapter处理器适配器。
⑤HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。 ⑥Controller执行完成返回ModelAndView。
⑦HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。 ⑧DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
⑨ViewReslover解析后返回具体View。
⑩DispatcherServlet根据View进行渲染视图(即将模型数据
填充至视图中)。DispatcherServlet响应用户。

4、 SpringMVC组件解析
  1. 前端控制器:DispatcherServlet
    用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中
    心,由
    它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。
  2. 处理器映射器:HandlerMapping
    HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现
    不同的
    映射方式,例如:配置文件方式,实现接口方式,注解方式等。
  3. 处理器适配器:HandlerAdapter
    通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型
    的处理
    器进行执行。
  4. 处理器:Handler
    它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由
    Handler 对具体的用户请求进行处理。
  5. 视图解析器:View Resolver
    View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图
    名,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用
    户。
  6. 视图:View
    SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView
    等。最常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用
    户,需要由程序员根据业务需求开发具体的页面
5、 SpringMVC注解

在实际项目中,我们最常用的几个注解,包括 @Controller、@RestController、 @RequestMapping、@PathVariable、@RequestParam 以及 @RequestBody,
springMVC常用注解,点击跳转

5.1 @Controller
  • 在SpringMVC中,controller主要负责处理前端控制器(DispatcherServlet )发过来的请求,经过业务逻辑层处理之后封装层一个model,并将其返回给view进行展示。@controller注解通常用于类上,如果结合Thymeleaf模板使用的话,会返回一个页面。如果是前后端分离的项目,则使用@RestController,表明返回的是json格式数据。
5.2 @RestController (@RestController = @Controller + @ResponseBody)

mybatis-spring-springMVC-springBoot总结_第9张图片

  • 可以发现,@RestController注解里面包含了@Controller注解和@ResponseBody注解,@ResponseBody 注解是将返回的数据结构转换为 JSON 格式,所以说可以这么理解:@RestController = @Controller + @ResponseBody ,省了很多事,我们使用 @RestController 之后就不需要再使用 @Controller 了。
5.3 @RequestMapping (处理请求地址映射)

mybatis-spring-springMVC-springBoot总结_第10张图片

  • @RequestMapping 是一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。用于类上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;方法的级别上注解表示进一步指定到处理方法的映射关系。

该注解有6个属性,一般在项目中比较常用的有三个属性:value、method 和 produces。

  • value 属性:指定请求的实际地址,value 可以省略不写;
  • method 属性:指定请求的类型,主要有 GET、PUT、POST、DELETE,默认为 GET。
  • produces 属性:指定返回内容类型,如 produces = “application/json; charset=UTF-8”。

这个很简单,启动项目在浏览器中输入 localhost:8080/test/get 测试一下即可。

  • 四种不同的请求方式,都有相应的注解。不用每次在 @RequestMapping 注解中加 method 属性来指定,上面的 GET 方式请求可以直接使用 @GetMapping("/get") 注解,效果一样。相应地,PUT 方式、POST 方式和 DELETE 方式对应的注解分别为 @PutMapping、@PostMapping 和 DeleteMapping。
5.4 @PathVariable (获取 URL请求 参数)

mybatis-spring-springMVC-springBoot总结_第11张图片

  • @PathVariable 注解主要用来获取 URL 参数,Spring Boot 支持 Restfull 风格的 URL,比如一个 GET 请求携带一个参数 id,我们将 id 作为参数接收,可以使用 @PathVariable 注解。
  • 这里需要注意一个问题,如果想要 URL 中占位符中的 id 值直接赋值到参数 id 中,需要保证 URL 中的参数和方法接收参数一致,否则将无法接收。如果不一致的话,其实也可以解决,需要用 @PathVariable 中的 value 属性来指定对应关系。如下:
    -mybatis-spring-springMVC-springBoot总结_第12张图片
  • 对于访问的 URL,占位符的位置可以在任何位置,不一定非要在最后,比如这样也行:/xxx/{id}/user。另外,URL 也支持多个占位符,方法参数使用同样数量的参数来接收,原理和一个参数是一样的,例如:
    mybatis-spring-springMVC-springBoot总结_第13张图片
  • 运行项目,在浏览器中请求:localhost:8080/test/user/2/zhangsan, 可以看到控制台输出如下信息:
    获取到的id为:2
    获取到的name为:zhangsan
    所以它支持多个参数的接收。同样地,如果 URL 中的参数和方法中的参数名称不同的话,也需要使用 value 属性来绑定两个参数。
5.5 @RequestParam (获取URL请求参数)
  • @RequestParam 注解顾名思义,也是获取请求参数的,上面我们介绍了 @PathValiable 注解也是获取请求参数的,那么 @RequestParam 和 @PathVariable 有什么不同呢?

  • @PathValiable 是从 URL 模板中获取参数值, 即这种风格的 URL:
    在这里插入图片描述

  • @RequestParam 是从 Request 里获取参数值,即这种风格的 URL:
    在这里插入图片描述

  • 对于@RequestParam 注解代码测试如下:
    mybatis-spring-springMVC-springBoot总结_第14张图片

  • 同样的@RequestParam 注解的value 属性是比较常用的,其作用和@PathVariable注解的value属性是一样的。此外@RequestParam 注解还有两个属性比较常用:

    • required 属性:true 表示该参数必须要传,否则就会报 404 错误,false 表示可有可无。
    • defaultValue 属性:默认值,表示请求中没有同名参数时的默认值。
  • 从 URL 中可以看出,@RequestParam 注解用于 GET 请求上时,接收拼接在 URL 中的参数。除此之外,该注解还可以用于 POST 请求,接收前端表单提交的参数,假如前端通过表单提交 username 和 password 两个参数,那我们可以使用 @RequestParam 来接收,用法和上面一样

5.6 @RequestBody (接收前端传来的实体)
  • RequestBody 注解用于接收前端传来的实体,接收参数也是对应的实体,比如前端通过 JSON 提交传来两个参数 username 和 password,此时我们需要在后端封装一个实体来接收。在传递的参数比较多的情况下,使用 @RequestBody 接收会非常方便。例如:
    mybatis-spring-springMVC-springBoot总结_第15张图片
  • 可以看出,@RequestBody 注解用于 POST 请求上,接收 JSON 实体参数。它和上面我们介绍的表单提交有点类似,只不过参数的格式不同,一个是 JSON 实体,一个是表单提交。在实际项目中根据具体场景和需要使用对应的注解即可。

第四节 springBoot

1、SpringBoot简介
  • 当前互联网后端开发中,JavaEE占据了主导地位。对JavaEE开发,首选框架是Spring框架。在传统的Spring开发中,需要使用大量的与业务无关的XML配置才能使Spring框架运行起来,这点备受许多开发者诟病。随着Spring4.x发布,Spring已经完全脱离XML,只使用注解就可以运行项目。为了进一步简化Spring应用的开发,SpringBoot诞生了。它是由Pivotal团队提供的全新框架,其设计目的是简化Spring应用的搭建及开发过程,并迎合时下流行的分布式微服务设计思想,越来越多企业在使用SpringBoot。
  • 【SpringBoot一是为了简化Spring应用的搭建和开发过程;二是微服务开发的框架】
2、SpringBoot优点
  • 为Spring开发者提供一种,更快速、体验更好的Spring应用开发方式。
    开箱即用,同时也可快速扩展 嵌入式的Tomcat。
    绝对没有冗余代码,无需XML配置。
  • 来提高我们的开发人员的开发效率。使用springboot:可以不需要配置,可以不需要自己单独去获取tomcat,基本解决了包依赖冲突的问题,一键发布等等特性。
  • springboot就是一个基于spring的一个框架。提供了一些自动配置的依赖包,自动嵌入servlet的容器,简化了我们开发的配置,提升开发人员的开发效率,并解决了包依赖的问题
3、 SpringBoot核心功能

核心能力:Spring容器、日志、自动配置AutoCongfiguration、Starters
web应用的能力:MVC、嵌入式Web服务器 数据访问(持久化):关系型数据库、非关系型数据库 强大的整合其他技术的能力
测试:强悍的应用测试 :
1、创建单机版的Spring项目;
2、Embed Tomcat, Jetty or Undertow
directly (no need to deploy WAR files) ;
翻译:直接内嵌了Tomcat、Jetty或者Undertow应用服务器(无需再部署war包);
3、Provide opinionated
‘starter’ dependencies to simplify your build configuration;
翻译:通过简化你的构建配置,为你提供了一个自行设计的启动器;
4、Automatically configure Spring and 3rd party libraries whenever possible; 翻译:可以随时自动配置Spring和第三方类库;
5、Provide production-ready features such as metrics, health checks and externalized configuration; 翻译:提供一个可随时上生产环境的特性,就像一个度量仪,用于健康监测和扩展配置;
6、Absolutely no code generation and no requirement for XML
configuration; 翻译:完全没有衍生代码,并且无需XML配置。 创建独立的Spring应用程序 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件) 提供“入门”依赖项(起步依赖),以简化构建配置 尽可能自动配置Spring和第三方库 提供可用于生产的功能,例如指标,运行状况检查和外部化配置 完全没有代码生成,也不需要XML配置

4、SpringBoot常用注解

SpringBoot常用注解,点击跳转

  • @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。
    • @ComponentScan让Spring Boot扫描到Configuration类并把它加入到程序上下文。
    • @Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。
    • @EnableAutoConfiguration 自动配置。
  • @ComponentScan 组件扫描,可自动发现和装配一些Bean。
  • @Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。
  • @RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。
  • @Autowired自动导入。
  • @PathVariable获取参数。
  • @JsonBackReference解决嵌套外链问题。
  • @RepositoryRestResourcepublic配合spring-boot-starter-data-rest使用。
4.1 @SpringBootApplication (自动给程序进行必要的配置)
  • 作用:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。
    • @ComponentScan让Spring Boot扫描到Configuration类并把它加入到程序上下文。
    • @Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。
    • @EnableAutoConfiguration 自动配置。
      mybatis-spring-springMVC-springBoot总结_第16张图片
4.2 @ResponseBody (该方法的返回结果直接写入HTTP response body中)
  • 作用:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP的response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。示例代码
    mybatis-spring-springMVC-springBoot总结_第17张图片
4.3 @Controller (定义控制器类)
  • 作用: 用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。示例代码:
    mybatis-spring-springMVC-springBoot总结_第18张图片
4.4 @RestController (@RestController=@ResponseBody和@Controller的合集)

mybatis-spring-springMVC-springBoot总结_第19张图片

4.5 @RequestMapping (提供路由信息)
  • 作用:提供路由信息,负责URL到Controller中的具体函数的映射。
4.6 @EnableAutoConfiguration (自动配置应用)
  • 作用:Spring Boot自动配置(auto-configuration)。尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库。

  • 你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

4.7 @ComponentScan (自动发现扫描组件)
  • 作用:表示将该类为自动发现扫描组件。即如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。可以自动收集所有的Spring组件,包括@Configuration类。

  • 如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用@Service,@Repository等注解的类。

4.8 (全局异常处理)@ControllerAdvice和@ExceptionHandler(Exception.class)
  • 等等,同上spring或springMVC注解,通用

你可能感兴趣的:(mybatis-spring-springMVC-springBoot总结)