论坛首页 入门技术论坛

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

浏览 69621 次
该帖已经被评为新手帖
作者 正文
   发表时间:2006-12-31  
iBATIS对于短期项目来说的话好点,如果对于长期项目来说还是用Hibernate来做比较好,呵呵,个人看法,只是一点最表面的!
0 请登录后投票
   发表时间:2006-12-31  
flyspider 写道
ahuaxuan 写道
我觉得楼主应该没有用过hibernate吧,lz并没有写hibernate的优点,而是一个劲的写缺点,ibatis和hibernate其实应该可以看成是互不的两个东西,hibernate学习成本高于ibatis,但是hibernate的效率也高于ibatis,用hibernate也更oo,我看到lz说ibatis更容易优化芸芸,其实一般的系统要优化的sql语句有多少??一般的项目用hibernate是没有问题的,遗留系统或者性能要求非常苛刻的系统应该用ibatis,这两者没有绝对的好和坏的问题,只有不同的系统不同的项目用哪个更合适的问题,如果lz说hibernate不适合你们的系统,那请讲讲理由好吗

hibernate的效率高于iBATIS?请讲讲理由。

1,自动组装对象
2,简化查询(这一点最提高效率)
3,更少的sql
4,更加面向对象
5,学习hibernate对比学习ibatis来说虽然成本高但是收获更加大,因为学习hibernate学习到的其实是一种orm思想,这一点尤其重要,对一个人的发展来说比较有利(这一点扯大了)。
6,对二级缓存良好的支持
7,使多数据库版本的规模不大的产品的实现更加容易
0 请登录后投票
   发表时间:2006-12-31  
jiming 写道



  
3. iBatis 可以进行细粒度的优化

   3.1 比如说我有一个表,我需要更新其中的一个字段,iBatis 很简单,执行一个sql
       UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id#
       但是用 Hibernate 的话就比较麻烦了
      
   3.2 我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据
     库读很多数据,节省流量
       SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...
      
  

  



请问你的系统中有没有Domain Model,还是仅仅按照RowSet来做的?你SELECT的时候没有把所有Domain Model的字段取出来
0 请登录后投票
   发表时间:2006-12-31  
简而言之,如果项目团队不习惯OO,还是老实地用jdbc或者ibatis。

学习HB虽然会痛苦一些,但是所得也多。有多少付出就有多少收获。
0 请登录后投票
   发表时间:2006-12-31  
引用
请问你的系统中有没有Domain Model,还是仅仅按照RowSet来做的?你SELECT的时候没有把所有Domain Model的字段取出来


当然有了,Domain Object 是最近本的东西。

但是有的时候,比如说我只需要列出用户名的列表,而用户这个表有很多字段(几十个?),这个时候,我提到的 3.2 的方式就非常棒了。

0 请登录后投票
   发表时间:2006-12-31  
如果表里有几十个字段,那么大部分时候应该重构一下数据库……我觉得以可能把Domain Model当Value Object用了……
0 请登录后投票
   发表时间:2006-12-31  
引用
如果表里有几十个字段,那么大部分时候应该重构一下数据库……我觉得以可能把Domain Model当Value Object用了…


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

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

用 hibernate 的话,你又不能把这两个字段设置为 lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出 ibatis 的好处了
0 请登录后投票
   发表时间:2006-12-31  
jiming 写道

但是有的时候,比如说我只需要列出用户名的列表,而用户这个表有很多字段(几十个?),这个时候,我提到的 3.2 的方式就非常棒了。



Hibernate也可以只取部分字段的,如“SELECT new UserName(c.userName) FROM customer c”,自己写一个普通JavaBean的UserName类,其中包括 new UserName(String name)的构造方法就可以了。这样也比较OO些
0 请登录后投票
   发表时间:2006-12-31  
leelun 写道
jiming 写道

但是有的时候,比如说我只需要列出用户名的列表,而用户这个表有很多字段(几十个?),这个时候,我提到的 3.2 的方式就非常棒了。



Hibernate也可以只取部分字段的,如“SELECT new UserName(c.userName) FROM customer c”,自己写一个普通JavaBean的UserName类,其中包括 new UserName(String name)的构造方法就可以了。这样也比较OO些

在User里加一个构造函数也就行了。
public User(String name){
}
0 请登录后投票
   发表时间:2006-12-31  
together 写道
leelun 写道
jiming 写道

但是有的时候,比如说我只需要列出用户名的列表,而用户这个表有很多字段(几十个?),这个时候,我提到的 3.2 的方式就非常棒了。



Hibernate也可以只取部分字段的,如“SELECT new UserName(c.userName) FROM customer c”,自己写一个普通JavaBean的UserName类,其中包括 new UserName(String name)的构造方法就可以了。这样也比较OO些

在User里加一个构造函数也就行了。
public User(String name){
}

这种写法应该是主要为了提高性能的一种手段,感觉不大OO了,本来是一个User对象,现在莫名奇妙的多了UserName,UserAddress等,而这些多出来的对象仅仅是为了能够少查询几个字段.
0 请登录后投票
论坛首页 入门技术版

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