前言:简单的来说,我们可以将Spring Boot看做一个启动、配置、快速开发的辅助框架,其本身针对的则是微服务。Spring Boot只是为了提高我们的开发效率,是为了提升生产力,但是在一个web项目的开发当中,MVC的开发模式还是必不可少的。


目录

一、Spring

二、Spring MVC

三、Mybatis

四、总结


SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

一、Spring

Spring 是一个分层的 JavaSE/EE Full-Stack(一站式) 轻量级开源框架。经典的 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框架可以在很小的Jar包里进行发布,其所需要的处理开销也是很小的,spring的出现解决了EJB 的繁琐复杂、脱离现实的缺点。

Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。框架本身是按照设计模式构建,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。

1、Spring的结构体系

Spring框架至今已集成了20多个模块。这些模块主要包括核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。

核心容器(Core Container)包括 Core、Beans、Context、EL 模块。

  • Core 和 Beans 模块提供了 Spring 最基础的功能,Core 模块是核心,为其他模块提供支持,包括 Spring 的核心工具类。Beans 是 Spring 管理实体类 Bean 的主要模块,提供 IoC 控制反转和依赖注入 DI。控制反转即将控制权由原来的程序员自己管理交给 Spring 来管理,依赖注入就是注入对象实例,有四种方式,即接口注入、setter 方法注入、构造器注入和注解注入。

  • Context 上下文模块,主要基于 Core 和 Beans 模块,Context 模块的 Context 包继承了 Beans 包的功能,还增加了国际化(I18N)、事件传播等,Context 上下文模块,还包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

  • Expression Language,表达式语言模块,又称 SpEL,提供了在运行期间查询和操作对象图的强大能力。包含五个主要特性:(1)使用 Bean 的 ID 引用 Bean;(2)调用方法和访问对象的属性;(3)对值进行算术,关系和逻辑运算;(4)正则表达式匹配;(5)集合操作。

2、Spring 的三大核心

Spring 的三大核心分别为 IOC(Inverse of Control 控制反转)、DI(Dependency Injection,依赖注入)和AOP(Aspect Oriented Programming 面向切面编程)。

1、IOC(Innverse Of Controller控制反转)

//IOC,即将创建对象的权利交给Spring工厂管理
Content content  = new Content();
//现在可以这样去写
Content content = ContentFactory.getContent();

2、DI(Dependency Injection,依赖注入)

DI 是指在 Spring 框架创建 Bean 对象时,动态地将依赖对象注入到 Bean 组件。简单的说,就是将一个 Bean 对象动态地注入到另一个 Bean 中。DI 的做法是:由 Spring 容器创建 Service、Dao 对象,并且通过注解或配置将 Dao 传入 Servcie,那么 Service 对象就包含了 Dao 对象的引用。比如:

@Service
public class UserServiceImpl implements UserService {@Autowired //通过注解注入UserMapper对象private UserMapper userMapper;}

3、AOP(Aspect Oriented Programming 面向切面编程)

AOP 采取横向抽取机制,取代了传统纵向继承体系重复性代码的编写方式(例如性能监视、事务管理、安全检查、缓存、日志记录等)。AOP 基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强。例如可以在插入 User 对象之前进行打印日志,请看下面的代码示例。

//UserService.java
public interface UserService {void add(User user);
}
//前置增强类 PrintLogBefore.java
//前置增强代码
public class PrintLogBefore implements MethodBeforeAdvice {private static final Logger log = Logger.getLogger(PrintLogBefore.class);@Overridepublic void before(Method method, Object[] arguments, Object target)throws Throwable {log.info("在插入User之前执行的方法");}}
//最后配置切入点
<bean id="printBefore" class="dreamland.aop.test.PrintLogBefore"></bean>
<aop:config><aop:pointcut expression="execution(public void save(dreamland.aop.entity.User))" id="pointcut"/>         <aop:advisor advice-ref="printBefore" pointcut-ref="pointcut"/>
</aop:config>

二、Spring MVC

Spring MVC属于SpringFrameWork的后续产品,Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架(struts2)。Spring框架是高度可配置的,而且包含多种视图技术,例如jsp等。Spring MVC分离了控制器、模型对象、过滤器以及处理程序对象的角色,这样的分离使得我们更加容易的去定制。

SpringMVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,无需任何接口,同时,SpringMVC 还支持 REST 风格的 URL 请求。此外,SpringMVC 在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。它在框架设计、扩展性、灵活性等方面全面超越了 Struts、WebWork 等 MVC 框架,从原来的追赶者一跃成为 MVC 的领跑者。

SpringMVC 框架围绕 DispatcherServlet 这个核心展开,DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,负责职责的分派,而且与 Spring IoC 容器无缝集成,从而可以获得 Spring 的所有好处。

1、Spring MVC核心组件

  • DispatcherServlet:前端控制器,负责调度其他组件的执行,可降低不同组件之间的耦合性,Spring MVC 的核心模块。
  • Handler:处理器,完成具体的业务逻辑。
  • HandlerMapping:DispatcherServlet 是通过 HandlerMapping 将请求映射到不同的 Handler。
  • HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。
  • HandlerExecutionChain:处理器执行链,包括两部分内容,Handler 和 HandlerInterceptor。
  • HandlerAdapter:处理器适配器,它可以完成执行业务逻辑之前的一些预处理,数据类型转换、封装等。 DispatcherServlet通过 HandlerAdapter 调⽤不同的 Handler。
  • ModelAndView:装载了模型数据和视图信息,作为 Hanlder 的处理结果,返回给DispatcherServlet。
  • ViewResolver:视图解析器,DispatcherServlet 通过它将逻辑视图转换成物理视图,最终将渲染结果响应给客户端

2、Spring MVC 框架流程

  1. 客户端请求被 DispatcherServlet 接收。
  2. 根据 HandlerMapping 映射到 Handler。
  3. 创建 Handler 和 HandlerInterceptor。
  4. Handler 和 HandlerInterceptor 以 HandlerExecutionChain 的形式一并返回给DispatcherServlet。
  5. DispatcherServlet 通过 HandlerAdapter 调用 Handler 的方法完成业务逻辑处理。
  6. 返回一个 ModelAndView 对象给 DispatcherServlet。
  7. DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver ,将逻辑视图解析为物理理视图View。
  8. ViewResolver 返回⼀一个 View 给 DispatcherServlet。
  9. DispatcherServlet 根据 View 进⾏行视图渲染(将模型数据填充到视图中)。
  10. DispatcherServlet 将渲染后的视图响应给客户端。

三、Mybatis

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

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。

用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。

MyBatis有以下的特点:

  • 支持自定义 SQL、存储过程、高级映射;
  • 实现自动对 SQL 的参数设置;
  • 实现自动对结果集进行解析和封装;
  • 通过 XML 或者注解进行配置和映射,大大减少代码量;
  • 数据源的连接信息通过配置文件进行配置

1、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。

四、总结

就目前来看,很多的公司依然使用SSH的框架来做一些项目,业务逻辑复杂但他们不在乎执行的效率。但我觉得SSM是优于SSH的,SSM和SSH框架的区别就在于SpringMVC和Struts2、MyBatis与Hibernate的比较。

1、SpringMVC 和 Struts2 比较

  • 机制:SpringMVC 的入口是 Servlet,Struts2 的入口是 Filter, 两者的实现机制不同;
  • 性能:SpringMVC 稍微比 Struts 快些。SpringMVC 是基于方法的设计,而 Struts2 是基于类,每发一次请求都会实例化一个 action,每个 action 都会被注入属性,而 SpringMVC 基于方法,粒度更细。
  • 参数传递:Struts2 在接受参数时,可以用属性来接受参数,这就说明参数可被多个方法共享。SpringMVC 是基于方法的设计,传递参数是通过方法形参。多个方法间不能共享。
  • 设计思想上:Struts2 更加符合 OOP 的编程思想,SpringMVC 就比较谨慎,在 Servlet 上扩展

2、Mybatis 和 Hibernate 比较

  • 难易程度:Hibernate 的真正掌握要比 Mybatis 难些。Mybatis 框架相对简单容易上手。
  • 对象管理:Hibernate 是完整的对象/关系映射解决方案,它提供了对象状态管理的功能,使开发者不需要关心底层数据库系统的细节。而 Mybatis 在这一块没有文档说明,用户需要自己对对象进行详细的管理。
  • 优势对比:Mybatis 可以进行更为细致的 SQL 优化,可以减少查询字段。Hibernate 数据库移植性很好,Mybatis 的数据库移植性不好,不同的数据库需要些不同的 SQL。

为什么要使用SSM框架进行项目开发相关推荐

  1. 基于SSM框架图书管理系统开发与设计(附源码资料)-毕业设计

    文章目录 1. 适用人群 2. 你将收获 3.项目简介 4.技术实现 5.系统功能 5.1.管理员身份登录 5.1.1.登录 5.1.2.管理员登录首页 5.1.3.借阅管理 5.1.4.图书管理 5 ...

  2. SSM 框架 Maven项目整合实例

    2019独角兽企业重金招聘Python工程师标准>>> SSM 框架 Maven项目整合实例1: 转载学习:https://blog.csdn.net/Peng_Hong_fu/ar ...

  3. 基于SSM框架简易项目“书籍管理系统”,超详细讲解,附源码

    目录 我有话说: 1 项目简介 2 项目展示 2.1 首先创建数据库和表信息 2.2 预先准备操作 2.3 开始配置项目 2.4 开始web层 3 图片展示 4 附上源码文件(百度网盘): 我有话说: ...

  4. SSM购物商城项目开发

    开发环境 : 当前用myeclipse (idea) jdk7 tomcat 8,.5 创建项目 new -- web project --- 记得把web.xml勾上 SSM框架整合配置 添加依赖 ...

  5. 云借阅图书管理系统[基于SSM框架的项目]

    前言 SSM框架本学期也是刚进行完答辩,在云借阅图书管理系统的基础功能上新增了一些功能用来作为SSM框架的大作业进行的答辩.也是对MyBatis框架.Spring框架.Spring MVC框架的注解开 ...

  6. 熟悉使用ssm框架完成项目

    羡慕那些一些博客就能写好多的人,总是能写的长篇大论的,而我就是简短的而且还伴随着语句不通顺等等,只写一点点,归根结底还是自己懒得写! 1.首先了解框架内容,拿到源码,先看配置文件 2.然后修改数据库建 ...

  7. 【总结】4S汽车维修管理系统ssm框架vuejs项目

    本系统包括: 汽车维修工单管理.结算工单管理.还车管理.基础数据.权限管理 和 统计报表 六个功能模块.另包括权限管理模块用于系统的用户.角色和相关权限. 术语定义 系统用户: XXX4S店员工. 客 ...

  8. 【SSM框架最新项目】搭建个人博客实例讲解

    项目介绍 本项目为个人博客项目,旨在对SSM的综合应用,提高大家对这三个框架的的基本使用能力,项目分为前台和后台,博客基本的功能齐全. 技术架构 Spring+SpringMVC+Mybatis+My ...

  9. kylinH5框架之项目开发调试

    进行开发调试,需要完成以下步骤: 安装依赖 开发调试 构建生产 点击 代码示例,获取 Kylin Demo,并完成以下操作. 安装依赖 进入项目根目录,使用 cnpm 安装 npm 依赖: # 安装n ...

  10. php mvc自定义框架视频教程,基于PHP面向对象的自定义MVC框架高级项目开发视频教程...

    ├ │  ├01-温故而知新.wmv │  ├02-验证码技术介绍.wmv │  ├03-GD处理图像的基本步骤.wmv │  ├04-画布操作基本步骤-补充.wmv │  ├05-仿制ecshop验 ...

最新文章

  1. JackJson 使用记录
  2. 凯文·凯利:未来很美好,今天仍是Day1
  3. matlab中libsvm 3.11,libsvm-3.11(matlab)
  4. RFID系统集成公司
  5. 求有环单链表的环连接点位置
  6. CodeForces - 620E New Year Tree(线段树+dfs序+状态压缩)
  7. 掌握神经网络模型的快捷方式
  8. 创建优秀团队文化的四大要点
  9. java打印条形码Code128C
  10. Centos添加ip黑名单禁止某个ip访问,对登陆失败的主机进行封禁
  11. 极简代码 —— list 最小最大索引(argmax/argmin)的实现
  12. 链路负载需求及基本原理
  13. COMSOL有限元仿真深度指南:构建与管理自定义材料库
  14. IEEE 中 LaTeX在作者后面加上ORCID标志和链接
  15. CNN入门讲解:准确率很高就感觉自己萌萌哒?NONONO,还有一点也重要
  16. InsecureProgramming-master——abo4
  17. 前端基础学习-element-ui表格表头做成斜线表头
  18. 船舶爬虫出现过的问题
  19. zdog+anime跳舞的小星星动画js特效
  20. 两层循环终止内层或外层循环的方法(break和continue的用法)

热门文章

  1. 【ENOVIA】MBOM经理概述 | 达索系统百世慧®
  2. vba 涉及合并取消合并单元格
  3. 家庭wifi部署建议
  4. 形式化验证工具——prism(1-安装)
  5. php 获取搜索引擎,PHP获取搜索引擎关键词
  6. SEO搜索引擎优化是什么
  7. 医学图像预处理之CT成像原理
  8. 联想Thinkpad E450C关闭触摸板方法
  9. 高效学习工作方法PDCA让你变成心中有梦眼里有光的幸运儿
  10. 【托业】【新托业TOEIC新题型真题】学习笔记5-题库二-P7