转红薯博客:话说对 Hibernate 的吐槽很没道理,我竟无言以对

2019独角兽企业重金招聘Python工程师标准>>>

我记得最开始 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 配置即可。

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

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

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91518 人正在系统学习中 相关资源:竞业达电子监考系统.zip_竞业达SIP服务器- 管软件文档类资源…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年2月6日
下一篇 2016年2月6日

相关推荐