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风格。
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.将处理结果返回
Hibernate 与MyBatis:
1)Hibernate与Mybatis都是流行的持久层开发框架,一句话概括:MyBatis 简单易上手
2)hibernate成熟,市场推广率高。
3)MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
4)MyBatis容易掌握,而Hibernate门槛较高。
5)更重要的是,mybatis提供了对应各种用途、功能的插件,而hibernate在这一方面是远远比不上mybatis的。
6)Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
7)Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
8)Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
9)Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
10)但是hibernat缺点很明确,如果涉及到多张关联表的调用时:
- 多表关联等比较复杂,使用的成本并不低;
- 效率比较低,在大型项目中很少会使用到它,因为sql都是自动生成的,不太好进行人工的优化