转自:http://blog.sina.com.cn/s/blog_4e122966010089a1.html
本文并非对比iBatis和Hibernate哪个好哪个坏。只是希望能为大家在使用时提供一个参考。俗话说得好,适合自己的就是最好的!
70%以上的项目开发的瓶颈在项目需求和开发者的效率上。而非执行效率。
80%以上的项目不需要在各种数据库间移植。
90%采用关系型数据库项目中都要用到特定数据库的sql语句。
如果您认同本人的上述粗略假定的话,那我认为:
60%以上的项目中iBatis更适合!
那为什么那?废话少说,现在直入主题:
1. iBatis 易于掌握。拿来文档看少则两天多则一周就可以掌握。
Hibernate 可能需要 3 倍以上的时间来掌握。
2. iBatis 更容易写 sql
Hibernate 生成的 HSQL 最终还是要翻译成native的SQL语句来执行。而这种翻译不总是那么顺利的,这种不顺利表象的一方面是开发者不一定能很好知道怎么写HSQL,另一方面是Hibernate本身对HSQL到native SQL的翻译也有些不顺利的地方。
我想在这里强调一下我的经验,一般系统稍微复杂一点儿的商务查询都多多少少使用了一些native的SQL语句(如:Oracle专用,MySQL专用等)。
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[],但是这样的话就可能会产生大量的多余 class。map/object[] 的方式应该不错,我比较喜欢这种方式。
3.3 如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对
象 select 出来,然后再做 update。这对数据库来说就是两条 sql。而 iBatis
只需要一条 update 的 sql 就可以了。减少一次与数据库的交互,对于性能的
提升是非常重要。
4. 开发方面
4.1 开发效率上,两者在初期coding时差别不大,但在debug时会有些差距。因为iBatis采用的是native SQL,所以可以直接拷贝SQL代码到数据库的命令行中调试。而Hibernate则要不断的考虑HSQL或配置最终翻译成怎样的native SQL,然后在考虑这些SQL执行结果是否正确。
4.2 可维护性方面,我觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到
单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保存
sql/hql。
当然 iBatis 也有比较大的缺点
1. 不同数据库类型的支持不好,如果你要开发的系统是要在对中数据间移植,那可能用 hibernate 比较好。
2. 缺省的 cache 支持不好,但是 hibernate 的 cache 支持其实也不是很好,而且很复杂。尤其是对于大并发量的应用。所以我更倾向于自己管理 cache。
相关推荐
Spring MVC、Hibernate和iBatis是Java开发中常用的三大框架,它们在Web应用程序开发中各自承担着不同的职责。本教程将深入探讨这三个框架的核心概念、使用方法以及它们之间的协同工作。 **Spring MVC** 是Spring...
struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+...
Hibernate 提供了强大的ORM能力,可以自动处理对象的持久化,而iBatis则允许更精细的SQL控制,尤其在复杂的查询和性能优化时更有优势。 在这个项目中,可能的实现方式是: 1. **配置Spring**:Spring作为整个项目...
Struts2、Hibernate、Spring 和 iBatis 是四个在Java Web开发中广泛应用的开源框架,它们的整合常常被称为SSH(Struts2、Spring、Hibernate)或者SHiP(Struts2、Hibernate、iBatis、Spring)。这个"struts2+...
SQL是Structured Query Language的缩写,是用于管理和处理关系数据库的标准语言。在IT行业中,熟练掌握SQL对于数据的...在实践中不断学习和应用,将理论知识转化为实际技能,对于提升软件开发效率和质量具有重要意义。
1. **易用性**:iBATIS 简单易学,而 Hibernate 的复杂度相对较高,需要更多的时间去理解和掌握。 2. **适用场景**:如果数据库结构固定,且对性能有极高要求,iBATIS 由于其灵活的手动 SQL 控制,可能更适合。反之...
sql讲解详细、实用、有用例、带源码。
Struts2、Hibernate、Spring和iBatis是Java开发中非常重要的四个框架,它们在企业级应用开发中占据着核心地位。以下是对这些框架的详细解释和相关知识点: 1. **Struts2**:Struts2是一个基于MVC(Model-View-...
Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatis 只需要导入相应的jar包就行了 ,数据库是mysql :数据库名叫做mydatabase,表名...
### iBatis与Hibernate的主要区别 #### 一、概述 iBatis与Hibernate都是Java领域内流行的ORM(Object-Relational Mapping,对象关系映射)框架,用于简化Java应用程序与数据库之间的交互。尽管它们有着相似的目标,...
Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...
在IT行业中,Spring、Hibernate和Ibatis是三个非常重要的框架,它们各自在不同的领域发挥着重要作用。Spring是一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等功能;...
3. **iBatis**:iBatis也是一个ORM框架,但它比Hibernate更轻量级。它主要关注SQL查询,将SQL语句与Java代码分离,使得SQL的编写更加灵活。iBatis允许开发者直接写SQL,然后在配置文件中绑定到Java对象,从而实现...
【ibatis和Hibernate的区别】 在Java开发中,ibatis和Hibernate都是常见的对象关系映射(ORM)框架,它们简化了数据库操作,将Java对象与数据库表之间的映射关系抽象出来,使得开发人员可以使用面向对象的方式处理...
这个框架主要struts2+hibernate+spring+ibatis+ext整合,不要说hibernate和ibatis整合是多此一举哦,当你想用hibernate时把ibatis取了,用ibatis时把hibernate取了就可以了,这样很方便的!
### ibatis和Hibernate的简单介绍 #### 一、ibatis简介 ibatis是Apache软件基金会的一个开源项目,它提供了一种轻量级的Java持久层框架。ibatis的核心功能是将SQL语句与Java代码分离,使开发人员可以更加专注于...
与Hibernate不同,iBatis不提供完整的ORM解决方案,而是将SQL和Java代码分离,使开发者有更大的灵活性来定制SQL查询。 这四个框架的集成通常按照以下步骤进行: 1. 配置Struts1:设置struts-config.xml,定义...
1. **学习曲线:**iBatis 相比 Hibernate 学习成本更低。 2. **资源消耗:**iBatis 在资源消耗方面通常优于 Hibernate。 3. **系统适应性:**在系统结构变化频繁的场景下,iBatis 更加适合。 4. **性能优化:**对于...
标题 "IBatisVSHibernate" 暗示了我们将探讨两个知名的Java持久层框架——IBatis和Hibernate之间的差异和特点。这两个工具都是用于简化数据库操作的框架,但在设计理念和使用方式上有所不同。 **IBatis** 是一个轻...