话说对 Hibernate 的吐槽很没道理,我竟无言以对

在 Java 的世界里有一些超级重量级的框架,不少 Java 开发者对它们甚至比对 JDK 自己还熟悉。没错,我说的就是 Struts、Spring 和 Hibernate,或者就把这三者称为 Java 的三剑客,传说中大名鼎鼎的 SSH。java

尽管我今年只有 19 岁,但已有十好几年的 Java 开发经验,目前简历里只敢说熟悉(非精通) Java 编程语言。曾经是 Struts 和 Hibernate 的深度用户。对于 Web 框架个人轨迹是:Servlet -> Struts 1.x -> No Framework ,No Framework 其实说的不许确,应该是本身对 Servlet 或者 Filter 的一个简单封装。而在数据库访问这块轨迹是:JDBC -> Hibernate -> DbUtils。我以为 DbUtils 说的也不许确,由于我愿意尝试各类轻量级的 ORM 框架,而 DbUtils 严格意义上并非一个 ORM 的东西,充其量就是一个 JDBC 的工具包。数据库

回想下当你在写各类 JDBC 程序的时候,假设一个表有 20 个字段,那么一个插入记录的方法可能就有小 30 行代码,由于有大量的 setString\setInteger 之类的方法须要调用。后来出现了 Hibernate 后感受原来写代码也是如此的享受,以前 30 行的代码如今只须要两三行搞定!瞬间以为腰也不酸了、腿也不疼了,一口气能写几十个方法。而 Hibernate 初期阶段同类产品并很少,iBatis 算是一个吧。固然后来大量 ORM 框架如雨后春笋般冒出已经是几年之后的事了!编程

在此输入图片描述

我记得最开始 Iteye 也就是以前的 Javaeye 早期的网站是 hibernate.org.cn ,你们都在讨论 Hibernate 的各类使用技巧。由于那个时候的 ORM 是一个很是有意思的思路,完全解决重复编写各类 JDBC 代码的痛楚。大量的人开始学习并使用 Hibernate ,Hibernate 自己也在快速发展。任何一款软件和框架不可能知足使用者 100% 的需求,不少人适应它,有很多人不满现状去改进了,或者是使用其思路开发者各类五花八门的同类产品出来。框架

选择多了就有了比较,而后开始吐槽,概括起来有这么几个槽点:编程语言

  • 过重 (的确,一个 jar 包好几兆)
  • 封装得太狠,不少问题难以直观诊断

Hibernate 如今的确是愈加重了,已经俨然成为一个相似 Spring 的产品体系,例如 Hibernate ORM、Hibernate OGM、Hibernate Search 等等。而一个 Hibernate 核心 jar 包文件竟然有 5M 这么大!这也是为什么08年我开始开发 OSChina 时候选择放弃 Hibernate 的缘由(那时候的 jar 包才两兆多),我放弃 Hibernate 的另一个缘由是: Hibernate 框架最大的优势 —— 支持多数据库平台,对 OSChina 来讲没有用处,由于 OSChina 只会跑在 MySQL 数据库之上。工具

好了,其实我想说的是多数在吐槽 Hibernate 的人可能没注意到 Hibernate 最大的优点是什么,或者是他平时的开发过程当中没有机会用到这个优点。学习

某些时候咱们在开发一个应用的时候会要求应用能够经过简单的配置实现对不一样数据库的支持,我在作 OSChina 以前有一个开源软件 —— DLOG4J,这是一个用 Java 开发的博客软件。它是一个软件,它的用户各类各样,有些但愿支持 MySQL,有些但愿支持 Oracle,还有 SQL Server 的。你知道数据库尽管都遵照一些通用的 SQL 标准,但又有不少各自产品的差别,就比如说分页读取记录,每一个数据库的 SQL 语句写法都不一样。若是你专门针对每一个数据库去写这些各类的适配,烦都烦死。网站

而 Hibernate 在一开始就已是解决了这个问题,经过其 Dialect 方言可方便实现对不一样数据库的支持,固然这里有个大前提是你应用的代码中若是用到了原生的 SQL ,那么你须要自行保证这些 SQL 是数据库无关的。整个 DLOG4J 项目仅有 1~2 处用了 SQL 语句,其余 99% 都是直接利用 Hibernate 的 API 或者是 HQL 编写。所以你想要支持什么数据库,改个 Hibernate 的 dialect 配置便可。.net

如是看来平台开发 Hibernate 并不是一个好选择,其一:平台通常不会随意更换数据库;其二:Hibernate 的确过重了;其三:有太多 ORM 框架能够选择(更多 ORM 框架请看这里)。而产品开发则是 Hibernate 的用武之地,毕竟客户的需求五花八门,数据库也五花八门,想省事就 Hibernate 吧。hibernate

最后我想说的是:任何一个软件都不可能知足你 100% 的需求。就好像你不能吐槽刘翔唱歌跑调,吐槽张学友跑得没你快,吐槽 @红薯 长得比你帅,是同样的道理。

相关文章
相关标签/搜索