论坛首页 Java企业应用论坛

选择Hibernate还是iBatis?

浏览 76333 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-05-31  
zgd 写道
我想问问强烈建议ibatis的各位的分页是怎么处理的

是自己手工写分页sql

还是用ibatis里面的
rs.absolute(skipResults);

性能呢


这有什么难的?

对于小数据量,这个足以工作。
import com.ibatis.common.util.PaginatedList;
.......

    	PaginatedList list = this.getSqlMapClientTemplate();.queryForPaginatedList("Example.getAll", null, 2);;
    	while (true); {
    	    Iterator listIterator = list.iterator();;
    	    while (listIterator.hasNext();); {
    	        System.out.println(
    	            ((CD);listIterator.next(););.getId(););;
    	    }
    	    if( list.isNextPageAvailable(););
    	    {
    	    	System.out.println("page..."+list.getPageIndex(););;
    	                list.nextPage();;

    	    }
    	    else
    	        break;
    	}


对于大数据量,用来做分页的store procedure多了去了,此外某些数据库(SQL 2005, Oracle)还提供了提供对分页的特殊支持!!
例如对于mySQL

<select id="getByPage" parameterClass="java.util.Map" resultMap="result" cacheModel="Cache">
		SELECT * FROM cdbean LIMIT #start#,#offset#
</select>


在某些复杂应用,例如大数据量的多表级联查询,只有Store Procedure可以胜任。

使用Ibatis的目的是不是和数据库分离,而是更贴近数据库,而数据库独有的方式来解决问题。Ibatis的挑战是,你的队伍里不需要有Ibatis的专家,但要有数据库的专家。
0 请登录后投票
   发表时间:2006-05-31  
我们的项目目前倾向于直接从数据库中提取XML,Hibernate支持的倒是还可以,但是性能实在是。。。。。还有Bug。。。。。

IBatis对XML Mapping的支持基本上是Nothing,不能得到嵌套的结构,但是性能真是好啊,复杂结构大数据量的查询方面和Hibernate不在一个数量级上。考虑是不是自己改一下Ibatis ing...
0 请登录后投票
   发表时间:2006-05-31  
Artkai 写道


个人感觉最好自己手写分页sql,iBatis的这种处理方法性能上肯定会有影响的,如果iBatis能像hibernate那样自动判断不同的数据库封装不同的分页sql就好了....



IBatis的本意就是把这个工作交给熟悉DB的人,它提供了一个薄薄的界面,把程序员和数据库管理员分而治之,(除了少数人,大部人都是知晓程序或者数据库二者之一)。 对于SQL 2000和SQL2005,很容易写出不同的Page Store Procudure,而且不必对Java代码做任何修改。甚至对于某些legacy的DB,也没有什么困难。
0 请登录后投票
   发表时间:2006-06-01  
1)搂主既然是做产品,最好用 Hibernate,数据库移植很方便,开发速度也快。
2)如果关系数据库基础扎实,并且熟悉面对对象编程(即使java不是很熟悉),那么 Hibernate 学起来并不难,而且可以很快应用到项目中。
3)至于性能方面的担忧是多余的,最好是测试了之后再来考虑优化,况且 Hibernate 也支持存储过程,或者与 iBatis 结合使用。有一种说法是 80% 的性能开销在 20% 的代码上,性能优化应该是在找出了性能瓶颈之后再来进行。
4)如果单单使用 iBatis 的话,入门可能要快些,但是 SQL 编码量要大些。
我以前用 Powerbuilder 和 SQL 存储过程开发,现在用 Hibernate 两个月了,开发起来还比较顺手。
5)其实开发的难度很多是由于业务知识上的欠缺造成的,而使用 Hibernate 带来的好处是能让您从数据库存储逻辑中解放出来,关注领域类的设计和业务逻辑的实现。
6)补充一条,用 HQL 一样可以实现复杂的多表关联查询。
0 请登录后投票
   发表时间:2006-06-02  
请使用hibernte不到二年的朋友不要在这里误导别人。我可以直言不讳的说,hibernate非常差劲。不要被他那可爱的 ORM 诱惑了,否则将来你必受冲动的惩罚。
0 请登录后投票
   发表时间:2006-06-02  
shanghai 写道
请使用hibernte不到二年的朋友不要在这里误导别人。我可以直言不讳的说,hibernate非常差劲。不要被他那可爱的 ORM 诱惑了,否则将来你必受冲动的惩罚。


能否举出其“非常差劲”的应用例子,这里向您讨教,谢谢!
0 请登录后投票
   发表时间:2006-06-02  
最近为了修改Hibernate的XML Mapping问题,粗粗看了一下Hibernate的代码,发现Hibernate在对Join的支持部分所做的冗余操作很多,吃内存也吃的比较厉害。我做了一个测试,100 x 100 x 100的主从从结构,用Join返回一个主表对象(连同子表一共10000条记录),时间大约在10-14s。事实上SQL返回查询结果只需要2s。

用IBatis的话,同样的测试,返回结果的时间是2.5-2.8s,还是很理想的。

虽说绝大多数情况下,不会出现这样的查询。不过这个测试足以说明Hibernate映射代码的性能是不高的,只是小数据量不太复杂的对象结构下性能损失不明显而已。

题外话: Ibatis对HashMap结果的支持还是令人满意的。但是对XML的支持比较烂。这两天在看它的源代码,基本上已经搞懂了它的处理方式。事实上,IBatis目前尚不支持对Join结果生成嵌套的XML,不过修改起来也不是太大的问题。
0 请登录后投票
   发表时间:2006-06-02  
如果是新项目,还是用 Hibernate 为好,具体原因《深入浅出 Hibernate》中写得很详细。如果发现性能瓶颈,可以用 Hibernate 3 中新引入的自定义持久化实现机制,或者存储过程来解决。
0 请登录后投票
   发表时间:2006-06-03  
shanghai 写道
请使用hibernte不到二年的朋友不要在这里误导别人。我可以直言不讳的说,hibernate非常差劲。不要被他那可爱的 ORM 诱惑了,否则将来你必受冲动的惩罚。

没有论据的论点如何说服别人
0 请登录后投票
   发表时间:2006-06-04  
liuwangxia 写道
如果是新项目,还是用 Hibernate 为好,具体原因《深入浅出 Hibernate》中写得很详细。如果发现性能瓶颈,可以用 Hibernate 3 中新引入的自定义持久化实现机制,或者存储过程来解决。

在这种情况下它的ORM还有存在意义吗?
0 请登录后投票
论坛首页 Java企业应用版

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