ibatishibernate:Hibernate和IBatis的优缺点及可行性分析

  1.优点

  简单:

  易于学习易于使用通过文档和源代码可以比较完全掌握它设计思路和实现

  实用:

  提供了数据映射功能提供了对底层数据访问封装(例如ado.net)提供了dao框架可以使我们更容易开发和配置我们dal层

  灵活:

  通过sql基本上可以实现我们不使用数据访问框架可以实现所有功能或许更多

  功能完整:

  提供了连接管理缓存Cache支持线程支持(分布式)事物管理通过配置作关系对象映射等数据访问层需要解决问题提供了dao支持并在dao框架中封装了ado.netHibernate和datamapper

  增强系统可维护性:

  通过提供dal层将业务逻辑和数据访问逻辑分离使系统设计更清晰更易维护更易单元测试sql和代码分离提高了可维护性

  2.缺点

  滞后性:

  还没有明确对.net2.0支持最新版本在2.0下编译可以但有些单元测试不能通过

  不成熟工程实战较少:

  ibatisnet在实际项目中使用较少 只是理论上可行.

  半orm工具支持较少:

  需要我们自己写sql并且.net下还未发现可以自动生成业务层类和配置文件工具这点和Hibernate不Hibernate会为我们数据库直接产生sql并有些辅助工具因此使用ibatis比Hibernate要多做些工作

  3.可行性

  没有最好框架只有最适合框架 存在便是合理它存在就介绍说明有它存在道理但它未必为我们存在所以选择个框架最主要是看它对你有没有意义意义有多大是不是比其他框架带给 你好处要多没有绝对优点也没有绝对缺点重要是看在什么情况下讨论

  上面说了部分ibatis优点和部分缺点这些优点从理论上证明ibatis对任何数据持久层都合适但未必是最好选择下面对上面优缺点分别从两方面讨论

  简单:

  我们都喜欢简单简单意味着学习成本低使用中出错可能性低同时简单东西般来说功能不够强大反过来复杂东西学习成本高用起来不方便并且团队(Team)没有很强技术实力般不要使用

  实用:

  解决了项目中需要解决问题这是任何实际工程中采用框架和工具都应具有性质否则就不要拿到实际项目中来

  灵活:

  灵活有两层意思种是简单易扩展种是功能强大提供了很多选项ibatis属于前者Hibernate属于后者两者各有优缺点

  功能完整:

  ibatis功能完整也是相对比我们自己开发框架应该完整但对比其他框架肯定也有些解决不了问题

  增强系统可维护性:

  利用ibatis可以做到sql和代码分离可以设计出个清晰数据访问层(dal)但项目架构是否科学合理是否以维护关键不在ibatis因 为它只是个数据层框架但是我们也不得不清楚要想发挥ibatis优势我们需要做些额外工作比如最好设计dao接口需要将业务层实体和对实 体访问放在区别工程中同时需要维护xml配置文件

  滞后性:

  ibatis组现在还没有提到要支持.net2.0很多人在.net2.0下使用ibatis都出现了问题所以如果要使用.net2.0开发ibatis不是个好选择还需要等待

  不成熟:

  开源东西很难说成熟般比我们自己写框架要成熟由于我们可以拿到他源代码所以关键在于我们能否驾驭它

  半orm工具支持少:

  这注定了ibatis不能从本质上提升开发效率我们需要自己写sql写实体类写配置文件但这也是它优越地方它没有为我们做他多所以我们就 有更多施展空间而且它非常适合那些并不能完全控制数据库系统和需要利用数据库本身提供高级特性统计查询系统开发

  使用ibatis需要自己写sql由于我们sql不可能完全符合sql标准比起Hibernate产生sql来可移植性差不过由于我们更改 数据库可能性较小对我们来说sql符合标准以便可以在迁移到区别服务器时代价最小并不是十分必要方面Hibernate虽然可以屏蔽很多 数据库间区别但是却很难利用某些数据库高级特性比如oracle分析统计

  Hibernate不适合数据库模式不规范标准约束不完整需要大量复杂查询系统同时Hibernate学习成本较高完全掌握Hibernate也较困难风险较大

  自己写框架未必比ibatis稳定强大和可扩展而且自己开发框架也需要较大工作量

  如果使用dotnet并且要选个数据层框架而系统中有相当部分较复杂sql或数据库设计不合理脏数据多对性能和资源要求严格ibatis 是个比较不错选择那些缺点并不是致命而且也是有些解决方案尤其是当选用了ibatisdataaccess作为dao框架时我 们可以同时使用Hibernateado.net和datamapper(ibatisnet核心组件)那样将会使风险降到最低并且整个系统 框架比较合理

  另外利用ibatis可以统编码风格节约开发成本大家不会再把精力浪费到分页 连接池 主键生成等地方了,可以集中精力进行业务组件编写

  综上: 很多时候我们要在是自己开发框架和选用第 3方框架和选用什么样框架问题上进行综合考虑考虑标准当然是项目当前情况和我们希望达到目个平衡

  ibatis只是封装了数据访问层替我们做了部分对象关系映射但我们代价是必须要写xml配置文件相对于Hibernate我们还要写很多 sqlHibernate通过工具直接从数据库模式生成实体类和基本配置文件而且大部分情况下不需要我们写sql会较大提升开发效率但这些也 有很多局限性尤其是对环境要求较高(数据库设计对象设计团队(Team)协作等)

  个人感觉ibatis对项目比较有意义地方在于它小巧灵活可扩展封装了数据访问层(事务缓存Cache异常日志)并提供了dao框架支持

  利用ibatis我们可以做到代码和sql分离只要sql能够解决问题ibatis就能帮我们较容易解决同时也使我们项目对某框架依赖 性变小(ibatis是非侵入性)这将极大降低项目风险减少解决复杂问题时间使项目维护变得简单

  ibatis对于应用修改调试扩充和维护将会变得容易自然修改时我们主要修改是代表模型实体对象xml配置文件中sql和/或配置文 件resultmap(很多时候是不需要)同时sql和代码分离我们不用在代码bufferappend思路方法的间寻找需要修改 sql配置文件中sql便利了我们调试和对sql评审及以后sql重用

  利用些框架在前期般会拖慢开发效率我们需要付出学习成本很多时候使用框架需要写很多配置文件在使用不熟时开发速度较慢;同时利用框架往往 使系统代码量增大比如model1和model2模型开发效率应该还是model1快 4层架构肯定比两层代码量大 但对于中后期开发和维护将会极大提高效率

  利用些较完全开发框架和代码生成工具在前期会较大提高开发效率但在后期常常会拖慢进度并有可能成为以后维护梦魇比如torque生成实体类和其对应sql虽大幅提高了效率但修改负担较大

  比较理想开发方式是使用简单框架结合简单代码生成工具框架提供系统基础服务并规范标准开发框架方面提供了开发中某方面开发基础支持比如数 据访问层事务日志公用类异常等方面也为开发定义了模式定义了系统基本轮廓同时通过简单代码生成工具生成部分低级代码比如通 过工具从数据库模式生成实体类这些类生成后我们可以自由修改



  Hibernate是十分强大比较完善orm框架不过这是它优点也是它缺点 J2EE系统是否采用Hibernate3个需要认真评估问题

  要想Hibernate工作数据库设计必须好同时对于复杂数据操作同时需要使用sqlHibernate3对于直接使用sql支持比Hibernate2要自然点是可以接受

  Hibernate比较复杂功能强大而灵活要用好Hibernate确实不是很简单当然spring框架提供了对Hibernate封装使Hibernate使用变得简单了点

  可以说ibatis在任何系统里都适用但未必是最好选择不过ibatis提供思路是我们应该仔细考虑



Tags:  hibernate的优缺点 ibatis与hibernate ibatis和hibernate ibatishibernate

延伸阅读

最新评论

发表评论