`
a47313198
  • 浏览: 16538 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转载:Hibernate和iBATIS比较

阅读更多
Hibernate和iBATIS比较(摘自网络)


-----------------------------------------------------------------------------------------------------------------------------------------------------


Hibernate  VS  iBATIS

首先这个题目有点哗众取宠,呵呵,故意的.

参考了网上许多前辈的见解,然后加了自己一点点的理解.如果有什么板砖,欢迎来拍 chinaewolf@gmail.com
简介

Hibernate 是当前最流行的O/R mapping框架,当前版本是3.05。它出身于sf.net,现在已经成为Jboss的一部分了



iBATIS 是另外一种优秀的O/R mapping框架,当前版本是2.0。目前属于apache的一个子项目了。



相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。



Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。



而iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。

使用iBATIS 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,

这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言,iBATIS 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。


二者的对比:

1.  iBATIS非常简单易学,Hibernate相对较复杂,门槛较高。


2.  二者都是比较优秀的开源产品


3.  当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合


4.  系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。


5.  iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。


6.  以数据库字段一一对应映射得到的PO和Hibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。


7.  Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS


8.  最关键的一句话是iBATIS的作者说的:

If you are starting a new project and you're in full control of your object model and database design, Hibernate is a good choice of O/R tool.

If you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That's were an SQL Mapper comes in handy

结论:
结论:

Hibernate 和iBATIS可以说是互相补充,共同发展的关系.具体你想用什么要看实际情况.如果看了上面的文字还是拿不定注意,那就Just to try it.实践是检验真理的唯一标准.鞋合不合适,只有试了才知道

说明:本文转自:http://blog.csdn.net/hero272285642/archive/2008/04/25/2327887.aspx


-----------------------------------------------------------------------------------------------------------------------------------------------------
选择Hibernate还是iBatis?

关键字: hibernate ibatis
选择Hibernate还是iBATIS都有它的道理:

Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。

Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。

iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。

iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

我的建议就是:

如果你的团队没有Hibernate高手,那么请用iBATIS,要把Hibernate用好,并不容易;否则你应该选择Hibernate,那样你的开发速度和代码简洁性都相当棒!

BTW:

我觉得rails的ActiveRecord是平衡性做的最好的,避免了Hibernate的复杂性和学习HQL的成本,同时具备iBATIS即学即用的简单性。


说明:本文转自:http://robbin.iteye.com/blog/24529


-----------------------------------------------------------------------------------------------------------------------------------------------------


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

关键字: Hibernate
[注意]清在回复之前认真地看一下我的帖子,结合你的实际项目经验考虑一下,看看你是否能比较好地解决我所提出的Hibernate 的缺点。最好不要提一些大家都知道的泛泛的观点,这样会很浪费读者的时间并且分散大家的注意力。

非常感谢有几位对 hibernate 有深入了解的朋友给出了我这里提出的问题的 hibernate 解决方案。我提出这几个问题的初衷不是说 hibernate 无法实现这些功能。而是说他的实现比较不美,呵呵。比如说把一些 sql 嵌入到 java 代码中,我觉得这是非常不好的习惯。

v0.3 - 2007-1-1 21:1:1



我在最初的选型的时候是打算选择 Hibernate 的,在研究的过程中发现了 iBatis,经过
分析比较之后我选择了 iBatis。现在我已经使用 iBatis 完成了一个中小型的项目。这个
项目在性能、可维护性、可扩展性方面都非常令我满意。

在这个过程中我也不断的与使用过或者正在使用 Hibernate 的人进行过探讨。而且我本身
也在不断的跟进 Hibernate 的发展。

最终,我的结论是 iBatis 的选择非常正确,而且越用越喜欢它了。

当然了,我对 Hibernate 的理解还是非常有限的,所以这里的关于 Hibernate 的一些观
点的错误之处希望能够得到 Hibernate 高手的指正。


1. iBatis 易于掌握。拿来文档看半天到两天就可以掌握了。
Hibernate 可能需要 3 倍以上的时间来掌握。

2. iBatis 更容易进行 sql 的 优化。

这个应该大家都有共识了。另外 Hibernate 生成的 sql 也实在是太难看了。鉴
于有的朋友提到了 sql 不太重要。我想在这里强调一下我的经验,一般系统性能
的瓶颈都在数据库上。所以这一点是 iBatis 非常重要的一个优势。

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

3.1 比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中
的一个字段,iBatis 很简单,执行一个sql
UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id#
但是用 Hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段。
当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确
定这个功能的负面效果。

3.2 我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据
库读很多数据,节省流量
SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...

3.2.1 一般情况下
Hibernate 会把所有的字段都选出来。比如说有一个上面表有8个字段,
其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他
们也选出来呢?

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

3.2.3 Hibernate 还有一个方案,就是生成 javabean/map/object[](感谢
leelun/cjmm),但是这样的话就可能会产生大量的多余 class。map/object[] 的方式
应该不错,我比较喜欢这种方式。

3.3 如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对
象 select 出来,然后再做 update。这对数据库来说就是两条 sql。而 iBatis
只需要一条 update 的 sql 就可以了。减少一次与数据库的交互,对于性能的
提升是非常重要。

4. 开发方面
4.1 开发效率上,我觉得两者应该差不多
4.2 可维护性方面,我觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到
单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保存
sql/hql。


5. 运行效率
5.1 在不考虑 cache 的情况下,iBatis 应该会比hibernate 快一些或者很多
(根据实际情况会有所不同)。



当然 iBatis 也有比较大的缺点
1. 不同数据库类型的支持不好,如果你要开发的系统是要在对中数据间移植,那可能用 hibernate 比较好。
2. 缺省的 cache 支持不好,但是 hibernate 的 cache 支持其实也不是很好,而且很复杂。尤其是对于大并发量的应用。所以我更倾向于自己管理 cache。


非常感谢这么多朋友对这个话题很感兴趣。但是我感觉大家并没有对我第三部分提到的问题进行更深入的思考。我晚些时候会提交一些 ibatis 的代码。欢迎大家一起来讨论。


说明:本文转自:http://jiming.iteye.com/blog/41720
分享到:
评论

相关推荐

    spring与hibernate以及ibatis集成的实例和具体配置图解

    4. 配置Ibatis:编写Mapper接口和XML映射文件,设置SqlSessionFactory的配置。 5. 在Spring中管理DAO:创建DAO接口,实现这些接口并使用@Autowired注解注入SessionFactory或SqlSessionFactory。 6. 测试:编写测试...

    struts1+spring+hibernate+ibatis集成

    5. 使用Spring管理Hibernate和iBatis:通过Spring的HibernateDaoSupport或SqlSessionTemplate来实现对持久层的调用。 6. 测试和调试:确保所有组件协同工作,处理可能出现的依赖冲突和配置问题。 这种集成方式的...

    将Hibernate和iBatis两Orm框架整合,取长补短

    在Java开发领域,ORM(Object-Relational Mapping)框架如Hibernate和iBatis是常见的数据库操作工具。这两者各有特点,Hibernate提供了强大的对象关系映射功能,而iBatis则以其灵活的SQL编写和良好的性能著称。将...

    ibatis 与hibernate之间的比较优点和缺点

    ### ibatis 与 hibernate 之间的比较:优点和缺点 #### 概述 在 Java 开发领域中,对象关系映射(Object Relational Mapping,简称 ORM)是一种将面向对象编程语言中的对象模型与数据库系统中的关系模型相互转换的...

    hibernate与ibatis比较的11大优势

    7. **代码生成工具**:Hibernate提供了一系列强大的代码生成工具,包括基于XML配置和注解的实体类自动生成功能。尤其是注解的支持,大大简化了配置过程,使得开发者可以将更多精力集中在业务逻辑的实现上。而iBatis...

    springmvc_hibernate_ibatis_jdbc

    在SpringMVC、Hibernate和iBatis中,JDBC通常作为底层的数据访问层,为上层框架提供基础的数据库操作支持。 5. **Java框架**:这些技术组合在一起,形成了一套完整的Java开发框架。它们可以帮助开发者快速地搭建...

    iBatis和Hibernate的区别

    iBatis和Hibernate各有优劣,选择哪个框架取决于具体项目的需求。对于需要高度定制化SQL查询的项目,iBatis可能是更好的选择;而对于追求快速开发、希望减少手工编码量的项目,Hibernate则更为合适。最终的选择应当...

    Hibernate和IBatis对比

    5. **对象模型**:Hibernate支持更复杂的对象模型,如继承关系、多态性等,而iBATIS则更偏向于简单的对象-关系映射。 #### 四、应用场景 - **新项目**:如果你正在启动一个新项目,并且可以完全控制对象模型和...

    开发指南(spring,hibernate,ibatis,webwork)

    这四者在实际项目中经常结合使用,Spring可以整合Hibernate和iBatis作为数据访问层,而WebWork(或Struts2)则可以与Spring结合,形成强大的Web应用架构。`Manning@2007 - Spring in Action(2nd Edition).pdf`和`...

    Spring MVC+Hibernate&Ibatis学习 例子 教程

    Spring MVC、Hibernate和iBatis是Java开发中常用的三大框架,它们在Web应用程序开发中各自承担着不同的职责。本教程将深入探讨这三个框架的核心概念、使用方法以及它们之间的协同工作。 **Spring MVC** 是Spring...

    ibatis和hibernate的简单介绍

    3. **团队技能**:如果开发团队对ibatis比较熟悉,那么选择ibatis可以更快地上手并减少培训成本。 4. **成本考虑**:ibatis的使用成本通常较低,尤其是在开发资源有限的情况下,这是一个重要的考虑因素。 5. **项目...

    Ibatis和Hibernate的分析比较

    3. 学习曲线:Hibernate的全面性使得学习成本较高,而Ibatis的“半自动化”特性使得学习相对简单,但可能需要开发者有较强的SQL功底。 4. 缓存和事务管理:两者都支持缓存和事务,但Hibernate内置了更强大的管理机制...

    hibernate和ibatis的区别

    主要描述的是hibernate和ibatis的区别,在什么时候使用hibernate比较好

    ibatis和hibernate的区别

    【ibatis和Hibernate的区别】 在Java开发中,ibatis和Hibernate都是常见的对象关系映射(ORM)框架,它们简化了数据库操作,将Java对象与数据库表之间的映射关系抽象出来,使得开发人员可以使用面向对象的方式处理...

    Struts2 Spring Hibernate IBatis

    Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatis 只需要导入相应的jar包就行了 ,数据库是mysql :数据库名叫做mydatabase,表名...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...

    struts2+hibernate+ibatis整合

    Struts2、Hibernate和iBatis是Java Web开发中三个非常重要的开源框架,它们分别用于MVC(模型-视图-控制器)架构、对象关系映射(ORM)和SQL映射。将这三个框架整合在一起可以构建高效、灵活的Web应用程序。 **...

Global site tag (gtag.js) - Google Analytics