第01课:Spring MVC+ Spring + Mybatis “三大框架”介绍

为什么要使用框架?

对于绝大部分 JavaWeb 开发者来说,开发的第一个项目应该都是以 JSP 或者 JSP+Servlet 形式完成的项目,之后陆陆续续、大大小小的项目应该也是以此为基础进行开发,当你看到你一个个完美的作品竣工完结之时,心满意足之余你可能会有这样一种疑惑,明明使用 JSP+Servlet 技术就可以完成的项目为什么要使用各种框架?

首先,这些项目只是学习过程中的练习项目,其次,这些项目是个人项目并不是企业应用,学习 JavaWeb 开发的目的是企业级应用的开发,闭门造车的思维模式不可取。一个中小型项目全部使用 JSP+Servlet 进行开发和维护,其成本就会很高,更不用说大型项目了,那简直就是一个灾难,开发成本、迭代成本、维护成本将会更高。真实的企业应用开发有几个比较重要的关注点分别是:代码复用、标准化、可维护性、开发成本,JSP+Servlet的封装和抽象程度与框架相比起来就毫无优势可言了。

  • 代码复用:框架的封装和抽象程度较高,企业开发中的很多功能都做了相应的实现,例如 JDBC、请求分发、对象管理、事务管理等底层代码,如果不使用框架而选择自己开发的话,代码量着实不小,框架的使用为开发人员减少了大部分的编码工作,提升开发效率。

  • 标准化:对于上述的功能,如果没有使用框架,每个企业应该肯定会有自己的封装。各企业封装的思路不同及业务场景的不同也会导致或大或小的差异性,这将给员工带来比较大的学习成本。从一家公司换到另外一家公司,需要重新学习使用公司内部的框架,这种做法往往会加大学习成本。而使用框架,上述的问题将不复存在,大部分公司都在用这套框架和这套框架下的开发模式,最终产生一个大家都接受的标准化流程,框架实际上也是一种规范,可以让每位开发人员保持类似的开发风格和开发方式。

  • 可维护性:代码复用程度高、开发流程的规范化和标准化带来的就是开发效率的提升;框架的引入也使得代码分层更加清晰,底层技术细节的封装,使得开发人员的关注点更加倾向于具体业务上;这些原因会使得企业应用拥有更优秀的可维护性。

其实,说得简单点,当优秀的框架逐渐成为趋势、成为标准之时,开发者的学习成本降低了,同时也减少了开发者的重复编码工作,简化开发,加快开发进度,降低维护难度。

“三大框架”

谈到框架之时,我相信你的脑海中会迅速出现一个词语——“三大框架”,每个 JavaWeb 学习者对该词肯定都印象深刻。开始接触 Java 开发框架时,这个词语也就随之深刻在脑海中,因为周围的开发者乃至自己都会时常提到它。

“三大框架”已成为大家接受的叫法,在进入公司后,随着开发经验的增长,“三大框架”被提到得越来越少了。伴随着可使用的优秀框架越来越多,已经不止是“三大框架”了。“三大框架”的每一种技术,虽然是独立的技术,用于企业级应用开发时又是紧密结合在一起,并不孤立,“三大框架”主要用来开发 Web 应用,分别负责 MVC 开发模式下的不同模块功能。

这个词语所代表的含义也不是固定的,我初学 JavaWeb 开发时,“三大框架”代表的是 SSH(即 Spring、Struts2、Hibernate),而在今天,“三大框架”已经逐渐过渡成为 SSM(即 Spring、SpringMVC、MyBatis),本课程选择的技术即为 Spring+SpringMVC+MyBatis。

状态火热的 SSM 技术栈

我们可以登录几大招聘网招,看看企业 JavaWeb 相关岗位的招聘文案,通过招聘信息中的要求得出以下结论:

SSM 这套技术栈是绝大部分公司明确要求掌握的技术,而 SSM 的组合搭配已经渐渐成为 JavaWeb 开发者必备的技能,虽然不是全部,但仍是目前的主要趋势,掌握 SSM 技能栈刻不容缓。

由此可以看出 SpringMVC+Spring+Mybatis 技术栈有着很高的受欢迎程度!那么,SpringMVC+Spring+Mybatis 到底有多么火热呢?我找出了一些数据给大家展示一下。

SSM搜索指数

此图来自于百度指数,我在2018年6月14日查询了 SSM 关键词的数据,从图中可知,自百度指数有数据统计以来,SpringMVC+Spring+Mybatis 的搜索指数一直很高,自2011年至2018年也一直呈现连年稳定增长的趋势,近四年的搜索指数也一直保持在一个极高的水平上。

十三也找了其他几组数据进行对比:

大数据搜索指数

docker搜索指数

以上两张图片同样来自于百度指数,分别为近几年比较火热的技术和话题:大数据、Docker 技术,这两个词语的火热程度应该不用我多说,唯有炙手可热来描述了。三张图片结合观察,同大数据和 Docker 相比起来,SSM 也丝毫不落下风!十分稳定的保持在一个极高的水准之上。

一直增长、搜索指数数值极高、且极其稳定,这些状态加在一起,如果要找一个合适的词语来形容的话,那就只能是恐怖了!一时风头无两的 SSM 技术栈! 我近两年也一直在做关于 Spring+SpringMVC+MyBatis 的技术文章分享,因此本达人课选择的主要技术栈仍为 Spring+SpringMVC+MyBatis,下面将分别对其进行介绍。

Spring

Spring 是一个轻量级的企业级应用开发框架,于2004年由 Rod Johnson 发布了1.0 版本,经过多年的更新迭代,已经逐渐成为 Java 开源世界的第一框架,Spring 框架号称 Java EE 应用的一站式解决方案,与各个优秀的 MVC 框架如 SpringMVC、Struts2、JSF 等可以无缝整合,与各个 ORM 框架如 Hibernate、MyBatis、JPA 等也可以无缝衔接,其他各种技术也因为 Spring 的存在而被很容易地整合进项目开发之中,如 Redis 整合、Log4J 整合、ElasticSearch 整合、RabbitMQ 整合、Quartz 整合、Thymeleaf 整合等等,只要你开发中需要使用到的技术,Spring 都提供了极好的封装和整合体验,这也是为何 Spring 生命力如此强大的原因,暂时还没有能够替代 Spring 的框架出现。

Spring 框架提供约20个模块,如下图:

spring-framework

Spring 框架并不强制应用完全依赖于 Spring,开发者可自由选择需要的模块。

总结起来,Spring 框架有如下优点:

  • Spring 的 IOC 容器将对象之间的依赖关系交由 Spring 控制,提高了组件之间的解耦,简化 Java 开发;
  • 面向切面编程,Spring AOP 是面向对象编程(OOP)的一种补充,通过这种方式将系统中的一些通用任务提取出来进行单独处理,比如事务处理、日志模块、权限控制、性能监控等,避免大量的代码重复,使得代码更加简洁,复用性更强,也帮助开发人员更加关注业务逻辑;
  • 非侵入式,代码的污染极低;
  • 无与伦比的兼容性,与其他优秀的第三方框架无缝整合;
  • Spring 框架的源码是无与伦比的 Java 代码盛宴;
  • 高度的开放性;
  • 开源社区十分活跃,文档齐全,学习成本不高。

SpringMVC

SpringMVC 是 Spring 框架体系中的全功能 MVC 模块,在前面 Spring 结构图中可以看到这一关系,其中的 Web MVC 即 SpringMVC。SpringMVC 是基于 Java 语言实现 MVC 设计模式的请求驱动类型的轻量级 Web 框架,目的是将 Web 开发模块化及代码简化。其提供了 DispatcherServlet 前端控制器分派请求,同时提供灵活的配置处理程序映射、视图解析,并支持文件上传,目前已经是众多 MVC 框架中的佼佼者。

下图为 SpringMVC 框架的工作流程图及注释:

SpringMVC-workflow

SpringMVC 框架的优点如下:

  • Spring 和 SpringMVC 无需复杂的操作即可整合,天生契合,灵活度高,非侵入性;
  • 配置简单,学习成本低;
  • 设计合理,各模块分工明确,功能强大;
  • 非常容易与第三方视图技术集成整合;
  • 能够进行 Web 层的单元测试;
  • 支持灵活的 URL 到页面控制器的映射;
  • 灵活且强大的数据验证、格式化和数据绑定机制;
  • 开源社区十分活跃,文档齐全。

MyBatis

MyBatis 的前身是 Apache 社区的一个开源项目 iBatis,于2010年更名为 MyBatis。MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,使得开发人员更加关注 SQL 本身和业务逻辑,不用再去花费时间关注整个复杂的 JDBC 操作过程。

以下为 MyBatis 的结构图:

mybatis-framework

MyBatis 的优点如下:

  • 封装了 JDBC 大部分操作,减少开发人员工作量;
  • 相比一些自动化的 ORM 框架,“半自动化”使得开发人员可以自由的编写 SQL 语句,灵活度更高;
  • Java 代码与 SQL 语句分离,降低维护难度;
  • 自动映射结果集,减少重复的编码工作;
  • 开源社区十分活跃,文档齐全,学习成本不高。

总结

由于篇幅有限,本文只简单介绍了 SSM 技术栈。本达人课的侧重点在实战开发上,因此,后续文章将专注于实战教程部分。本达课保证文章的篇幅充足、过程详细,让你不虚此行,一定会有收获。

另外,与 SSH 技术栈的比较不在本文的讨论范围内,我认为这种框架之间的对比对于学习者来说也只是看个热闹,只有真正的使用过才能懂得其中的区别。同时,我也认为技术之间没有高低优劣之分,只有适不适合自己,因此就不再花费篇幅去做对比了,有兴趣的朋友可以去实际体验一下再做对比,切不可眼高手低。

微信扫描登录