java

位置:IT落伍者 >> java >> 浏览文章

Hibernate与IBatis的优缺点及可行性分析


发布日期:2021年04月14日
 
Hibernate与IBatis的优缺点及可行性分析

优点

简单

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

实用

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

灵活

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

功能完整

提供了连接管理缓存支持线程支持(分布式)事物管理通过配置作关系对象映射等数据访问层需要解决的问题提供了dao支持并在dao框架中封装了Hibernate和datamapper增强系统的可维护性通过提供dal层将业务逻辑和数据访问逻辑分离使系统的设计更清晰更易维护更易单元测试sql和代码的分离提高了可维护性

缺点

滞后性

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

不成熟工程实践较少ibatisnet在实际项目中的使用较少 只是理论上可行

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

可行性

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

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

简单

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

实用

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

灵活

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

功能完整

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

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

滞后性

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

不成熟

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

半orm工具支持少

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

上一篇:关于hibernate的缓存和CRUD。

下一篇:Struts HOW-TO 系列 之数据库访问