SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。
SSM 则指的是 SpringMVC 做控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。
一、Controller层面
共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日志、权限等。
不同点:
(1)Strust
struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入
struts2实际上是通过setter getter方法与request打交道的
struts2中,一个Action对象对应一个request上下文
缺点:其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
(2)SpringMVC
springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应
二、持久层
(1)hibernate
1、Hibernate与具体数据库的关联只需在XML文件中配置即可,所有的HQL语句与具体使用的数据库无关,移植性很好
2、hibernate二级缓存:
使用场景:数据不会被第三方修改,数据大小在可接收范围之内,数据更新频率低,有点类似volatile关键字
3、Hibernate的查询会将表中的所有字段查询出来
(2)MyBatis
1、MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好
2、MyBatis可以进行更为细致的SQL优化,可以减少查询字段
总结:
1、hibernate数据库移植性好,有懒加载,查询映射到你OO模型的查询语言
2、针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap