Hibernate性能简单描述

开发 后端
这里介绍Hibernate性能:我坚信,Hibernate性能问题不是问题。想想那么多大中小项目都在使用Hibernate,你还怀疑Hibernate性能吗?

在向大家详细介绍Hibernate性能之前,首先让大家了解下可维护性,然后全面介绍Hibernate有着ibatis无法替代的优势。

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,你还怀疑Hibernate性能吗?spring整合Hibernate之后,在真正性能瓶颈的地方,完全可以使用spring集成的jdbc,或直接写存储过程得了。但首先得确认,这实在是性能瓶颈的地方,我想,不应想当然的认为性能的问题,所谓的性能问题阻挠了很多人。

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

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

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

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

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

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

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

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

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

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

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

【编辑推荐】

  1. Hibernate专业知识介绍
  2. 讨论Hibernate和模型对象
  3. Hibernate查询缓存全面分析
  4. 概括Hibernate主键生成机制
  5. Hibernate Pager基础介绍
责任编辑:佚名 来源: 51CTO.com
相关推荐

2009-09-22 11:16:27

Hibernate经验

2009-09-27 13:00:56

Hibernate S

2009-09-28 15:43:42

Hibernate O

2009-09-23 10:58:32

Hibernate T

2009-09-22 17:41:07

Hibernate性能

2009-09-24 13:17:37

Hibernate类库

2009-09-21 13:56:09

Hibernate3.

2009-09-25 10:33:25

Hibernate单元

2009-09-27 17:37:32

Hibernate拦截

2009-09-27 17:05:02

Hibernate p

2009-09-29 16:48:42

Hibernate J

2009-09-23 17:34:18

Hibernate映射

2009-09-21 16:30:20

Hibernate S

2009-09-24 16:19:53

Hibernate应用

2009-09-22 15:04:37

Hibernate M

2009-09-25 14:28:40

Hibernate S

2009-09-23 10:23:03

Hibernate检查

2009-09-29 10:57:25

设置Hibernate

2009-09-21 17:46:34

Hibernate持久

2009-09-27 09:55:38

Hibernate持久
点赞
收藏

51CTO技术栈公众号