分类: IBATIS HIBERNATE2010-11-19 17:58 341人阅读 评论(0) 收藏 举报
我在最初的选型的时候是打算选择 Hibernate 的,在研究的过程中发现了 iBatis,经过 分析比较之后我选择了 iBatis。现在我已经使用 iBatis 完成了一个中小型的 ... -
  我在最初的选型的时候是打算选择 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。

转至:http://www.itchinese.com/plus/view-152560-1.html

Ibatis和Hibernate的比较的更多相关文章

  1. IBatis和Hibernate区别

    1. 简介 Hibernate是当前最流行的O/R mapping框架.它出身于sf.net,现在已经成为Jboss的一部分了.iBATIS是另外一种优秀的O/R mapping框架,现已改名叫myB ...

  2. iBatis & myBatis & Hibernate 要点记录

    iBatis & myBatis & Hibernate 要点记录 这三个是当前常用三大持久层框架,对其各自要点简要记录,并对其异同点进行简单比较. 1. iBatis iBatis主 ...

  3. MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程

    虽然MySQL的存储过程,一般情况下,是不会使用到的,但是在一些特殊场景中,还是有需求的.最近遇到一个sql server向mysql迁移的项目,有一些sql server的存储过程需要向mysql迁 ...

  4. 【发问】代表ODBC、Ibatis 发问 Hibernate、Linq、Entity、JPA

    分页: 多表关联查询: 多表操作 临时表: 存储过程式长语句 : Hibernate与iBATIS的比较 博客分类: db iBATISHibernateSQL数据结构ORM  1.出身 hibern ...

  5. ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解

    这个项目的底层是用ibatis框架完毕,这几天也是都在用这个框架写代码,也有了一些简单的理解,把项目拿过来后基本的配置都已经配置好了,比方一些事务.日志控制等,在开发中主要用到的是写SQL语句以及熟悉 ...

  6. iBatis与Hibernate有什么不同?

    相同点:屏蔽jdbc api的底层访问细节,使用我们不用与jdbc api打交道,就可以访问数据. jdbc api编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节 ...

  7. ibatis和hibernate

    ibatis:sql需要自己写hibernate:sql自动生成上面是最大的区别,下面是一些细节.选择Hibernate还是iBATIS都有它的道理:Hibernate的特点:Hibernate功能强 ...

  8. SSI框架【Struts、Spring、iBatis、Hibernate】

    1.B/S架构的JavaEE开发设计模式,JavaEE架构分成三个层次即表现层.业务逻辑层.数据持久层:而这三层分别通过Struts.Spring.iBatis开源的框架紧密组合在一起的. Strut ...

  9. Hibernate和IBatis对比

    [转自]http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也 ...

随机推荐

  1. 概率论:假设检验-t检验和Augmented Dickey–Fuller test

    http://blog.csdn.net/pipisorry/article/details/51184556 T检验 T检验,亦称student t检验(Student's t test),学生t检 ...

  2. Android性能优化之Bitmap的内存优化

    1.BitmapFactory解析Bitmap的原理 BitmapFactory提供的解析Bitmap的静态工厂方法有以下五种: Bitmap decodeFile(...) Bitmap decod ...

  3. Android:ADB server didn't ACK或者adb server is out of date. killing解决办法

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 出现这个原因我个人感觉有两个.一.5037端口被别的程序或者进程占用:二.adb占用的不是5037端口.很多人仅仅知道第一种二忽 ...

  4. CSS 控制table 滑动及调整列宽等问题总结

    一. 通过css控制table y方向上滚动 html中没有滚动条,可以根据overflow属性的scroll来对table显示不完全的内容进行滚动. 只是y方向上滚动,很简单,只要设置div的hei ...

  5. 利用openssl管理证书及SSL编程第2部分:在Windows上编译 openssl

    利用openssl管理证书及SSL编程第2部分:在Windows上编译 openssl 首先mingw的环境搭建,务必遵循下文: http://blog.csdn.net/ubuntu64fan/ar ...

  6. android studio签名

    1.Build -> Generate Signed APK...,打开如下窗口 2.假设这里没有打过apk包,点击Create new,窗口如下 这里只要输入几个必要项 Key store p ...

  7. [Asp.Net]Understanding Built-In User and Group Accounts in IIS

    昨天把程序IIS6迁移到IIS7,出现异常 解决办法:文件夹选项权限增加IIS_IUSER 资料来源: http://www.iis.net/learn/get-started/planning-fo ...

  8. Dynamics CRM 同一实体多个Form显示不同的Ribbon按钮

    自CRM2011引入多FORM窗体,并且对不同的窗体引入了角色控制,给我们的客制化开发带来了多样化,既然有了多窗体也就理所当然的有了在不同的窗体显示不同的Ribbon按钮的需求,具体怎么做见下面的博客 ...

  9. Linux进程模型

    ----原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/08/01/2617884.html------ Linux进程通过一个task_st ...

  10. 【嵌入式开发】C语言 指针数组 多维数组

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21402047 . 1. 地址算数运算示例 指针算数运算 ...