`

Ibatis or Hibernate or Spring jdbcTemplate?

阅读更多

为什么使用ibatis而不用spring jdbcTemplate

 

1:ibatis仅仅是对jdbc薄薄的一层封装,完全不丧失sql的灵活性 

2:ibatis所有的sql都可以放在配置文件中,这样有利于sql的集中管理,特别是在sql tuning是很容易把得到所有的sql,如果使用spring jdbctemplate,那么难免要在sql adv上调试好了sql,然后在粘贴到java代码中,会有一大堆的StringObj+=和 StringBufferObj.append() ,如果sql 很长,那么总是copy , paste 也很烦,ibatis没有这样的问题。 

3:ibatis可以把查出的结果集自动mapping成po,不用写一行代码,只需配置一下ResultMap参数即可,而jdbcTemplate大多数情况都要手动的mapping或者实现MappingSqlQuery,ResultSetExtractor等,无论如何都要编程,这些都是体力活,如果使用了ibatis,这些体力活完全可以省去。 

4:ibatis内置cache机制,同时还可以和osCache集成,cache的也是可以配置的,如果配置得当可以大大提高程序性能。 

5:ibatis支持动态sql,不需要在java里有那么多if, else,完全可配置

 

 

 

为什么用ibatis不用Hibernate?

 

  我已经用了hibernate好多年了,现在也要转型,因为hibernate多变查询的表现实在太差还有一查就是一个表所有字段要么就是自己写构造函数 查询时候new 我感觉太失去灵活性了,无法接受,虽然我们现在还是用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。

分享到:
评论

相关推荐

    Spring中文帮助文档

    2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)...

    Spring-Reference_zh_CN(Spring中文参考手册)

    11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口 11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack Thierry Templier Erwin ...

    Spring 2.0 开发参考手册

    11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口 11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. ...

    spring in action英文版

     4.6 Spring和iBATIS  4.6.1 配置SQL Map  4.6.2 使用SqlMapClientTemplate  4.7 Spring和OJB  4.8 小结  第5章 事务管理  5.1 理解事务  5.1.1 仅用4个词解释事务  5.1.2 理解Spring对...

    simplejee-面向j2ee初学者的开源项目

    * 包括jsp,servlet,html,javascript,css等,以及springmvc+jdbcTemplate和 struts2+hibernate+spring, struts2+ibatis+spring 实现的登陆,CRUD,jfreechart图表显示等例子,用来演示两个mvc框架的基本使用,...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    java 通用数据访问层dal

    java dal 封装的通用dao 数据访问层,如果你不喜欢用Hibernate、Mybaits这类ORM框架,喜欢Spring JdbcTemplate或DbUtils,那么可以试试这个封装的通用dal

    Hitis-src-1.0.jar

    (4)在Hitis中,你可以与spring无缝集成,借助于JdbcTemplate,你可以快速封装出自己的dao层 (5)在ibatis中,想做物理分页,你必须在写一个列表sql,还要写一个90%一样的总页数的sql,不仅如此,你还要在列表sql外包...

    Hitis V1.2

    (4)在Hitis中,你可以与spring无缝集成,借助于JdbcTemplate,你可以快速封装出自己的dao层 (5)在ibatis中,想做物理分页,你必须在写一个列表sql,还要写一个90%一样的总页数的sql,不仅如此,你还要在列表sql外包...

    Hitis V1.2.2

    (4)在Hitis中,你可以与spring无缝集成,借助于JdbcTemplate,你可以快速封装出自己的dao层 (5)在ibatis中,想做物理分页,你必须在写一个列表sql,还要写一个90%一样的总页数的sql,不仅如此,你还要在列表sql外包...

    Hitis V1.1

    (4)在Hitis中,你可以与spring无缝集成,借助于JdbcTemplate,你可以快速封装出自己的dao层 (5)在ibatis中,想做物理分页,你必须在写一个列表sql,还要写一个90%一样的总页数的sql,不仅如此,你还要在列表sql外包...

    Hitis V1.2.1

    (4)在Hitis中,你可以与spring无缝集成,借助于JdbcTemplate,你可以快速封装出自己的dao层 (5)在ibatis中,想做物理分页,你必须在写一个列表sql,还要写一个90%一样的总页数的sql,不仅如此,你还要在列表sql外包...

    Hitis V1.1.1

    (4)在Hitis中,你可以与spring无缝集成,借助于JdbcTemplate,你可以快速封装出自己的dao层 (5)在ibatis中,想做物理分页,你必须在写一个列表sql,还要写一个90%一样的总页数的sql,不仅如此,你还要在列表sql外包...

    JdbcTemplateTool.zip

    Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个...

    java的轻量级orm工具包jdao.zip

    在jdao底层,目前有spring的jdbcTemplate实现与我自己封装的jdaoHandlerImpl实现。jdao有支持事务,支持批量插入数据等特性。同时jdao底层数据库操作提供接口,编程人员可以自己实现。 如果你觉得hibernate,ibatis...

    DBKING使用指南

     这类工具已经很多了,比如大家耳熟能详的Hibernate、iBatis,包括Apache的DBUtils、Spring的JdbcTemplate。为什么我们还要推出db-unifier这样一个功能类似的东西呢?  这些工具的主要目的都是对JDBC进行包装...

Global site tag (gtag.js) - Google Analytics