zoukankan      html  css  js  c++  java
  • Mybatis

    Mybatis和Hibernate框架的区别

     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:强大、方便、高效、复杂、间接、全自动化

    Struts2框架和SpringMvc框架的区别

    一、拦截机制的不同

      Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter,getter吧request数据注入到属性。Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了,只能设计为多例。

      SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。

      Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。

    二、底层框架的不同

      Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。

    三、性能方面

      Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2。

    四、配置方面

      spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高。

    附注:拦截器与过滤器的区别 :

    1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
    2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
    3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
    4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
    5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

     

     

     

     

     

    getMapper的使用

      解析:getMapper()接口 IDept.class定义一个接口,

         挂载一个没有实现的方法,特殊之处,借楼任何方法,必须和小配置中id属性是一致的

         通过代理:生成接口的实现类名称,在MyBatis底层维护名称$$Dept_abc,selectDeptByNo()

         相当于是一个强类型

  • 相关阅读:
    单例模式的三种写法
    ASP.NET如何下载大文件
    字符串是引用类型
    SQL 事务隔离级别
    Sql Server 锁
    设非主键为聚集索引
    C#如何使用SqlCacheDependency
    简易系统后台架构
    matlab cross 3*1 向量叉乘
    Matlab求齐次方程的解
  • 原文地址:https://www.cnblogs.com/dabrk/p/11601403.html
Copyright © 2011-2022 走看看