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

iBatis与Hibernate比较

阅读更多
我在最初的选型的时候是打算选择 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。
分享到:
评论
3 楼 w846492130_1 2011-09-22  
自我感觉 hibernate 的自学不太好弄 尤其是找不到一本适合自己的书 很是头疼
还有一点就是 hibernate好像也可以写sql 只是我现在还不知道怎么写 很头疼
楼主的观点 基本支持 呵呵
2 楼 日光倾城。 2010-07-01  
嗨嗨,我学习hibernate的时候是糊里糊涂的,但是最终还是学懂了,不过感觉hibernate不是人人都可以用的,还是ibatis比较好!
1 楼 blackstreet 2009-09-09  
我也喜欢IBATIS,一直在用,有点比较喜欢,不指定resultMap的情况下,他会返回一个hashMap 的集合,通过KEY取字段,get set的BEAN类都不用了.爽!

相关推荐

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

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

    ibatis和hibernate的区别

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

    ibatis和hibernate的简单介绍

    #### 三、ibatis与Hibernate的区别 1. **设计理念**: - **ibatis**:强调对SQL语句的控制,更适合对性能有较高要求的应用。 - **Hibernate**:更注重对象模型的映射,适合于需要快速开发的应用。 2. **学习曲线...

    ibatis与hibernate的区别

    ### ibatis与hibernate的区别 #### 一、概述 在Java开发领域中,持久化技术是连接应用程序与数据库之间的重要桥梁。其中,ibatis(现称为MyBatis)和Hibernate作为两种主流的对象关系映射(Object Relational ...

    iBatis和Hibernate的区别

    ### iBatis与Hibernate的主要区别 #### 一、概述 iBatis与Hibernate都是Java领域内流行的ORM(Object-Relational Mapping,对象关系映射)框架,用于简化Java应用程序与数据库之间的交互。尽管它们有着相似的目标,...

    Ibatis和Hibernate的分析比较

    1. 自动化程度:Hibernate提供全面的ORM,自动转换对象与数据库记录,而Ibatis则更灵活,允许自定义SQL。 2. 性能:由于Ibatis允许直接编写SQL,所以在某些情况下,其性能可能优于Hibernate,尤其是在复杂的查询和...

    IBatisVSHibernate

    标题 "IBatisVSHibernate" 暗示了我们将探讨两个知名的Java持久层框架——IBatis和Hibernate之间的差异和特点。这两个工具都是用于简化数据库操作的框架,但在设计理念和使用方式上有所不同。 **IBatis** 是一个轻...

    对IBatis分页的改进,使ibatis支持hibernate式的物理分页

    公司的大部分项目都开始使用IBatis作为O/R Mapping了,但是在使用的过程中也发现了很多不方便和存在...想了很多办法,都没能很好的避免这个问题,无意间在javaeye上看到了《使ibatis支持hibernate式的物理分页》这篇文章,

    选用ibatis和hibernate的区别

    **选用Ibatis与Hibernate的区别**: 1. **灵活性**:Ibatis允许直接编写SQL,适合复杂的查询和性能优化。Hibernate则倾向于自动化,可能在复杂查询方面不够灵活。 2. **学习曲线**:Hibernate提供了全套的ORM解决...

    ibatis和hibernate配置以及比较

    4. 运行效率:不考虑缓存的情况下,iBatis通常比Hibernate更快,因为它减少了与数据库的交互次数。但若需考虑缓存,两者都有各自的局限,且管理起来较为复杂。 5. 数据库支持:iBatis对不同数据库的支持不如...

    ibatis,hibernate 中文参考文档

    在IT行业中,数据库持久化是开发过程中的关键环节,Ibatis和Hibernate是两种广泛使用的Java持久层框架。它们都致力于简化数据库操作,让开发者能够更专注于业务逻辑而不是繁琐的SQL语句编写。以下是对这两个框架的...

    iBatisVSHibernate

    iBatis VS Hibernate iBatis不亚于Hibernate

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

    标签“Ibatis,hibernate与spring集成配置”进一步强调了这个主题的重点。Spring作为容器,可以管理Hibernate和Ibatis的生命周期,通过Spring的DataSource、SessionFactory和SqlSessionFactoryBean等组件,实现对这...

    springMVC+ibatis+hibernate+spring+boostrap框架

    iBatis 可以与 ORM(对象关系映射)框架如 Hibernate 配合使用,提供更高效的 SQL 执行。 3. Hibernate: Hibernate 是一个流行的 ORM 框架,它自动处理了数据库操作,使得开发者可以使用 Java 对象进行操作而无需...

    struts2-spring-ibatis-hibernate(hibernate与ibatis集成)

    Struts2、Spring、iBatis 和 Hibernate 是四个在 Java Web 开发中广泛使用的开源框架。这个项目将它们集成为一个整体,为初学者提供了一个学习和理解这些技术如何协同工作的实例。 **Struts2** 是一个基于 Model-...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    4. **Ibatis**:与Hibernate相比,Ibatis更轻量级,它将SQL语句直接写在配置文件或Java代码中,提供了更灵活的控制。Ibatis更适合那些需要对SQL有高度定制需求的项目。 在`stm-ssh`和`SSHdemo`中,可能包含的是...

    mybatis,ibatis,hibernate 显示查询SQL

    在IT行业中,数据库操作是应用程序开发的核心部分,而MyBatis、iBatis和Hibernate都是流行的Java持久层框架,它们简化了与数据库交互的过程。这三个框架各有特点,但都提供了ORM(对象关系映射)机制,帮助开发者将...

    ibatis_hibernate3.5_lib.zip

    hibernate下载 : http://sourceforge.net/projects/hibernate/files/hibernate3/--3.XX版本 ...比如:ibatis-2.3.0.677.jar, spring 可在下载你需要的版本: http://www.springsource.org/download

    SpringMVC+jbpm+ibatis+Hibernate框架

    在SpringMVC项目中,iBatis可以作为数据访问层,提供数据查询和存储功能,与Hibernate一起形成双数据库架构。 Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用与关系数据库之间的交互。Hibernate通过...

Global site tag (gtag.js) - Google Analytics