使用hibernate的优势

Hibernate在解决性能问题方面做得非常好。有了它的缓存机制,使用第三方缓存和数据库连接池,就 较好的解决的性能问题。但这些还不够,hibernate给了开发者足够的自由,让开发者自己去控制性能问 题。

学习了一段时间的ibatis,我觉得hibernate有着ibatis无法替代的优势。

1、开发者都知道,hibernate让我们以oo的方式操作数据库,这让我们看到了hibernate的强大之处, 体验到操作数据的方便。但Gavin King说,hibernate最耀眼之处是hibernate的缓存机制,而不是以oo的 方式操作数据库。Hibernate的缓存机制不外乎是一级缓存session,二级缓存sessionFactory,和第三方 缓存如ehcache。也就是hibernate的最强大的地方是它的缓存,理解了这个才能真正的理解hibernate。 缓存实在太难了,我至今未能真正理解。

2、可维护性:ibatis宣扬写sql语句,它将sql语句放进一个单独的xml文件,这种方式赢得了很多开 发者的喜爱,一句话,方便维护。但hibernate同样具有这种功能,而且比ibatis更加强大。Hibernate的 命名查询/命名参数查询,就是将hql语句放在一个单独的xml文件之中,它仍然让人们以面向对象的方式 去操纵数据,这得到大量遵循oo方式开发者的喜爱,而不用在以oo的方式写着代码的同时,然后再转变思 维,用面向关系的方式去写那些sql语句。但hibernate不仅做了这些,它的native sql查询方式,完全满 足sql语句的偏爱者,它像ibatis一样,将sql语句放在配置文件之中。

3、性能:我坚信,hibernate性能问题不是问题。想想那么多大中小项目都在使用hibernate,你还怀 疑hibernate的性能吗?spring整合hibernate之后,在真正性能瓶颈的地方,完全可以使用spring集成的 jdbc,或直接写存储过程得了。但首先得确认,这实在是性能瓶颈的地方,我想,不应想当然的认为性能 的问题,所谓的性能问题阻挠了很多人。

我认为,性能的好坏无外是发送sql语句的多少而已。性能好,发送的sql语句少,性能差,就是发送 大量的sql语句。Hibernate在解决性能问题方面做得非常好。

有了它的缓存机制,使用第三方缓存和数据库连接池,就较好的解决的性能问题。

但这些还不够,hibernate给了开发者足够的自由,让开发者自己去控制性能问题。

我认为开发者可以在以下几个方面自行调优:

a、在查询字符串中,应该总是使用jdbc的占位符?,或使用使用命名参数:,不要自查询中使用字符 串值来代替非常量值。

b、Flush会影响性能,频繁刷新影响性能,尽量减少不必要的刷新。

c、Cascade策略,在几对几的关系,正确设置cascade策略,想清楚在操作对象A的同时是否需要级联 操作对象B,比如在one to many的父子关系中,删除了父亲one,需级联删除子many,这时的one这端可设 置cascade = “delete”,这样在删除one时,会自动删除子,但对子的操作不会影响父。Cascade还有其 他的属性值,只要设置正确,可提升性能。

d、lazy策略,正确设置延迟加载策略同样会提升性能,在one to many或many to many中,通常总应 该延迟加载many的一方的到内存。设置了lazy = “true”,首先发送sql语句,加载自己到内存,到需要 时才加载级联对象;lazy=”false”,则会同时加载自己和级联对象到内存。

e、另外还有集合的性能(set、list、map、array),都应正确设置。

f、正确使用第三方缓存,在读操作频繁写操作不多的情况,使用第三方缓存可大幅度提升性能,如 ehcache的缓存策略有:read-only,read-write和notstrict-read-write。

f、 随着hibernate新版本的发布,和技术的发展,我相信hibernate的性能会越来越好,所有性能不 是不使用hibernate的原因。

4、hibernate不仅仅作为持久层的orm框架存在,它除了dao层的持久化操作外,还有很多。

在注解annotation已经走向主流的今天,hibernate 迅速响应,让xml部署描述符成为可选的。 Hibernate annotation 对大字段的处理只是一个@Lob就搞定了。

hibernate search对Lucene进行了轻量级的封装,全文检索变得非常简单。

Hibernate validator被认为是最合理的验证方式,将验证策略直接附在贯穿各层的领域模型domain上 ,不再需要哪些web框架的xml方式的验证,代码中不再出现大量的非空/null的判断。

时间: 2024-09-20 00:31:36

使用hibernate的优势的相关文章

Hibernate从入门到精通(二)Hibernate实例演示

上篇Hibernate从入门到精通(一)JDBC简介,我们主要对JDBC进行了简单介绍和使用说明,这次我们做一个Hibernate简单实例,通过这个实例对比Hibernate和JDBC,了解Hibernate的优势所在.在此之前,读者有必要了解一下Hibernate中的每个jar包的作用和每个jar文件包主要负责的工作,这里我们不做过多的解释. 1.导入jar文件 导入antlr-2.7.6.jar 导入commons-collections-3.1.jar 导入dom4j-1.6.1.jar

在Hibernate中直接操作JDBC接口

简介: Hibernate 在处理多表关联及分组排序等复杂数据库查询操作时,其固有的 O-R 映射机制会 产生大量冗余 SQL 操作,系统性能比传统的 JDBC 低很多.本文分析了 Hibernate 产生此类问题的原因 ,提出了一个在 Hibernate 框架内直接操作 JDBC 的接口的解决方案,在实际项目中验证了该解决方案 可以有效提高此类查询的效率.文中提供的示例代码可以直接运用于使用 Hibernate 框架的 J2EE 系统 项目. 在 Hibernate 框架中提供直接操作 JDB

Mybatis与Hibernate的区别_java

以前没怎么用过mybatis,只知道与hibernate一样是个orm数据库框架.随着使用熟练度的增加,发现它与hibernate区别是非常大的感兴趣的朋友通过本文一起学习吧 趁着这个周末,抽空把一些常用的技术整理出来,小编还会不定期的更新内容. 首先简单介绍下两者的概念: Hibernate :Hibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装. Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系. 其次具体从

面向对象数据库db4o之旅,第4部分 使用dRS

前言 在开源面向对象数据库 db4o 之旅 系列文章的第 1 部分:初识 db4o 中, 作者介绍了 db4o 的历史和现状.应用领域.以及和 ORM 等的比较:在第 2 部 分:db4o 查询方式 中 , 作者介绍了 db4o 的三种不同的查询方式:QBE.SODA 以及 Native Queries,并分别通过这三种不同的途径实现了两个关联对象的查 询:在第 3 部分:深入 db4o 中,作者介绍了 db4o 的修改和删除,引入了" 更新深度 (update depth)"这一重要

在应用层通过spring特性解决数据库读写分离

在应用层通过spring特性解决数据库读写分离    如何配置mysql数据库的主从? 单机配置mysql主从:http://my.oschina.net/god/blog/496   常见的解决数据库读写分离有两种方案 1.应用层 http://neoremind.net/2011/06/spring实现数据库读写分离 目前的一些解决方案需要在程序中手动指定数据源,比较麻烦,后边我会通过AOP思想来解决这个问题.   2.中间件 mysql-proxy:http://hi.baidu.com/

hibernate 3 和hibernate 4 的区别,4.0以上版本加入哪些新特性,有什么优势?

问题描述 hibernate 3 和hibernate 4 的区别,4.0以上版本加入哪些新特性,有什么优势? hibernate 3.6.10.Final 和 hibernate 4.3.8.Final 的区别, 解决方案 http://blog.csdn.net/iaiti/article/details/9336703 解决方案二: http://blog.sina.com.cn/s/blog_3e20fc040100yhzq.html

Java Persistence with Hibernate中文版Hibernate实战第2版出版

Java Persistence with Hibernate中文版Hibernate实战第2版出版 图灵出版社官方Hibernate实战(第2版)链接为: http://www.turingbook.com/Books/ShowBook.aspx?BookID=260 书 名: Hibernate实战(第2版) 评论星级: **** 书 号: 978-7-115-17448-2 原 书 名: Java Persistence with Hibernate 原出版社: Manning Publi

Struts+Spring+Hibernate实现上传下载

上传|下载 引言 文件的上传和下载在J2EE编程已经是一个非常古老的话题了,也许您马上就能掰着指头数出好几个著名的大件:如SmartUpload.Apache的FileUpload.但如果您的项目是构建在Struts+Spring+Hibernate(以下称SSH)框架上的,这些大件就显得笨重而沧桑了,SSH提供了一个简捷方便的文件上传下载的方案,我们只需要通过一些配置并辅以少量的代码就可以完好解决这个问题了. 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序.SS

在Java SE中使用Hibernate框架

目前人们很容易发现Hibernate正迅速的成为流行的J2EE的O/R映射工具和数据集成框架(如果不是最流行的).Hibernate为企业应用开发者操作关系数据库的提供了清晰明了而又强大的工具.然而如果你需要在外部访问那些包装在J2EE web应用里的实体,情况又怎样呢?你的开发跟应用独立分开,却又相同的实体以访问你的数据吗?又或者你得编写附加的web组件来管理对数据的内部访问吗? 在很多情况下,这些问题都会出现.我的情况是我的公司需要将来自多个供应商,有着多种文件格式的记录导入到数据库里.我想