该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-31
iBATIS对于短期项目来说的话好点,如果对于长期项目来说还是用Hibernate来做比较好,呵呵,个人看法,只是一点最表面的!
|
|
返回顶楼 | |
发表时间: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,使多数据库版本的规模不大的产品的实现更加容易 |
|
返回顶楼 | |
发表时间: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的字段取出来 |
|
返回顶楼 | |
发表时间:2006-12-31
简而言之,如果项目团队不习惯OO,还是老实地用jdbc或者ibatis。
学习HB虽然会痛苦一些,但是所得也多。有多少付出就有多少收获。 |
|
返回顶楼 | |
发表时间:2006-12-31
引用 请问你的系统中有没有Domain Model,还是仅仅按照RowSet来做的?你SELECT的时候没有把所有Domain Model的字段取出来 当然有了,Domain Object 是最近本的东西。 但是有的时候,比如说我只需要列出用户名的列表,而用户这个表有很多字段(几十个?),这个时候,我提到的 3.2 的方式就非常棒了。 |
|
返回顶楼 | |
发表时间:2006-12-31
如果表里有几十个字段,那么大部分时候应该重构一下数据库……我觉得以可能把Domain Model当Value Object用了……
|
|
返回顶楼 | |
发表时间:2006-12-31
引用 如果表里有几十个字段,那么大部分时候应该重构一下数据库……我觉得以可能把Domain Model当Value Object用了… 我是举了一个极端点的例子。比如说有8个字段,其中有一两个比较大的字段,varchar(255)/text。 这个时候我为什么要把这两个大的字段取出来呢? 用 hibernate 的话,你又不能把这两个字段设置为 lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出 ibatis 的好处了 |
|
返回顶楼 | |
发表时间:2006-12-31
jiming 写道 但是有的时候,比如说我只需要列出用户名的列表,而用户这个表有很多字段(几十个?),这个时候,我提到的 3.2 的方式就非常棒了。 Hibernate也可以只取部分字段的,如“SELECT new UserName(c.userName) FROM customer c”,自己写一个普通JavaBean的UserName类,其中包括 new UserName(String name)的构造方法就可以了。这样也比较OO些 |
|
返回顶楼 | |
发表时间: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){ } |
|
返回顶楼 | |
发表时间: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等,而这些多出来的对象仅仅是为了能够少查询几个字段. |
|
返回顶楼 | |