论坛首页 入门技术论坛

我为什么选择 iBatis 而不是 Hibernate(对于正在选型的人的建议)

浏览 69442 次
该帖已经被评为新手帖
作者 正文
   发表时间:2006-12-31  
引用

这种写法应该是主要为了提高性能的一种手段,感觉不大OO了,本来是一个User对象,现在莫名奇妙的多了UserName,UserAddress等,而这些多出来的对象仅仅是为了能够少查询几个字段.


支持 jamesby 的观点,而且如果采用添加类的方法的话,很快系统里的类就泛滥成灾了。

就拿用户库做例子,可能会有以下可能

1. 取 id, name
2. 取 id, name, password_checksum
3, 取 id, name, 注册日期
等等等等
0 请登录后投票
   发表时间:2006-12-31  
jiming 写道
引用
如果表里有几十个字段,那么大部分时候应该重构一下数据库……我觉得以可能把Domain Model当Value Object用了…


我是举了一个极端点的例子。比如说有8个字段,其中有一两个比较大的字段,varchar(255)/text。

这个时候我为什么要把这两个大的字段取出来呢?

用 hibernate 的话,你又不能把这两个字段设置为 lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出 ibatis 的好处了


http://www.iteye.com/post/48750
0 请登录后投票
   发表时间:2006-12-31  
前面有个朋友评论得对,这只是一个JDBC高手的观点,而不是所谓ibatis比起hib的优点。
楼主所说的ibatis优点HIB也有,像第3点,HIB做得更好,因为hib的dynamic update根本不用自己操心这种东西
0 请登录后投票
   发表时间:2006-12-31  
觉得楼主这种标题太有煽动性了,其实楼主之所以不选hibernate是因为楼主并不怎么熟悉hibernate而已,楼主应该对jdbc比较熟,而对orm并不熟悉,所以才有此言论,有点片面
0 请登录后投票
   发表时间:2006-12-31  
从长远的角度出发,应当选择Hibernate,这样无论从系统的开发速度还是后期的维护等等上面来看,都是值得的!虽然要掌握Hibernate是要花高于其它的代价,但是物有所值。
0 请登录后投票
   发表时间:2006-12-31  
引用
觉得楼主这种标题太有煽动性了,其实楼主之所以不选hibernate是因为楼主并不怎么熟悉hibernate而已,楼主应该对jdbc比较熟,而对orm并不熟悉,所以才有此言论,有点片面


千万别把煽动这个大帽子给我口到头上来,赫赫。

其实我对 Hibernate 也进行了相当多的研究。而且应该比很多现在在用 Hibernate 的人要强一些,当然不包括一些大牛门了。

我之所以这么提在我的文章里分析已经很清楚了。我没有否认 hibernate 是一个非常优秀的项目,其中所包含的理论水平也的确比 ibatis 高深和先进一些。但是可能有点太过理论化而忽略了一些实际项目中的非常重要的考虑点。

OO 很好,但是也不要到处都用 OO。

我们一定要非常注意避免过度设计。


0 请登录后投票
   发表时间:2006-12-31  
iBATIS中的data cache 和 lazy loading也还是不错的,而且2.3.0中增加了prepare statement缓存的支持,记住要开启这个选项。
0 请登录后投票
   发表时间:2007-01-01  
hb也可以只查询几个字段。出来的结果无非就跟JDBC一样是一个list数组。
HB也支持SQL查询。
如果用SPRING,也有JdbcTemplate可以混合用。
用HB维护数据,new 一个OBJECT,然后BeanUtils.copyProperty一下,再SAVE就OK,多清爽。
HB的灵活性可以用nativeSql或则JdbcTemplate来补充,一点不耽误。
0 请登录后投票
   发表时间:2007-01-01  
jiming 写道
引用
觉得楼主这种标题太有煽动性了,其实楼主之所以不选hibernate是因为楼主并不怎么熟悉hibernate而已,楼主应该对jdbc比较熟,而对orm并不熟悉,所以才有此言论,有点片面


千万别把煽动这个大帽子给我口到头上来,赫赫。

其实我对 Hibernate 也进行了相当多的研究。而且应该比很多现在在用 Hibernate 的人要强一些,当然不包括一些大牛门了。

我之所以这么提在我的文章里分析已经很清楚了。我没有否认 hibernate 是一个非常优秀的项目,其中所包含的理论水平也的确比 ibatis 高深和先进一些。但是可能有点太过理论化而忽略了一些实际项目中的非常重要的考虑点。

OO 很好,但是也不要到处都用 OO。

我们一定要非常注意避免过度设计。




从你的分析来看,我觉得你可以稍微花点时间在如何解决你所分析出来的问题上面。你所提到的问题都是可以解决的。

ORM框架各有各的好处,不用过分强调谁行谁不行。老实说,iBatis在做持久化的笨拙就令人受不了。一张表有30个字段,你用ibatis去做一次insert试试?不过在查询方面,iBatis的确有很多优势的地方。
0 请登录后投票
   发表时间:2007-01-01  
我不喜欢Hibernate,也不喜欢所谓的OO,大家可以冷静的想想,有多少系统是真正使用的 OO 方式来设计和实现的呢?

OO只是一种思考方式,它可以有助于开发人员了解和分析系统,抽象出系统中的各种元素。但是真正实现,还是要使用传统的各种方法与技术。OO不能解决你所有的问题,言必谈OO,不一定真正的了解OO.

我说个简单点的,有谁能用纯OO实现一个系统,然后又能很好的控制事务的? 

Hibernate 也是一样,它也有自己适用的范围和区间。Hibernate 要应用得好,真的是要花很多的时间,我是从JDBC开始写应用的,所以我不喜欢Hibernate,因为它在实现系统时的思维方式与我的不一样~ 我使用 RDBMS 做为 Storage,Hibernate 将 RDBMS 中的 Table 转换为 POJO,在做系统时,我要不停的在 RDBMS Model 和 POJO 之间转换,为的是了解系统底层发生了什么,系统是否能进一步优化,为了能更好的让 Hibernate 发挥效率,我要试很多不同的方式,最终才能确定哪一种在这个情况下可能更合适~ 说句实话,累啊~ 感觉就像是在计算机里不停的切换两个线程~

iBatis简单,最重要的是,我的模型是用 RDBMS 描述的,我能继续用 RDBMS 的方式来处理数据,对于我这种人来说,存贮过程在很多情况下仍然是最好的选择。也许有人会说,你们把业务放在存贮过程中,可扩展性很差。呵~ 所以这就要看你应用的 scope 了,如果性能很重要,使用存贮过程还是很好的选择。而且对我们的应用,除了 Oracle,不可能用别的数据库。

我觉得很多人把精力花在系统的可扩展性和可移植性上了,就我接触过的系统来说,这方面的需求还是很少的。一来有些系统的生命周期非常短,没有必要;再来,系统运行的时间长了,对它进行替换的成本是很高的。

因此我偏向于对一个具体的应用,采取最有效最简单的方式来完成。就像如果需求只是要打印 123,那就 System.out.println("123”)就好了,不要再来个 System.out.println(124-1)

Hibernate 对于熟悉它的人,是一样非常好的工具,Hibernate 的作者也说过,只要是 Hibernate Team 的人,做出来的系统肯定性能不会差~ 但是不熟悉的人就很难说了~ 我建议使用它的人还是读读它的代码,别盲目使用。很难相象一个程序员,对它的工具做了什么都不知道,还能用好它。

Hibernate 还有一样我最不能接受的,就是它的作者。他根本不能接受别人的意见,只想听奉承。对于别人提出的意见示而不见。最有名的就是在 web 系统里 redeploy 时, Hibernate 会因为内存不能得到释放,引起 web 容器down掉(OutofMemoryExcepiton)。很多人都报告过这个问题,但是开发团队从来不承认这是 Hibernate 引起的。一下说是 commons-log.jar的问题,一下又说是 dom4j的问题,一下又说是 tomcat 的问题(已经证实jboss/weblogic/websphere也会出这问题),一下又说是cglib的问题,呵~ 反正理由多得是~ 就是不关 Hibernate 的问题~ 有人在 JIRA 里开了个BUG,被作者以 Session没有 close 为由给close了,他连测都没测一下~ 我经过测试,证明就算是调用了Session.close还是一样会出现这个问题,只要把Hibernate.jar去掉,一切就可以很好的工作。 Hibernate 的论坛上本来有一个贴子就是说这个问题的,很多人都关注过,但是后来不知道为什么这个贴子不在了。这个问题存在很久了,到最新版的Hibernate也没有解决。我很难理解,JBoss为什么要把它引入到 AS 里面去,它就不怕 Hibernate 引起 redeploy 失效吗?这和JBoss AS的 7*24 不相符啊~


最后我想说,在没有ORM的时候,我们一样能做出系统,而且性能也不差,系统一样可以维护,为什么一定要用ORM?有个朋友说,这些技术只是让程序员舒服了,但是软件不见得就强壮多少。我想这句话很有道理。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics