专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » ibatishibernate:Ibatis VS Hibernate »正文

ibatishibernate:Ibatis VS Hibernate

来源: 发布时间:星期四, 2009年1月15日 浏览:19次 评论:0
  近日在JavaEye论坛中看了Ibatis和Hibernate帖子看后心里觉得憋闷不说不快, 这里我想更细化下:   1. 库表复杂度首先取决于需求不取决于设计设计能力强也要遵守库表设计规范标准从巴克斯 3个范式上原则上也要遵守不能说用了Hibernate,自己库表设计能力就强了不能为了用Hibernate就去味批判复杂关系不对复杂关系设计对不对首先取决于是否有复杂需求其次才取决于设计者能力

  2. 只要你用是关系数据库就必须要明白为什么叫关系数据库而不叫面向对象数据库把面向对象那些观点拿到库表设计上后期维护和调优上你要担起责任不能让开发人员替早期决策人员擦屁股个人所见过有打着OO和扩展性旗号硬生生个表拆成了 3个表而这 3个表本来只需要增加个类型字段再做些冗余就可以是个表现在查询时还要把这 3个表Union到块来查当需求变更时增加个字段不仅要改变 3个类还要改变 3个表简直是乱伦

  3.One-One库表设计对于DBA来讲并不是个best practice设计不能为了Hibernate刻意把大表拆成小表再用几个小类做成One-One映射关系整体性是不能随便分割毕竟开发人在调试、测试和维护时候更喜欢看数据库里数据本来个SQL就查出来现在要到多个表中去查

  4. 增删改存实体维护

   Ibatis比不上Hibernate说实在话现在让我写SQL来维护个多对多关系实体维护我都要考虑上半天别说写代码了

  5. 你需要写原生SQL吗

   首先你要确认你项目要求不需要写原生SQL再来讲Ibatis和Hibernate好坏在写原生SQL上特别是动态生成SQLibatis比Hiberante有得ibatis就像个模板将SQL写在配置文件当中集中配置特别方便技术领导者监控项目成员写SQL好坏而且没有什么学习曲线就写SQL就完事了

   有人会说Hibernate也支持写SQL但是写代码当中就失去了原来基于HibernateDAO简洁性那个DAO点也不简洁如果你将动态拼SQL代码也放在DAO当中那个DAO就会充斥大量If Else的类语句非常壮观

   还有人会说Hibernate也支持命名查询将SQL写在映射文件当中但是命名查询只支持占位符固定情况也就是说where a = ? and b = ? and c=?是 3个问号就是 3个问号传参时个都不行但是很多项目查询都是动态也就是说用户选了这个查询条件才会生成这个占位符

   Hibernate办不到

   还有人会说我自己用Hibernate写个框架也可以做到那你写可能比Ibatis好也可能差你要造轮子谁来拦不着

  5. 调优

   早期调优有些Bad SQL其实在code review阶段只要看看IbatisSQL配置文件就可以扼杀掉如果使用HSQL可能不会被发现它不仅隐藏在代码当中时候还需要跑起来通过日志打印出SQL或者通过其它工具如P6Spy来看出来

   后期调优既然是调优我想就定是遇到了瓶颈可能要在库表上做冗余可能要检查那些Bad SQL可能要修改代码可能要动用DBA层次上些调优手段那么调优越深入Ibatis优势就越能体现出来比如说增加临时表中间表增加冗余字段等

  6. 开发速度

   如果项目当中没有个Hibernate高手项目又相对复杂不仅有复杂库表关系还有大量报表查询那么使用Hibernate速度上逊于Ibatis.

   问题在于如何样算是个Hibernate高手别看论坛上那么多人群情激奋在说Hibernate有谁真是高手?

   我认识个人连Hibernate命名查询、悲观锁、乐观锁的类都不清楚还在那说:“说Hibernate不好只是他不会用Hibernate高手使用EJB也样用很顺溜“我这辈子最最讨厌这样人家明明用Spring很简单很快乐为什么要用EJB充高手换过来项目使用Ibatis来做动态查询很快就解决问题了为什么要去学Hibernate里面高深东东是不是这样就是高手了?

  7. 平台移植性

   如果你项目要做产品而且打算基于多个数据库平台发布使用Hiberante是没有说了

  8. 维护性

   如果不考虑移植性Ibatis可维护不差于Hibernate库表变动引起实体类变动时HSQL也会有改动有人说不用改说这话那个人可能整天只会有select * 如果ibatis也是这样写也不用动了

   HSQL好阅读吗From order确实很简单但实际当中这跟拿HelloWord做例子有什么区别?

  9. 我在实际项目当中运用

  项目背景:

   我自己从Hibernate2开始使用我现在也不认为我是Hibernate高手我也没有时间去钻研Hibernate更深东西我也不喜欢坐在开发人员旁边老半天去帮他们解决Hibernate遇到问题我自己还有很多事要做

   我项目当中在Hibernate方面还有个比我更强他也很烦去看Hibernate打印出来sql看上老半天再调上老半天项目进度嗖嗖过去了

   水平越高任务越重很少有时间和耐心去解决般性问题

  最终运用:

   在基于Spring容器事务管理的下

   增、删、改、存及在事务中查询使用Hibernate

   非事务性查询及报表都用Ibatis维护非常直观方便开发速度上也快很多



   我觉得现在技术换代很快使用项技术首先是要快速解决问题然后要学习他思想那些整天死抱着Hibernate自认为学习到ORM设计窍门技巧就去继续学吧

   我已经会用Hibernate些方面我觉得够用就行了犯不上天天钻研HSQL如果有时间我觉得躺在草坪上看看Unix编程艺术看看代码大全看看Oracle编程艺术比看HibernateSB书要惬意多了

   简单能够带来快乐用过EJB再用Spring都有体会那简直是种思想上重生

   Ibatis设计者认为在新项目当中可以使用Hibernate在旧遗留项目当中可以使用Ibatis不明白他为什么说这样这和新旧项目有什么区别? 新项目就真可以使用Hibernate吗



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: