一、SSM包含哪些内容
SSM(Spring + Spring MVC + Mybatis)
二、Spring
1、Spring在SSM框架中主要担任哪些角色
-
Spring:轻量级框架
-
作用:Bean工厂,用来管理Bean的生命周期和框架集成
2、Spring中的两大核心:
-
IOC/DI(控制翻转/依赖注入),Spring通过控制翻转实现了松耦合,将Dao依赖注入到service层中,service层反转给action层,Spring顶层容器为BeanFacory
-
AOP:面向切面编程,Spring支持面向切面的编程,并将系统服务和业务服务分隔开
AOP和IOC详细理解内容请看:https://www.jianshu.com/u/74c8535be0b7
3、Spring的事务
-
编程式事务管理:编程方式管理事务,极大灵活性,难维护
-
声明式事务管理:可以将业务代码和事务管理分离,用注解和XML文件配置来管理事务
4、IOC的作用
IOC解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度
5、Spring下的注解
-
注册:@Controller @Service @Component
-
注入:@Autowired @Resource
6、Spring DI的三种注入方式
-
构造器注入
-
setter方法注入
-
接口注入
7、Spring主要使用了什么模式
-
工厂模式:每个Bean的创建通过该方法
-
单例模式:默认的每个Bean的作用域都是单例
-
代理模式:关于AOP的实现原理
三、Spring MVC
1、Spring MVC是什么
Spring MVC是一个MVC的开源框架,Spring MVC = Struts2+spring,Spring MVC就相当于是Struts2加上spring的整合,但是这里有一疑惑是Spring MVC和Spring是什么样的关系呢。Spring MVC是Spring的一个后续产品,其实就是Spring在原有基础上,又提供了Web应用的MVC模块,可以简单的把Spring MVC理解为是Spring的一个模块(类似于AOP、IOC这样的模块)。
2、Spring MVC的工作原理图
3、Spring MVC流程
-
用户发送请求至前端控制器DispatcherServlet
-
DispatcherServlet收到调用HandllerMapping处理映射器
-
处理映射器收到具体的处理器(可以根据XML配置、注释进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返给DispatchServlet
-
DispatcherServlet调用HandlerAdapter处理器适配器
-
HandllerAdapter经过适当调用具体的处理器(Controller,也叫后端控制器)
-
Controller执行完成返回ModelAndView
-
HandllerAdapter将controlloer执行结果ModelAndView返回给DispatcherServlet
-
DispatcherServlet将ModelAndView传给ViewReslover视图解析器
-
ViewReslover解析后返回具体View
-
DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)
-
DispatcherServlet响应用户
4、组件说明
一下组件通常使用框架提供实现:
-
DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其他组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性
-
HandllerMapping:通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
-
HandlAdapter:通过扩展处理器适配器,支持更多类型的处理器
-
ViewResolver:通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、Excel等
5、各个组件的作用
-
前端控制器DispatcherServlet(不需要工程师开发,由框架提供)
作用:接收请求,响应结果,相当于转发器,中央处理器。可以降低与其他组件之间的耦合度
-
处理器映射器HandllerMapping(不需要工程师开发),由框架提供
作用:根据请求的URL查找Handller,HandllerMapping负责根据用户的请求找到Handller即处理器,Soring MVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等
-
处理适配器HandllerAdapter
作用:按照特定规则(HandllerAdapter要求的规则)去执行Handler,通过HandllerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多烈性的处理器进行执行。
-
处理器Handler(需要工程师开发)
注意:编写Handler时按照HandlerAdapter的要求去开发,这样适配器才可以去正确执行Handller,Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对据图的用户请求进行处理,由于Handller涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发Handler
-
视图解析器ViewResolver(不需要工程师开发),由框架提供
作用:进行视图解析,根据逻辑视图名解析成真正的视图(View),ViewResolver负责将处理结果生成View视图,ViewResovler首先根据逻辑实体名解析成物理实体名成物理视图名即具体的页面地址,在生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。Spring MVC框架提供了很多的View视图类型,包括jstView、pdfView
-
视图View(需要工程师开发)
View是一个接口,实现类支持不同的View类型(JSP、pdf)
6、MVC模式
MVC:MVC是一种设计模式
MVC的原理图:
-
M-Model 模型(完成业务逻辑:有JavaBean构成,service+dao+entity)
-
V-View 视图(做界面的展示:jsp、html)
-
C-Controller (接收请求——>调用模型——>根据结果派发页面(servlet))
7、Spring MVC的处理流程
-
用户发起请求到前端控制器(DispatcherServlet)
-
前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handle):通过XML配置或者注解进行查找
-
找到以后处理器映射器(HandlerMapping)像前端控制器返回执行链
-
前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去处理器(Handler)
-
处理器适配器去执行Handler
-
Handler执行完给处理适配器返回ModelAndView
-
处理器适配器向前端控制器返回ModelAndView
-
前端控制器请求视图解析器(ViewResolver)去执行视图解析
-
视图解析器像前端控制器返回View
-
前端控制器对视图进行渲染
-
前端控制器向用户响应结果
8、重要的组件
-
前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU。
-
处理器映射器(HandlerMapping):根据URL去查找处理器
-
处理器(Handler):(需要程序员去写代码处理逻辑的)
-
处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)
-
视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面
四、Mybatis
1、什么是Mybatis?
(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。
(2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
(3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。
2、Mybaits的优点:
(1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。
(2)与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;
(3)很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。
(4)能够与Spring很好的集成;
(5)提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
3、MyBatis框架的缺点:
(1)SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。
(2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
4、MyBatis框架适用场合:
(1)MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。
(2)对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。
5、MyBatis与Hibernate有哪些不同?
(1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。
(2)Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。
(3)Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。
6、#{}和${}的区别是什么?
#{}是预编译处理,${}是字符串替换。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
Mybatis在处理${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。