Spring、SpringMVC、Myatis总结

Spring
1.什么是Spring?
Spring是一个开源框架,它是为了解决企业应用开发的复杂性创建的。

2.为什么使用Spring?
1)方便解耦,简化开发
通过Spring提供的IOC容器,可以使对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。
2)AOP编程的支持
通过AOP功能,方便进行面向切面的变成,如性能监测、事物管理、日志记录等
3)声明事务的支持
4)方便集成各种优秀框架
5)降低Java EE API的使用难度
如对JDBC、JavaMail、远程调用等提供了简便封装

3.什么是IOC,为什么使用IOC?
没有IOC之前所有类像钟表齿轮一样耦合在一起,环环相扣。IOC作为第三方容器很好的解决了这个问题,但是容器生成对象是通过反射的方式,在运行效率上有一定的损耗,再就是配置比较繁琐。
Inversion Of Control 控制反转。 我们以前开发,在一个类中使用其他类对象的时候都是采用new的方式直接获取,或者高级一点是通过反射的方式的得到需要的对象实例。这就造成了程序的耦合度非常高,一个类的运行,严重依赖于其他的类。并且还会出现程序中硬编码的情况。 而spring中的IoC很好的解决了该问题,我们在一个类中使用其他类对象时,只需要定义一个接口类型的类成员变量,由使用者在使用时为我们注入具体的实现类对象,从而降低了程序的耦合度。
实现IoC的思想就只有两种:依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
而依赖注入使用的更广泛一些。例如:构造函数注入,set方法注入等等。

4.什么是AOP,为什么使用AOP?
Aspect Oriented Programming 面向切面编程。
我们之前学习的java语言,号称是面向对象编程,它有自己的优势。但是也存在着一些弊端。 举例说明,在实际开发中,我们都会有一根业务主线,即客户(甲方)的需求。而程序员要做的就是围绕业务主线上的需求,实现功能(实现功能的方法我们叫做业务核心方法)。但是不可避免的,会有一些功能与业务主线没有关系,却又不能不做,比如权限的控制,事务的控制,日志的记录等等,这些功能绝大多数时候和业务主线没有关系,但是却和很多业务核心方法交织在一起,使我们的开发变得麻烦,并且冗余代码增多。 而spring的提供了一种思想,把这些和业务主线没有关系的功能剥离出来,而在需要使用这些公共方法时,适时适地的把它加到我们的代码中去,使程序员在开发时,把更多的精力放在理解需求,实现业务核心功能上,并且让我们的代码变得简洁。这种思想就是面向切面编程。
Spring实现面向切面编程使用的是动态代理技术,并且会根据实际情况来选择使用基于子类的还是基于接口的动态代理。
简单介绍控制反转:
它是spring的核心之一。或者说是spring的基础核心,spring的其余核心功能都必须有IoC的支持。
控制反转指的是,我们在获取对象的时候,由之前的主动出击,变成了被动接收。也就是说,在编写某个类时,只需要提供一个接口类型的类成员,并不需要关系具体的实现类,而是由使用者在使用时提供。这就降低了类和类之间的耦合度。
简单介绍依赖注入:
首先,明确依赖注入是实现控制反转的一种思想(另一种是依赖查找)。
其次,在开发过程中,我们需要某个类的实例时,是由使用者为我们提供该类的实例。而不是自己去获取。
最后,实现依赖注入的方式可以是使用构造方法注入或者set方法注入两种方式。
在spring中注入的方式就有很多了,比如constructor-arg元素,property元素,p名称空间等等。

5.什么是Spring的事务管理?
事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。
spring管理事务的两种方式:
1、编程式事务,在代码中硬编码。(不推荐使用)
2、声明式事务,在配置文件中配置(推荐使用)

声明式事务又分为两种:
a、基于XML的声明式事务
b、基于注解的声明式事务

6.Spring5种作用域
1、singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
2、prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
3、request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。
4、session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。
5、globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。

SpringMVC

1.什么是SpringMVC?
1)Spring-mvc框架是spring的一个子模块,实现了mvc的架构,使开发mvc架构的应用变得简单。
2)Spring-mvc封装了通用的功能代码。提高了程序员的开发效率

2.如何启用注解:<context:annotation-config/>
注: 如果使用<context:component-scan base-package=“com.tgb.web.controller.annotation”> </context:component-scan> 则上面内容可以省略

3.SpringMVC工作流程:
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染。视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
工作流程图
4.web.xml的配置
在这里插入图片描述

MyBatis

1.理解什么是MyBatis?
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录。

2.MyBatis的执行流程
1)MyBatis配置文件,包括MyBatis全局配置文件和MyBatis映射文件,其中全局配置文件配置了数据源、事务等信息;映射文件配置了SQL执行相关的信息。
2)MyBatis通过读取配置文件信息,构造出SqlSessionFactory,即会话工厂。
3)通过SqlSessionFactory,可以创建SqlSession即会话。Mybatis是通过SqlSession来操作数据库的。
4)SqlSession本身不能直接操作数据库,它是通过底层的Executor执行器来操作数据库的。Executor接口有两个实现类,一个是普通执行器,一个是缓存执行器(默认)。
5)Executor执行器要处理的SQL信息是封装到一个底层对象MappedStatement中。该对象包括:SQL语句、输入参数映射信息、输出结果集映射信息。其中输入参数和输出结果的映射类型包括Java的简单类型、HashMap集合对象、POJO对象类型。

3.MyBatis的一级缓存和二级缓存
MyBatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。MyBatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+sql语句。value为从查询出来映射生成的java对象,MyBatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。

4.使用MyBatis的mapper接口调用时有哪些要求:
1)Mapper接口方法名和mapper.xml中定义的每个sql的id相同
2) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
3) Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
4)Mapper.xml文件中的namespace即是mapper接口的类路径。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值