`

Hibernate3和MyBatis(iBatis)的执行效率比较

    博客分类:
  • db
阅读更多
本文旨在提供一些真实的数据,供那些选择Hibernate3还是MyBatis做持久层的开发人员一个参考。数据在选择的时候,会删除一个最大值和最小值。

1.从代码的编写量
二者实现相同的功能:
Hibernate3持久层用了207行Java代码,14行映射文件,18行Hibernate配置文件
MyBatis持久层用了163行Java代码,36行映射文件,19行MyBatis配置文件
所以从编码的角度我比较推荐MyBatis,因为它将Java代码和Sql做了映射,编码非常清晰。当然对于复杂的sql,无论是Hibernate还是MyBatis,解决起来都够复杂的。

2.增加数据
Hibernate3增加1000条数据,平均每条耗时:27.6毫秒(具体数据:27000,26265,29609,27797,23938,30313,28375)
MyBatis增加1000条数据,平均每条耗时:28.4毫秒(具体数据:29079,29359,31016,26375,26281,32475,24375)
Hibernate3增加2000条数据,耗时61875毫秒,平均每条耗时30.9毫秒
MyBatis增加2000条数据,耗时55515毫秒,平均每条耗时27.7毫秒
Hibernate3增加5000条数据,耗时139500毫秒,平均每条耗时28.2毫秒
MyBatis增加5000条数据,耗时127672毫秒,平均每条耗时25.5毫秒
Hibernate3增加10000条数据,平均每条耗时28.1毫秒(具体数据:294922,274000,277109)
MyBatis增加10000条数据,平均每条耗时26.9毫秒(具体数据:260343,272687,270031)
综上:
Hibernate3增加44000条数据,共用时:1240703,平均每条耗时:28.1
MyBatis增加44000条数据,共用时:1185209,平均每条耗时:26.9
抓图如下:



3.删除数据
Hibernate3在44000条数据中,随机删除一条数据,耗时:41毫秒
MyBatis3在44000条数据中,随机删除一条数据,耗时:40.1毫秒
抓图如下:



4.修改数据
也许是测试次数太少,在修改这方面,我认为数据还是存在一定偏差。
Hibernate3随机修改一条数据,耗时:18.1毫秒
MyBatis随较修改一条数据,耗时:3.2毫秒
抓图如下:



5.查询数据
Hibernate3随机查询一条数据,耗时:12.2毫秒
MyBatis随较查询一条数据,耗时:5.6毫秒
抓图如下:



6.删除所有数据
Hibernate3删除45991条数据,耗时:812毫秒,平均每条56.6毫秒
MyBatis删除46259条数据,耗时:906毫秒,平均每条51.0毫秒
抓图如下:



7.回收表空间
Hibernate3回收表空间,耗时62毫秒
MyBatis回收表空间,耗时62毫秒
这里需要说一下的是,Hibernate3中不能利用映射删除表空间,只能直接执行sql,具体可以参考文章:http://javapub.iteye.com/blog/876147
所以二者的回收方法都是同时执行sql,自然速度一致。
抓图如下:



8.源码下载
MyBatis测试源码:http://www.zakisoft.com/wp-content/plugins/download-monitor/download.php?id=12
Hibernate3测试源码:http://www.zakisoft.com/wp-content/plugins/download-monitor/download.php?id=13
9
3
分享到:
评论
7 楼 bjameng 2015-06-12  
:idea: 测试的不错         给力
6 楼 javapub 2012-02-28  
java_star 写道
我个人认为,无需太过关注这种性能问题,因为实际上很多性能的优化来自于缓存策略的优化。如果实在是缓存无法优化时,可能表示数据量非常大,这个时候已经不能使用关系型数据库了。

你是对的,Hibernate做一些优化,加上二级缓存,运行也是飞快的。
5 楼 java_star 2012-02-17  
我个人认为,无需太过关注这种性能问题,因为实际上很多性能的优化来自于缓存策略的优化。如果实在是缓存无法优化时,可能表示数据量非常大,这个时候已经不能使用关系型数据库了。
4 楼 夏小士 2011-09-22  
只测试对单条数据的增删改   好像不能体现出他们之间的性能差异吧;毕竟我们的数据库还要考虑大表、外键等等因素,如果加上这些东西再去测试的话,更有说服力,做关联测试,查询时间测试4万条数据也不能真的去做压力测试,我觉得20万做压力测试更好些
3 楼 javapub 2011-01-18  
chat 写道
对ZakiSoft这个工具比较感兴趣

chat 写道
对ZakiSoft这个工具比较感兴趣

工具可以到 http://www.kutoku.info/software/2011/01/ZTestDao.zip 下载。原文中的下载地址里,因为附件太大,只有源码没有类库。

运行时先运行
/ZTestDao/src/com/zakisoft/workspace/initcompt/ibs/dao/user.sql
/ZTestDao/src/com/zakisoft/workspace/initcompt/hib/dao/user2.sql
创建两个测试表

然后配置MyBatis数据库连接:/ZTestDao/src/Configuration.xml
配置Hibernate3数据库连接:/ZTestDao/src/hibernate.cfg.xml

配置Spring配置文件:/ZTestDao/src/bean-config.xml,控制持久层使用Mybatis还是Hibernate3

运行/ZTestDao/src/com/zakisoft/workspace/Index.java就可以看到页面了。
2 楼 xiaoye4188 2011-01-18  
chat 写道
对ZakiSoft这个工具比较感兴趣

chat 写道
对ZakiSoft这个工具比较感兴趣

同感兴趣
1 楼 chat 2011-01-18  
对ZakiSoft这个工具比较感兴趣

相关推荐

    hibernate与mybatis一起使用取长补短

    7. **错误调试**: MyBatis的SQL日志记录功能可以帮助开发者快速定位SQL执行问题,而Hibernate的实体追踪也有助于理解对象状态和变化。 通过这种混合使用的方式,开发团队可以充分利用Hibernate的便利性和MyBatis的...

    ibatis和mybatis的前世今生.txt

    ### ibatis与mybatis的发展历程及技术要点 #### 一、ibatis的起源与功能特点 ibatis作为一款开源的Java持久层框架,在其诞生之初便致力于解决Java应用程序中的数据库操作问题。它通过将SQL语句封装在XML配置文件中...

    mybatis3学习课件

    **二、MyBatis 与Hibernate 比较** 1. **开发效率** - Hibernate 提供面向对象的抽象,能快速生成基本的CRUD操作,但在使用HQL或其他方式时,两者效率相近。 2. **可维护性** - MyBatis 的SQL开发方式允许开发者...

    struts+spring+mybatis基础环境

    Struts、Spring 和 MyBatis 是Java Web开发中三大核心框架,它们的组合常被称为SSM框架,用于构建高效、灵活的企业级应用。这个基础环境是项目开发的前提,旨在为开发者提供一个稳定、配置完善的开发平台。 Struts ...

    struts2+hibernate+ibatis整合

    3. **Hibernate与iBatis共存**:在某些场景下,可能需要同时使用Hibernate和iBatis,例如,对于复杂查询使用iBatis,而对于简单CRUD操作使用Hibernate。这时,需要合理配置数据源,确保两个框架都能正确访问数据库。...

    ibatis3 jar

    在集成MyBatis 3和Spring时,可以使用Spring的`SqlSessionFactoryBean`来配置MyBatis,这样可以实现声明式事务管理和依赖注入。同时,MyBatis 3相比Hibernate提供了更细粒度的控制,允许开发者编写原生SQL,避免了...

    ibatis与hibernate的区别

    - **iBatis:** iBatis则更倾向于让开发者自行编写SQL语句,这样可以确保SQL的执行效率,并且便于进行复杂的查询操作。然而,这也意味着开发者需要对SQL有一定的了解才能发挥iBatis的优势。 **2. 对象关系映射的...

    ssh整合(spring+hibernate+ibatis)

    3. **配置iBatis**:在`mybatis-config.xml`中,设置数据源、事务管理器以及Mapper文件的位置。Mapper文件是iBatis的核心,它包含了SQL语句和结果映射。 4. **整合iBatis与Spring**:通过Spring的...

    HIbernate,Ibatis等持久层开发文档

    **iBATIS**,现在称为MyBatis,是一个轻量级的持久层框架,它强调SQL的编写和执行。在`ibatis 开发指南.pdf`中,你会学习到如何配置SqlMapConfig.xml文件,如何定义Mapper XML文件以映射SQL语句,以及如何在Java代码...

    Mybatis课件

    MyBatis的历史可追溯至Apache的开源项目iBatis,该项目在2010年由Apache Software Foundation迁移到了Google Code,并在开发团队转投Google Code旗下后,iBatis 3.x版本正式更名为MyBatis,并于2013年迁移到了GitHub...

    ibatis 与spring3整合

    "Ibatis 与 Spring3 整合"这一主题,涉及到的是两个知名Java框架——Ibatis(一个轻量级的持久层框架)和Spring(一个全面的企业级应用框架)的协同工作。下面我们将深入探讨这一整合过程中的关键知识点。 Ibatis ...

    mybatis详细使用讲解

    - **程序执行效率**:通常情况下,MyBatis 的执行效率相对较高。 - **可移植性**:Hibernate 在这方面表现更好,因为它允许在配置文件中处理与数据库相关的设置,而 HQL 语句与具体的数据库无关。 **1.3 适用场合**...

    ibatis在web工程中的应用笔记

    4. 开发效率:Hibernate提供了自动的CRUD操作,简化了开发流程,但在某些特定场景下,MyBatis可能需要更多手动工作。 三、MyBatis在Web工程中的应用 1. 配置:MyBatis的集成通常涉及配置SqlSessionFactory,这是...

    技术分享之Web服务后台开发框架升级:从SpringMVC+Hibernate到SpringBoot+Mybatis

    ### 技术分享之Web服务后台开发框架升级:从SpringMVC+Hibernate到SpringBoot+Mybatis #### SpringBoot框架介绍 SpringBoot是由Pivotal团队开发的一款旨在简化Spring应用程序搭建和开发流程的框架,其设计理念是...

    mybatis3_code.zip

    MyBatis是一个强大的Java持久层框架,它与Hibernate和iBatis等其他ORM(对象关系映射)工具相比,提供了更为灵活的SQL映射和控制。这个“mybatis3_code.zip”压缩包包含了《Java Persistence with MyBatis 3》教程的...

    mybatis_day01.docx

    MyBatis 的前身是iBatis,它提供了比Hibernate更为灵活的数据访问方式,允许开发者自定义SQL语句,从而在性能优化和复杂查询上具有更大的自由度。 MyBatis 相较于Hibernate有以下特点: 1. **灵活性**:MyBatis ...

    iBatis与数据库交互

    3. 复杂SQL需求:对于有大量复杂SQL的项目,iBatis可以更好地控制SQL执行。 五、iBatis与MyBatis的区别与联系 MyBatis是iBatis的升级版,它继承了iBatis的所有优点,并做了很多改进,比如引入了注解支持、增强了对...

Global site tag (gtag.js) - Google Analytics