SSM 框架由 SpringMVC、 Spring 和 Mybatis 三大开源框架整合而成,所以了解该框架需先从这三个框架着手。
Spring
Spring 是整个框架的核心,是分层、一站式、轻量级的框架
Spring 是 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 创建。它解决了业务逻辑层和其他各层的松耦合问题,并将面向接口的编程思想贯穿整个系统应用。JavaEE 经典的 MVC 三层结构为表现层、业务层、持久层。
分层
- Web表现层:负责页面数据显示、页面跳转调度,例如 JSP/Servlet、SpringMVC;
- Service业务层:负责业务处理、功能逻辑和事务控制,例如 Service、JavaBean、EJB;
- 持久层Dao:负责数据存取和封装,及与数据库打交道,例如 JDBC、Hibernate、Mybatis。
一站式
Spring 为 JavaEE 的每一层都提供了解决方案:
- 表现层:Struts1、Struts2、Spring MVC;
- 业务层:IoC 控制反转、AOP 面向切面编程、事务控制;
- 持久层:JdbcTemplate、HibernateTemplate、ORM 框架(对象关系映射)的整合。
轻量级
至于轻量,则是指从大小与开销两方面而言,Spring都是轻量的。完整的 Spring 框架可以在一个大小只有 1MB 多的 Jar 文件里发布。并且 Spring 所需的处理开销也是微不足道的。Spring 的出现解决了 EJB 臃肿、低效、繁琐复杂、脱离现实的情况。而且使用 Spring 编程是非侵入式的。Spring 应用中的对象不依赖于 Spring 的特定类。
Spring 的体系结构
Spring 框架是一个分层架构,它包含一系列的功能要素,被分为大约20个模块。这些模块分为 Core Container、Data Access/Integration、Web、AOP、Aspects、Instrumentation 和 Test,如下图所示:
SpringMVC
Spring 为 Web 表现层提供了一个优秀的框架 SpringMVC。和其他 Web 框架一样,也是基于 MVC 的设计理念,此外,它采用了松耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
SpringMVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,无需任何接口,同时,SpringMVC 还支持 REST 风格的 URL 请求。此外,SpringMVC 在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。
SpringMVC 框架围绕 DispatcherServlet这个核心展开,DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,负责职责的分派,而且与 Spring IoC 容器无缝集成,从而可以获得 Spring 的所有好处。
SpringMVC 框架流程
其框架流程,如下图所示:
接下来,我们对每一个子流程做下说明。
- 用户发送请求,被 SpringMVC 的前端控制器 DispatcherServlet 拦截。
- DispatcherServlet 收到请求后调用 HandlerMapping 处理器映射器。
- 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
- DispatcherServlet 调用 HandlerAdapter 处理器适配器。
- HandlerAdapter 经过适配器调用具体的处理器(Controller,也叫后端控制器)。
- Controller 将结果封装到 ModelAndView 返回给 HandlerAdapter。
- HandlerAdapter 将 Controller 执行结果 ModelAndView 返回给 DispatcherServlet。
- DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。
- ViewReslover 解析后返回具体的 View。
- DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。
- DispatcherServlet 响应用户。
Mybatis
Mybatis 的前身是 iBatis,Apache 的一个开源项目,在2010年这个项目从 Apache 迁移到 Google Code 改名为 Mybatis。Mybatis 是一个类似于 Hibernate 的 ORM 持久化框架,支持普通 SQL 查询、存储过程以及高级映射。Mybatis 通过使用简单的 XML 或注解用于配置和原始映射,将接口和 POJO 对象映射成数据库中的记录。由于 Mybatis 是直接基于 JDBC 做了简单的映射包装,所以从性能角度来看
JDBC > Mybatis > Hibernate
Mybatis 特点
主要有以下5大特点:
- 支持自定义 SQL、存储过程、高级映射;
- 实现自动对 SQL 的参数设置;
- 实现自动对结果集进行解析和封装;
- 通过 XML 或者注解进行配置和映射,大大减少代码量;
- 数据源的连接信息通过配置文件进行配置。
Mybatis 整体架构
整体架构如下图所示:
接下来,对架构的主要部分做下说明:
- 配置文件:全局配置文件 mybatis-config.xml,其作用为配置数据源,引入映射文件 Mapper.xml,映射文章的作用是配置 SQL 语句、参数、结果集封装类型等。
- SqlSessionFactory:相当于 Hibernate 的 SessionFactory,作用为获取 SqlSession,通过 newSqlSessionFactoryBuilder().build(inputStream) 来构建,inputStream用来读取配置文件的 IO 流。
- SqlSession:相当于 Hibernate 的 Session,作用为执行 CRUD 操作。
- Executor:执行器,SqlSession 通过调用它来完成具体的 CRUD,它是一个接口,提供了两种实现,即缓存的实现、数据库的实现。
- Mapped Statement:在映射文件里面配置,包含3部分内容:具体的 SQL,SQL执行所需的参数类型,SQL 执行结果的封装类型,参数类型和结果集封装类型包括3种,即 HashMap,基本数据类型,POJO。
以上内容摘自图文课预览^ ~ ^…