zoukankan      html  css  js  c++  java
  • ssm和ssh区别及对比

    1.什么是ssh?

    SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架。

    2.什么是ssm?

    SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。

    1.Spring简介

    Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

    A.控制反转(IOC)是什么呢?

    IOC:控制反转也叫依赖注入。利用了工厂模式将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean了。
    [注意]:面试的时候,如果有条件,画图,这样更加显得你懂了

    B.面向切面(AOP)又是什么呢?

    首先,需要说明的一点,AOP只是Spring的特性,它就像OOP一样是一种编程思想,并不是某一种技术,AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。

    实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

    [简单点解释],比方说你想在你的biz层所有类中都加上一个打印‘你好,AOP’的功能这你经可以用aop思想来做,你先写个类写个方法,方法经实现打印‘你好,AOP’让后你Ioc这个类 ref=“biz.*”让每个类都注入。

    2.Spring MVC简介

    Spring MVC属于Spring Framework的后续产品,已经融合在Spring Web Flow里面,它原生支持的Spring特性,让开发变得非常简单规范。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

    3.MyBatis简介

    MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。可以这么理解,MyBatis是一个用来帮你管理数据增删改查的框架。

    3.hibernate和mybatis区别

      Hibernate 框架 
            Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据库表的映射。是一个全自动的、完全面向对象的持久层框架。
        1.2    Mybatis框架
            Mybatis是一个开源对象关系映射框架,原名:ibatis,2010年由谷歌接管以后更名。是一个半自动化的持久层框架。

    MyBatis因为具有封装少,映射多样化,支持存储过程,可以进行SQL优化等特点。使得它取代了Hibernate成为了java互联网中首选的持久框架。

    无论MyBatis或Hibernate都可以称为ORM框架,Hibernate的设计理念是完全面向POJO的,而MyBatis不是。
    Hibernate基本不再需要编写SQL就可以通过映射关系来操作数据库,是一种全表映射的体现,而MyBatis需要我们提供SQL去运行。程序员不用精通SQL,只要懂得操作POJO就能够操作对应数据库的表。

    在管理系统时代,首先是实现业务逻辑,然后才是性能,所以Hibernate在当时是主流。

    在移动互联网时代,MyBatis是首选,不屏蔽SQL,程序员可以自己制定SQL规则,能更加精确定义SQL,从而优化性能。更符合移动互联网高并发,大数据,高性能,高响应的要求。

    Hiberate和MyBatis的增、删、查、改.对于业务逻辑层来说大同小异,对于映射层而言Hibemate的配置不需要接口和SQL.相反MyBatis是需要的。对于Hibermate而言,不需要编写大量的SQL,就可以完全映射,同时提供了日志、缓存、级联(级联比MyBatis强大)等特性,此外还提供HQL (Hibemate Query Language)对POIO进行操作,使用十分方便,但是它也有致命的缺陷。

    由于无须SQL,当多表关联超过3个的时候,通过Hibermate的级联会造成太多性能的丢失,又或者我现在访问一个财 务的表,然后它会关联财产信息表,财产又分为机械、原料等.显然机械和原料的字段是不一样的,这样关联字段只能根据特定的条件 变化而变化,而Hibermate无法支持这样的变化。遇到存储过程,Hibemate只能作罢。更为关键的是性能,在管理系统的时代,对于性能的要求不是那么苛刻,但是在互联网时代性能就是系统的根本,响应过慢就会丧失客户,试想一下谁会去用一个经常需要等待超过10 秒以上的应用呢?

    以上的问题MyBatis都可以解决,MyBatis 可以自由书写SQL、支持动态SQL、处理列表、动态生成表名,支持存储过程。这样就可以灵活地定义查询语句,满足各类需求和性能优化的需要,这些在互联网系统中是十分重要的。

    但MyBatis也有缺陷。首先,它要编写SQL和映射规则,其工作量稍微大于 Hibemate.其次,它支持的工具也很有限,不能像Hibemate那样有许多的插件可以帮助生成映射代码和关联关系,而即使使用生成工具,往往也需要开发者进一步简化, MyBatis 通过手工编码,工作量相对大些。所以对于性能要求不太苛刻的系统,比如管理系统、ERP 等推荐使用Hibemate;而对于性能要求高、响应快、灵活的系统则推荐使用MyBatis.

    两者区别

        2.1 开发方面
            在项目开发过程当中,就速度而言:
                hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发;
                Mybatis 属于半自动化,sql需要手工完成,稍微繁琐;
            但是,凡事都不是绝对的,如果对于庞大复杂的系统项目来说,发杂语句较多,选择hibernate 就不是一个好方案。
        2.2 sql优化方面
            Hibernate 自动生成sql,有些语句较为繁琐,会多消耗一些性能;
            Mybatis 手动编写sql,可以避免不需要的查询,提高系统性能;
        2.3 对象管理比对
            Hibernate 是完整的对象-关系映射的框架,开发工程中,无需过多关注底层实现,只要去管理对象即可;
            Mybatis 需要自行管理 映射关系;
        2.4 缓存方面    

    相同点:

    Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓    存方案,创建适配器来完全覆盖缓存行为。

    不同点:

    Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。

    MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。


    比较:

              Hibernate 具有良好的管理机制,用户不需要关注SQL,如果二级缓存出现脏数据,系统会保存,;
               Mybatis 在使用的时候要谨慎,避免缓存CAche 的使用。

    Hibernate优势

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

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

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

    4. Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

    Mybatis优势

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

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

    一句话总结

    Mybatis:小巧、方便、高效、简单、直接、半自动化

    Hibernate:强大、方便、高效、复杂、间接、全自动化

  • 相关阅读:
    Python全栈开发之6、面向对象
    Python全栈开发之5、模块
    kvm恢复和删除快照
    virsh命令和虚拟机克隆
    Python全栈开发之4、迭代器、生成器、装饰器
    索引
    字段属性--唯一键
    安装虚拟机
    字段属性--自增长
    centos7安装kvm
  • 原文地址:https://www.cnblogs.com/huanglp/p/11385507.html
Copyright © 2011-2022 走看看