[关闭]
@MRsunhuimin 2019-09-01T23:59:29.000000Z 字数 3967 阅读 259

框架优缺点

SSM框架


1. MyBatis

原理详解:

            MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。 

优点:

    1、简单易学 
           mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。 

    2、灵活 
           mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。 

    3、解除sql与程序代码的耦合 
           通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。 

    4、提供映射标签,支持对象与数据库的orm字段关系映射 

    5、提供对象关系映射标签,支持对象关系组建维护 

    6、提供xml标签,支持编写动态sql。 

缺点:

    1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。 
    2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。  
    3、框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。 
    4、二级缓存机制不佳

2. Mybatis与Hibernate对比

Mybatis优势

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

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

    Hibernate优势 

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

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

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

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

3. Spring MVC

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

优点:
一:多视图共享一个模型,大大提高代码可重用性

    二:MVC三个模块相互独立,松耦合框架 

    三:控制器提高了应用程序的灵活性和可配置性。

缺点:
一:原理复杂

    二:增加了系统结构和实现的复杂性 

    三:视图对模型数据的低效率访问 

4. Struts2

    我在项目开发过程中,一个具体的功能的开发流程是:拿到一个具体的功能需求文档和设计好的前台界面(在开发中我不负责设计页面),分析需要从前台传递哪些参数,确定参数的变量名称,在Action中设置相应的变量,这些参数在前台如何显示,并将页面上的一些控件适当使用Struts2提供的服务器端控件来代替,编写Action对应的方法来完成业务逻辑,最后,做一些与配置文件相关的设置。当然实际的开发比这个过程要复杂,涉及到数据库,验证,异常等处理。但是使用Struts2进行开发,你的关注点绝大部分是在如何实现业务逻辑上,开发过程十分清晰明了。 

优点

    (1)实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现。 

    (2)丰富的标签库,大大提高了开发的效率。

    (3)Struts2提供丰富的拦截器实现。 

    (4)通过配置文件,就可以掌握整个系统各个部分之间的关系。 

    (5)异常处理机制,只需在配置文件中配置异常的映射,即可对异常做相应的处理。 

缺点

    (1)Struts2中Action中取得从jsp中传过来的参数时还是有点麻烦 

    (2)校验还是感觉比较繁琐,感觉太烦乱,也太细化了,如果校验出错的只能给用户提示一些信息 

    (3)安全性有待提高。

5. Spring MVC和Struts2的比较的优点

    我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置。spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。

6. Spring MVC和Struts2的区别:

        机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是 servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。 

        性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。 

        参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。 

        设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。 

        intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。 
            另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody 

6. Spring

    Spring是一个轻量级的DI和AOP容器框架。 

    说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的(所谓非侵入式就是远程调试 而不植入,spring不再用new的方式来创建对象,而是使用依赖注入的方式),基于spring开发的应用一般不依赖于spring的类。 

    DI:称作依赖注入(Dependency Injection),和控制反转一个概念,具体的讲,当一个角色需要另外一个角色协助的时候,在传统的程序设计中,通常有调用者来创建被调用者的实例。但是在spring中创建被调用者将不再有调用者完成,因此叫控制反转。创建被调用对象有Spring来完成,在容器实例化对象的时候主动的将被调用者(或者说它的依赖对象)注入给调用对象,因此又叫依赖注入。 

    AOP:Spring对面向切面编程提供了强有力的支持,通过它让我们将业务逻辑从应用服务(如事务管理)中分离出来,实现了高内聚开发(所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。),应用对象只关注业务逻辑,不再负责其它系统问题(如日志、事务等)。Spring支持用户自定义切面。 

    面向切面编程是面向对象编程的有力补充。面向对象编程将程序分成各个层次的对象,面向切面的程序将运行过程分解成各个切面。AOP是从运行程序的角度去考虑程序的结构,提取业务处理过程的切面,OOP是静态的抽象,AOP是动态的抽象,是对应用执行过程的步骤进行抽象,从而获得步骤之间的逻辑划分。 

    容器:Spring是个容器,因为它包含并且管理应用对象的生命周期和配置。如对象的创建、销毁、回调等。 

    框架:Spring作为一个框架,提供了一些基础功能,(如事务管理,持久层集成等),使开发人员更专注于开发应用逻辑。

优点

      1. 提供了一种管理对象的方法,可以把中间层对象有效地组织起来。一个完美的框架“黏合剂”。

      2. 采用了分层结构,可以增量引入到项目中。

      3. 有利于面向接口编程习惯的养成。

      4. 目的之一是为了写出易于测试的代码。

      5. 非侵入性,应用程序对Spring API的依赖可以减至最小限度。

      6. 一致的数据访问介面。

      6. 一个轻量级的架构解决方案。 

缺点

    1.jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器 

    2.Spring不支持分布式,这也是EJB仍然在用的原因之一。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注