ibatis优缺点总结

Java代码  
  1. 1.优点
  2. 简单:
  3. 易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  4. 实用:
  5. 提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了DAO框架,可以使我们更容易的开发和配置我们的DAO层。
  6. 灵活:
  7. 通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
  8. 功能完整:
  9. 提供了连接管理,缓存支持,线程支持,(分布式)事物管理,通过配置作关系对象映射等数据访问层需要解决的问题。提供了DAO支持,并在 DAO框架中封装了ADO.NET,NHibernate和DataMapper。
  10. 增强系统的可维护性:
  11. 通过提供DAL 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  12. 2.缺点
  13. 滞后性:
  14. 还没有明确对.NET2.0的支持。最新版本在2.0下编译可以,但有些单元测试不能通过。
  15. 不成熟,工程实践较少:
  16. IbatisNet 在实际项目中的使用较少。 只是理论上可行.
  17. 半ORM,工具支持较少:
  18. 需要我们自己写sql,并且.NET下还未发现可以自动生成业务层类和配置文件的工具,这点和NHibernate不一样,NHibernate会为我们的数据库直接产生sql,并有一些辅助工具。因此使用 Ibatis比NHibernate要多做一些工作。
  19. 3.可行性
  20. 没有最好的框架,只有最适合的框架。 存在的便是合理的,它存在就说明有它存在的道理。但它未必为我们存在。所以选择一个框架最主要的是看它对你有没有意义,意义有多大,是不是比其他框架带给你的好处要多。没有绝对的优点也没有绝对的缺点,重要的是看在什么情况下讨论。
  21. 上面说了部分的Ibatis的优点和部分缺点。这些优点从理论上证明Ibatis对任何数据持久层都合适,但未必是最好的选择。下面对上面的优缺点分别从两方面讨论。
  22. 简单:
  23. 我们都喜欢简单,简单意味着学习成本低,使用中出错的可能性低。同时,简单的东西一般来说功能不够强大。反过来,复杂的东西学习成本高,用起来不方便,并且团队没有很强的技术实力,一般不要使用。
  24. 实用:
  25. 解决了项目中需要解决的问题,这是任何实际工程中采用的框架和工具都应具有的性质,否则就不要拿到实际项目中来。
  26. 灵活:
  27. 灵活有两层意思,一种是简单易扩展,另一种是功能强大提供了很多选项。Ibatis属于前者,Hibernate属于后者。两者各有优缺点。
  28. 功能完整:
  29. Ibatis的功能完整也是相对的,比我们自己开发的框架应该完整,但对比其他框架肯定也有一些解决不了的问题。
  30. 增强系统的可维护性:
  31. 利用Ibatis可以做到sql和代码分离,可以设计出一个清晰的数据访问层(DAL)。但项目架构是否科学合理,是否以维护,关键不在Ibatis,因为它只是一个数据层框架。但是我们也不得不清楚,要想发挥Ibatis的优势,我们需要做一些额外工作,比如最好设计DAO接口,需要将业务层实体和对实体的访问放在不同的工程中,同时需要维护xml配置文件。
  32. 滞后性:
  33. Ibatis组现在还没有提到要支持.NET2.0,很多人在.NET2.0下使用Ibatis都出现了问题。所以如果要使用.NET2.0开发,IBatis不是一个好选择,还需要等待。
  34. 不成熟:
  35. 开源的东西很难说成熟,但一般比我们自己写的框架要成熟。由于我们可以拿到他的源代码,所以关键在于我们能否驾驭它。
  36. 半ORM,工具支持少:
  37. 这注定了Ibatis不能从本质上提升开发效率,我们需要自己写sql,写实体类,写配置文件。但这也是它优越的地方,它没有为我们做的他多,所以我们就有更多的施展空间。而且它非常适合那些并不能完全控制数据库的系统和需要利用数据库本身提供的高级特性的统计查询系统的开发。
  38. 使用Ibatis需要自己写sql,由于我们的sql不可能完全符合sql标准,比起NHibernate产生的sql来,可移植性差。不过由于我们更改数据库的可能性较小,对我们来说sql符合标准以便可以在迁移到不同服务器时代价最小并不是十分必要的。另一方面,NHibernate虽然可以屏蔽很多数据库间的不同,但是却很难利用某些数据库的高级特性,比如Oracle的分析统计函数。
  39. NHibernate不适合数据库模式不规范,约束不完整,需要大量复杂查询的系统,同时NHibernate的学习成本较高,完全掌握 NHibernate也较困难,风险较大。
  40. 自己写框架未必比Ibatis的好,稳定,强大和可扩展。而且自己开发框架也需要较大的工作量。
  41. 如果使用DotNet并且要选一个数据层框架,而系统中有相当一部分较复杂的sql,或数据库设计不合理,脏数据多,对性能和资源要求严格,Ibatis 是一个比较不错的选择。他的那些缺点并不是致命的,而且也是有一些解决方案的。尤其是,当选用了Ibatis的DataAccess作为DAO框架时,我们可以同时使用NHibernate,ADO.NET和DataMapper(IbatisNet的核心组件),那样将会使风险降到最低,并且整个系统的框架比较合理。
  42. 另外,利用Ibatis可以统一编码风格,节约开发成本,大家不会再把精力浪费到分页  连接池 主键生成等地方了,可以集中精力进行业务组件的编写。
  43. 综上:         很多时候我们要在是自己开发框架和选用第三方框架和选用什么样的框架问题上进行综合考虑。考虑的标准当然是项目的当前情况和我们希望达到目的的一个平衡。
  44. Ibatis只是封装了数据访问层,替我们做了部分的对象关系映射。但我们的代价是必须要写xml配置文件,相对于Hibernate我们还要写很多 sql。Hibernate通过工具直接从数据库模式生成实体类和基本的配置文件,而且大部分情况下不需要我们写sql,会较大的提升开发效率。但这些也有很多的局限性,尤其是对环境的要求较高(数据库设计,对象设计,团队的协作等)。
  45. 个人感觉Ibatis对项目比较有意义的地方在于它小巧灵活,可扩展,封装了数据访问层(事务,缓存,异常,日志),并提供了DAO框架支持。
  46. 利用Ibatis我们可以做到代码和sql的分离,只要sql能够解决的问题,Ibatis就能帮我们较容易的解决,同时也使我们的项目对某一框架的依赖性变小(因为Ibatis是非侵入性的)。这将极大的降低项目风险,减少解决复杂问题的时间,使项目的维护变得简单。
  47. Ibatis对于应用的修改,调试,扩充和维护将会变得容易自然。修改时,我们主要修改的是代表模型的实体对象,xml配置文件中的sql,和/或配置文件的ResultMap(很多时候是不需要的)。同时,sql和代码分离,我们不用在代码的StringBuffer的append方法之间寻找需要修改的sql。配置文件中的sql便利了我们的调试和对sql的评审及以后的sql重用。
  48. 利用一些框架在前期一般会拖慢开发效率。因为我们需要付出学习成本,很多时候,使用框架需要写很多配置文件,在使用不熟时开发速度较慢;同时利用框架往往使系统代码量增大,比如Model1和Model2模型,开发效率应该还是Model1快,四层的架构肯定比两层的代码量大。 但对于中后期开发和维护将会极大的提高效率。
  49. 利用一些较完全的开发框架和代码生成工具,在前期会较大的提高开发效率,但在后期常常会拖慢进度,并有可能成为以后维护的梦魇。比如torque生成实体类和其对应的sql,虽大幅提高了效率,但修改负担较大。
  50. 比较理想的开发方式是使用简单框架结合简单的代码生成工具。框架提供系统的基础服务,并规范开发。框架一方面提供了开发中某一方面的开发基础支持,比如数据访问层,事务,日志,公用类,异常等。另一方面,也为开发定义了模式,定义了系统的基本轮廓。同时,通过简单的代码生成工具生成部分低级的代码。比如通过工具从数据库模式生成实体类。这些类生成后我们可以自由修改。
  51. Hibernate是十分强大,比较完善的ORM框架,不过这是它的优点也是它的缺点。 j2ee系统是否采用Hibernate3,是一个需要认真评估的问题。
  52. 要想Hibernate工作的好,数据库的设计必须好。同时对于复杂的数据操作同时需要使用sql,Hibernate3对于直接使用sql的支持比 Hibernate2要自然,这一点是可以接受的。
  53. Hibernate比较复杂,功能强大而灵活,要用好Hibernate确实不是很简单,当然Spring框架提供了对Hibernate的封装,使 Hibernate的使用变得简单了点。
  54. 可以说Ibatis在任何系统里都适用,但未必是最好选择。不过Ibatis提供的思路是我们应该仔细考虑的。

优点:

与JDBC比较: 
   1.减少了大约61%的代码量 
   2.简单 
   3.架构级性能增强 
   4.sql语句与程序代码分离 
   5.简化项目中的分工 
   6.增强了移植性(数据库的可移植性)

缺点: 
    1.sql需要自己写

个人观点:ibatis现在用的很少了 ,有次朋友去面试,说自己工作中没用过hibernate,都是用的ibatis , 面试官说没听过 , 呵呵  好笑!

现在用ibatis ,一般都是为了与旧系统兼容  ibatis现在体现出来的优点基本上没啥好说的了

这是对上面的补充 , 听几个朋友讲起 ,外面很多公司现在还是用ibatise , 可能是公司的人用ibatise用惯了 ,不管是什么原因 , 大家有时间还是去了解了解 , 还有关于ssh  外面很多公司都不用 , 都是公司内部自己开发的框架 ,不过都是基于ssh开发出来的  思想是一样的

转载于:https://www.cnblogs.com/baiduligang/p/4247299.html

IBATIS的优缺点相关推荐

  1. ibatis轻松入门

    近日,由于公司项目应用开发的逻辑层使用的是iBatis.上网查了些资料,自己写了点demo入门.感觉良好.iBatis实在是比Hibernate很容易入门,贡献出来与各路菜鸟分享(后文附源码),希望得 ...

  2. 【转】Hibernate和IBatis对比

    原文地址:http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, ...

  3. iBatis入门和开发环境搭建

    iBatis 的优缺点: 优点: 1. 减少代码量,简单: 2. 性能增强: 3. Sql 语句与程序代码分离: 4. 增强了移植性: 缺点: 1. 和Hibernate 相比,sql 需要自己写: ...

  4. Java框架面试题总结

    目录 Ø      Struts篇... 4 1. Struts的工作流程... 4 2. Struts的工作流程分解... 4 3. Struts控制器组件的组成. 和控制器的主要功能... 4 4 ...

  5. Hibernate和iBATIS 优缺点比较

    选择Hibernate还是iBATIS都有它的道理: Hibernate的特点: Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hiberna ...

  6. java面试总结-(hibernate ibatis struts2 spring)

    说说Hibernate对象的三种状态 Hibernate对象有三种状态,分别是:临时态(Transient). 持久态(Persistent).游离态(Detached). 临时状态:是指从对象通过n ...

  7. mybatis与mysql的优点_mybatis和hibernate比较_区别_优缺点

    前言 Hibernate与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8.而Mybatis相对平静,工具较少,当前最 ...

  8. iBATIS学习笔记开篇

    因工作需要,从今天开始,计划一个月内学懂学透.net下的iBATIS.关于iBATIS,网上有很多介绍(官方网站),我会把学习(.net下的)iBATIS的笔记整理成一个系列来写,希望对有相同需求的朋 ...

  9. mybatis与mysql的优点_MyBatis的优缺点以及特点

    特点: mybatis是一种持久层框架,也属于ORM映射.前身是ibatis. 相比于hibernatehibernate为全自动化,配置文件书写之后不需要书写sql语句,但是欠缺灵活,很多时候需要优 ...

最新文章

  1. Linux系统编程@文件操作(一)
  2. 首届丘成桐女子中学生数学竞赛成绩出炉,成都七中成最大赢家,摘得1金2银1优胜...
  3. php如何防止消息被篡改,php如何用libevent处理rabbitmq发来的消息,防止消息丢失或者人为的中断导致消息没有被处理完整...
  4. 以太坊节点布置(3) 启动geth客户端
  5. 【PAT甲级 TreeMap的使用】1002 A+B for Polynomials (25 分) Java版 6/6通过
  6. 阳泉2021高考成绩查询时间段,2021年阳泉高考成绩排名及成绩公布时间什么时候出来...
  7. html渐变显示动画效果,使用CSS transition和animation改变渐变状态
  8. 使用nexus下载资源
  9. 黑马python5_黑马Python5.0+人工智能课程升级5.0版本!【完整无秘】
  10. 【FinE】期权定价理论(1)
  11. 那点你不知道的XHtml(Xml+Html)语法基础(DTD、XSD)
  12. 黑灰产程序员被抓,背后隐藏的黑色产业链怎么破?
  13. 关系型数据库和MySQL作业及答案
  14. Jenkins下载与安装
  15. turf.js实现行政区(多边形)图形合并边界提取,掩膜等效果
  16. 东方mmd巨大化_有什么东方mmd非常值得一看?
  17. idea svn回退版本_版本控制 -- idea 整合 SVN
  18. 第一章 JavaScript简介。
  19. PHP获取东方头条接口的新闻,新浪新闻API接口
  20. python turtle绘制正五角星

热门文章

  1. com.alibaba.fastjson.JSONObject之对象与JSON
  2. DataX不支持Mysql8.x
  3. Android开发笔记(十五)淡入淡出动画TransitionDrawable
  4. 加一度分享5大竞价经验,让流量更大更精准
  5. C++ 构造函数与析构函数
  6. 获得BAT技术专家Offer,他到底做了什么?
  7. 理解C++ dynamic_cast
  8. 在docker for win中使用portainer管理容器
  9. Juniper CoS 基本配置说明
  10. Azure 中国篇之网络服务—(2)Azure虚拟机使用公网ip(PIP)