`

O/R Mapping性能

 
阅读更多

我不知道为什么你这么怀疑O/R Mapping的性能,O/R Mapping的性能再差也比CMP强吧。

JDO只是一个标准,每个厂商实现的性能各有不同,不好评价。

Apache OJB的性能如何,Apache网站上面有评测。

Hibernate的性能我是花了点时间去研究的。Hibernate可以通过修改配置文件把所有的SQL语句都输出出来,你写一些测试代码观察一下输出的SQL,就什么都明白了。

简单的来说,Hibernate的性能比一个普通的Java程序员写的JDBC代码性能高非常非常多。原因是因为Hibernate本质上还是包装了JDBC来进行数据库操作的,由于Hibernate在调用JBDC上面是非常非常绞尽脑汁的优化JDBC调用,并且尽可能的使用最优化的,最高效的JDBC调用,所以性能相当令人满意。

简单来说吧,对于insert操作,普通JDBC程序员这样来写:

pstmt = conn.prepareStatement("insert into table1 values(?,?)");
for (int i=0; i< names.length; i++) {
pstmt.setString(1,names);
pstmt.setString(2,pass);
pstmt.executeUpdate();
}

如果批量插入n条记录的话,那么就是n次向数据库发送SQL语句。而Hibernate则是采用了JDBC2.0的batch功能。

for (int i=0; i< names.length; i++) {
pstmt.setString(1,names);
pstmt.setString(2,pass);
pstmt.addBatch();
}
pstmt.executeBatch();

只是1次向数据库发送SQL,性能高下判若分明。Update操作类似。

select操作,可以使用JCS缓冲查询结果,重复查询比JDBC肯定要快很多,分页操作可以使用数据库的分页sql,或者使用JDBC2.0的scroll result。

另外Hibernate总是尽量延迟向数据发送SQL,它会先把SQL语句缓冲在Session的缓冲区里面,最后在flush的时候一次性的向数据库发送。

总体来说,当你使用Hibernate的时候,相当于有一个JDBC高手来帮你优化JDBC调用,那点封装了一层的损失可以忽略不计。

如果你非要认为Hibernate封装了JDBC会损失性能,那么我问你,Java设计的目标是组件可复用,这些不全都是封装吗?难到你调用组件都损失性能了,如果是那样,还不如不要写什么组件,全部都重新写原始的实现代码呢!

不过如果一个真正的JDBC高手,完全自己优化JDBC代码写DAO实现,我相信会比Hibernate性能高一些,但是Hibernate已经够优化了,你能够做的是非常有限的。就好比用C语言写的程序,虽然比汇编语言差一点,但是差的非常有限。Hibernate vs JDBC就相当于C vs Assemble,除非特殊需要,Hibernate已经足够好了。

分享到:
评论

相关推荐

    Macrobject NObject O/R Mapping 框架

    NObject O/R Mapping 框架包含了 OQL.NET,一套基于 C# 和 VB.NET 等原生 .NET 语言的强类型对象查询语言 (OQL, Object Query Language) 使您甚至不需要写一行 SQL 语句。 ??NObject O/R Mapping 框架能帮您减少 30...

    马士兵hibernate学习笔记(原版)

    2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping 3 常见的0/R框架(了解) 4 hibernate基础配置(重点) 5 ID生成策略(重点 AUTO) 6 Hibernate核心开发接口介绍(重点) ... 风格 1 ...

    Macrobject NObject 2.0

    Macrobject NObject 是一套用于 .NET 平台的 O/R Mapping (Object-Relation Mapping,对象关系映射) 框架。 ??NObject 支持多种数据库,完全对用户透明,切换数据库无需更改代码。NObject 同时提供了 XObject XML...

    hibernate笔记

    2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping 5 3 常见的0/R框架(了解) 5 4 hibernate基础配置(重点) 5 5 ID生成策略(重点 AUTO) 5 6 Hibernate核心开发接口介绍(重点) 5 7 对象的三种...

    Hibernate开发的相关知识

    理解O/R Mapping原理 掌握Hibernate开发的相关知识 能使用Hibernate进行实际项目开发 Hibernate高手进级:性能优化策略

    基于SpringJdbc+freemarker实现,具备Mybatis一样的SQL分离和逻辑标签能力的轻量级JAVA持久层框架

    O/R mapping不用设置xml,零配置便于维护。不需要了解JDBC的知识。SQL语句和java代码的分离 只需接口定义,无需接口实现。SQL支持脚本语言(强大脚本语言,freemarker语法)。支持与hibernate轻量级无缝集成。支持...

    Hibernate框架参考文档

    5. 对象/关系数据库映射基础(Basic O/R Mapping); 6. 集合类(Collections)映射; 7. 关联关系映射; 8. 组件(Component)映射; 9. 继承映射(Inheritance Mappings); 10. 与对象共事; 11. 事务和并发; 12. 拦截器与...

    Gentle.NET源码下载

    Gentle.NET是一个开源的优秀O/R Mapping的对象持久化框架。Gentle.NET是一个关系数据库中立的(RDBMS indenpendent)对象持久化框架。它具有以下特征:  ·自动构建SQL  ·自动创建实体对象  ·用于创建定制查询...

    Hibernate 3.6.0.Final Reference PDF 手册

    第 5 章 对象/关系数据库映射基础(Basic O/R Mapping) 第 6 章 Types 第 7 章 集合映射(Collection mappings) 第 8 章 关联关系映射 第 9 章 组件(Component)映射 第 10 章 继承映射...

    hibernate中文参考文档

    5、O/R Mapping基础 6、集合类映射 7、组件映射 8、继承映射 9、操作持久化数据 10、事务和并行 11、Hibernate查询语言 12、条件查询 13、原生SQL查询 14、性能提升 15、工具箱指南 16、示例:父子关系 17、示例:...

    Node.js的DAO框架bearcat-dao.zip

    SQL mapping vs O/R mapping结构化查询语言(SQL)已经存在了非常久的时间。自从 Edgar F.Codd 第一次提出“数据可以被规范化为一组相互关联的表”这样的思想以来,已经超过35年了。很少有哪一种软件技术敢声称自己...

    easydb:#easydb,是在2007年开发完成的一款简洁易用的OR Mapping产品

    项目说明 Easydb,是一款简洁易用的O/R Mapping产品,是应用于JAVA/J2EE项目中的持久层框架,使得开发人员可以更加高效地构建应用系统,着重关注业务逻辑而非数据存储,节省项目的开发、维护成本。 Easydb,其思路...

    java实用系统开发指南-2

     在第四章有专门关于XML Mapping(可方便进一步跨越到数据库的O/R Mapping)的介绍,提供了对XML文件方便实用的操作办法。  本书所有例程都是基于开源软件Tomcat或JBoss容器平台,因此有大量篇幅介绍其相关知识。  ...

    java实用系统开发指南-3

     在第四章有专门关于XML Mapping(可方便进一步跨越到数据库的O/R Mapping)的介绍,提供了对XML文件方便实用的操作办法。  本书所有例程都是基于开源软件Tomcat或JBoss容器平台,因此有大量篇幅介绍其相关知识。  ...

    java实用系统开发指南-1

     在第四章有专门关于XML Mapping(可方便进一步跨越到数据库的O/R Mapping)的介绍,提供了对XML文件方便实用的操作办法。  本书所有例程都是基于开源软件Tomcat或JBoss容器平台,因此有大量篇幅介绍其相关知识。  ...

    火炬博客系统5

    Hibernate是一个优秀的开放源代码的对象关系映射(O/R Mapping)框架,它对JDBC进行了非常轻量级的对象封装,提供了强大高性能的对象到关系数据库的持久化服务,使程序员可使用面向对象思维来操纵数据库。...

    火炬博客系统7

    Hibernate是一个优秀的开放源代码的对象关系映射(O/R Mapping)框架,它对JDBC进行了非常轻量级的对象封装,提供了强大高性能的对象到关系数据库的持久化服务,使程序员可使用面向对象思维来操纵数据库。...

    火炬博客系统6

    Hibernate是一个优秀的开放源代码的对象关系映射(O/R Mapping)框架,它对JDBC进行了非常轻量级的对象封装,提供了强大高性能的对象到关系数据库的持久化服务,使程序员可使用面向对象思维来操纵数据库。...

Global site tag (gtag.js) - Google Analytics