iBatis与Hiber
ate比较我在最初的选型的时候是打算选择Hiber
ate的,在研究的过程中发现了iBatis,经过分析比较之后我选择了iBatis。现在我已经使用iBatis完成了一个中小型的项目。这个项目在性能、可维护性、可扩展性方面都非常令我满意。
在这个过程中我也不断的与使用过或者正在使用Hiber
ate的人进行过探讨。而且我本身也在不断的跟进Hiber
ate的发展。
最终,我的结论是iBatis的选择非常正确,而且越用越喜欢它了。
当然了,我对Hiber
ate的理解还是非常有限的,所以这里的关于Hiber
ate的一些观点的错误之处希望能够得到Hiber
ate高手的指正。
1iBatis易于掌握。拿来文档看半天到两天就可以掌握了。Hiber
ate可能需要3倍以上的时间来掌握。
2iBatis更容易进行sql的优化。
f这个应该大家都有共识了。另外Hiber
ate生成的sql也实在是太难看了。鉴于有的朋友提到了sql不太重要。我想在这里强调一下我的经验,一般系统性能的瓶颈都在数据库上。所以这一点是iBatis非常重要的一个优势。
3iBatis可以进行细粒度的优化
31比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis很简单,执行一个sqlUPDATETABLE_ASETcolum
_1colum
_1WHEREidid但是用Hiber
ate的话就比较麻烦了缺省的情况下hiber
ate会更新所有字段。当然我记得hiber
ate有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果。
32我需要列出一个表的部分内容,用iBatis的时候,这里面的好处是可以少从数据
f库读很多数据,节省流量SELECTIDNAMEFROMTABLE_WITH_A_LOT_OF_COLUMNWHERE
321一般情况下Hiber
ate会把所有的字段都选出来。比如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar255text。上面的场景中我为什么要把他们也选出来呢?
322用hiber
ate的话,你又不能把这两个不需要的字段设置为lazyload,因为还有很多地方需要一次把整个domai
object加载出来。这个时候就能显现出ibatis的好处了
323Hiber
ate还有一个方案,就是生成javabea
mapobject感谢leelu
cjmm,但是这样的话就可能会产生大量的多余class。mapobject的方式应该不错,我比较喜欢这种方式。
f33如果我需要更新一条记录(一个对象)如果使用hiber
ate,,需要现把对象select出来,然后再做update。这对数据库来说就是两条sql。而iBatis只需要一条update的sql就可以了。减少一次与数据库的交互,对于性能的提升是非常重要。
4开发方面41开发效率上,我觉得两者应该差不多42可维r