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

SSH和SSM定义:

ssh通常使用 Struts2为控制器(controller) ,spring 为事务层(service), hibernate 负责持久层(dao)
ssm通常使用 springMVC为控制器(controller) ,spring 为事务层(service), MyBatis 负责持久层(dao)

SSH和SSM区别对比:

Struts2和SpringMVC

相同:spring依赖注入(DI)来管理各层的组件,都是使用AOP切面编程 来管理事务,日志,权限等。

不同:1.Struts2 和 SpringMVC 控制视图和模型的交互机制不同

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

实现原理对比:

Struts2实现原理(如图):

ssh框架 demo_数据库

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

1.客户端初始化指向Service容器(Tomcat)的请求

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

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

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

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

6.ActionProxy创建一个ActionInvocation的实例

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

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

9.将处理结果返回

StrutsMVC实现原理(如图):

ssh框架 demo_MVC_02

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

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

2.DispatcherServlet接收到这个请求后将根据请求的信息(URL,http,请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)

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

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

6.Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherServlet通过ViewResolver将逻辑视图转为真正的视图view

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

Hibernate 和 MyBatis 两种ORM框架对比

相同:

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

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

不同:
1.MyBatis可以进行更为细致的SQL优化,可以减少查询字段
2.MyBatis容易掌握,而Hibernate门槛较高
3.Hibernate的Dao层开发比MyBatis简单,MyBatis需要维护SQL和结果映射
4.Hibernate对 对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便
5.Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同的SQL
6.Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳,更新操作不能指定刷新指定记录,会清空整个表,但是也可以使用第三方缓存
7.Hibernate 封装性好 屏蔽了数据库差异,自动生成SQL语句。应对数据库变化能力较弱,SQL语句优化困难
8.MyBatis仅实现了SQL语句和对象的映射,需要针对的数据库写SQL语句,应对数据库变化能力较强,SQL语句优化比较方便

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