2007年9月15日星期六

什么时候应该使用Hibernate/NHibernate

我公司的项目应用了NHibernate, 近来重新看了一下Hibernate,搭建一个Hibernate的环境来探讨一下Hibernate的高级应用。在使用NHibernate的过程中, 也积累了一些经验。 今天谈谈我对Hibernate/NHibernate 的一些看法。

Hibernate作为现在最流行的开源ORM项目,已经推出了Version 3了。NHibernate作为在.NET平台的实现, 发展势头也挺好。现在很多人都在使用Hibernate/NHibernate。也在很多地方取得了成功。但是我们不能陷于为了使用Hibernate/NHibernate而使用, 要根据实际情况来决定。

Hibernate/NHibernate 使我们能够很容易实现数据持久化,最常见的是保存在数据库里。 当然数据持久化可以有很多形式, 例如保存在文件,卡片等。Hibernate/NHibernate就是一个工具来帮助我们把对象持久化在数据库里。我们只需要和对象打交道而不用写大量的复杂的SQL语句来操作数据库。

如果我们的应用程序支持多种数据库,例如Oracle, SQL Server,MySQL,PostgreSQL 等, 大家都知道各种不同的数据库的支持的SQL标准并不一样。如果我们把SQL语句嵌入在程序里,无论是开发, 测试,维护都是一场恶梦。Hibernate/NHibernate 就显示出优越性, 我们只需要和对象打交道, 而不用关心底层的是什么数据库。Hibernate/NHibernate 通过配置文件可以支持多种数据库。 但是在设计时也要注意一些问题。 例如有些数据库不支持字段的自动增量, 我们最好用Sequence来代替。 如果SQL Server 不支持DateTime.MinValue。 因此如果你把DateTime.MinValue 保存到SQL Server就会出错。

Hibernate/NHibernate 支持2级缓存和第三方的缓存实现,极大的提高了性能。支持多种缓存同步策略。

如果你只是简单的对数据进行增加, 删除, 查询。那就根本不需要Hibernate/NHibernate。 ADO.NET 2.0 里面都有数据持久化的能力。

Hibernate/NHibernate只是适用于中小型的数据, 如果你的数据量比较大,数据之间关系比较复杂,对性能的要求比较高的话, 还是需要通过优化的SQL 和各种存储过程来实现。大家可以看一下IBatis.Net. IBatis.Net可以让你充分利用sql的强大功能

Hibernate/NHibernate 比较灵活,要想熟练掌握不容易, 但网上资源较多, 文档比较好。至于用不用Hibernate/NHibernate。就看你的实际情况了。

没有评论: