最近了解到SSH框架的使用的企业越来越少了,SSM框架更受青睐,我就了解了一下两种框架体系的区别。反正都要学,现在我已经学过了SSH框架,接下来就是学SSM框架了。

声明:下边的内容是我转载 学习的。

目录

SSH和SSM定义

SSH 和 SSM 的实现原理

Hibernate 和 MyBatis 两种ORM框架对比

总结


当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力。MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。框架之所以流行,在于其易复用和简化开发,精髓在思想,掌握了核心思想,我们掌握其他类似框架也不会有问题,建议大家有精力的话读一下框架源码,尤其是spring。

SSH和SSM定义

SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。

SSM 则指的是 SpringMVC 做控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。

共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日志、权限等。

不同点:1.Struts2 和 SpringMVC 控制器(controller)控制视图和模型的交互机制的不同,

Struts2是Action类级别,SpringMVC是方法级别,更容易实现RESTful风格。

SSH 和 SSM 的实现原理

1.Struts2 的实现原理

Struts2框架执行步骤(Struts2使用Filter嵌入):

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助

3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

9、将处理结果返回给客户端

2.SpringMVC 的实现原理

SpringMVC框架执行步骤(SpringMVC使用Servlet嵌入):

1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。

5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。

6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。

7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

Hibernate 和 MyBatis 两种ORM框架对比

两者的相同点

Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。

Hibernate和MyBatis都支持JDBC和JTA事务处理。

两者各自优势

MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

MyBatis容易掌握,而Hibernate门槛较高。

Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳,更新操作不能指定刷新指定记录,会清空整个表,但是也可以使用第三方缓存。

Hibernate 封装性好,屏蔽了数据库差异,自动生成SQL语句,应对数据库变化能力较弱,SQL语句优化困难。

MyBatis仅实现了SQL语句和对象的映射,需要针对具体的数据库写SQL语句,应对数据库变化能力较强,SQL语句优化较为方便。

总结

SSM和SSH不同主要在MVC实现方式,以及ORM持久化方面不同(Hiibernate与Mybatis)。SSM越来越轻量级配置,将注解开发发挥到极致,且ORM实现更加灵活,SQL优化更简便;而SSH较注重配置开发,其中的Hiibernate对JDBC的完整封装更面向对象,对增删改查的数据维护更自动化,但SQL优化方面较弱,且入门门槛稍高。

附Spring家族:

SSM框架和SSH框架的详细对比相关推荐

  1. SSM框架与SSH框架

    SSM框架与SSH框架 MVC,即模型(model)-视图(View)-控制器(Controller)的缩写,一种软件的设计典范,用一种业务逻辑,数据,界面显示分离的方法组织代码,将业务逻辑聚集到一个 ...

  2. 《SSH框架》---SSH框架与框架

       我们首先网上商城使用的是ssh框架,百度得到:SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架.    集成SSH框架的系统从职 ...

  3. java框架之ssh框架之认识

    SSH框架 1.SSH框架是什么? SSH框架是struts+spring+hibernate的一个集成框架,分为四层:表示层.业务逻辑层.数据持久层和域模块层,其中使用Struts作为系统的整体基础 ...

  4. java解决框架注入,SSH框架 使用Spring时 IOC无法注入解决办法

    SSH框架 使用Spring时 IOC无法注入 本人初学JavaWeb 现在在自己做一个SSH的练习 今天遇到一个 Spring无法注入的问题, 用了一个下午的时间也没找到毛病具体发生在哪儿 求经验丰 ...

  5. SSH框架整合——基于注解

    SSH框架整合--基于注解 @(Spring)[Spring, hibernate, struts2, 框架整合] SSH框架整合基于注解 SSH框架整合 第一步导入Jar包 第二步导入配置文件 第三 ...

  6. SSH框架整合——基于XML配置文件

    SSH框架整合--基于XML配置文件 @(Spring)[spring, struts2, hibernate, 框架整合, ssh, Spring] SSH框架整合基于XML配置文件 SSH框架整合 ...

  7. SSM和SSH框架对比

    SSM和SSH框架对比 1. SSH:Spring+Struts2+Hibernate SSM:Spring+SpringMVC+MyBaitis 两个框架都是IoC容器+MVC框架+ORM框架.Io ...

  8. 简述SSH框架和SSM框架的区别

    简述SSH框架和SSM框架的区别 SSH框架是Struts+Spring+Hibernate的简称,而SSM是指的SpringMVC+Spring+MyBatis的简称.光从这两个缩写就可以看出来,如 ...

  9. [转载]SSH框架搭建详细图文教程

    什么是SSH? SSH对应 struts spring hibernatestruts 采用MVC模式,主要是作用于用户交互spring 采用IOC和AOP~作用比较抽象,是用于项目的松耦合hiber ...

最新文章

  1. CF570D Tree Requests
  2. 谈谈Javascript闭包
  3. c mysql 关闭连接池_数据库连接池关闭的时间
  4. D3D中的粒子系统(4)
  5. JPA 2.1类型转换器–保留枚举的更好方法
  6. jquer each 遍历的结果不显示 null_SpringBoot系列(三十一)- Thymeleaf如何用th:each 做条件遍历
  7. NodeJS无所不能:细数10个令人惊讶的NodeJS开源项目
  8. mysql 60万_MySQL5.7中60万数据的表分组统计很慢
  9. java单例默认_Spring bean为什么默认是单例
  10. 南昌大学c语言大作业,南昌大学计算机C语言答案2
  11. APP自动化测试-Appium日志分析
  12. (3)《Head First HTML与CSS》学习笔记---CSS入门
  13. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_13-webpack研究-webpack入门程序...
  14. PHP中的数组(排序)
  15. C语言项目实战—坦克大战
  16. android-sdk-windows 如何安装,android-sdk-windows 安装.doc
  17. 计算机取小数点后的小数 公式,excel表格公式计算后取小数点后的位数 | excle小数个数...
  18. FFmpeg源码分析:av_seek_frame()与avformat_seek_file()
  19. 网络 | 1.OSI七层模型各层常见协议
  20. 微信小程序做留言板是不是需要服务器,微信小程序怎么做个简单留言板?

热门文章

  1. word段落居中的快捷键_word里段落的快捷键 WORD中段落的快捷键是什么
  2. 云计算技术前景怎么样?云计算开发学院分享
  3. Freemarker讲解
  4. libs--libnet
  5. vs2017开发ActiveX(主讲OCX)(八)、添加常用方法
  6. html 图片 空白,HTML图片标签空白解决方法
  7. 深克隆与浅克隆的区别
  8. 粒子系统(二):绘制精美几何图案
  9. Python Turtle绘制炫酷漂亮图案(turtledemo模块实例)
  10. 梅森数形如2n−1的素数称为梅森数(Mersenne Number)