《2022年为什么要学习Hibernate?Java教程.docx》由会员分享,可在线阅读,更多相关《2022年为什么要学习Hibernate?Java教程.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年为什么要学习Hibernate?Java教程在我做过的许多项目的过程中,我始终有一个悬而未决的问题在困扰我,那就是长久层的开发。长久层的开发一般来说要么用CMP,要么用JDBCDAO。 CMP就不用说了,它对我来说是一种失败的实践,而JDBC+DAO也存在许多的困难,我很难做到把关系表记录完整的映射到长久对象的关系上来,这主要体现在多表的关系无法干脆映射到对长久对象的映射上来,可能是一个表映射多个长久对象,有可能是多个表映射一个长久对象,更有可能的是表的某些字段映射到一个长久对象,但是另外一些字段映射到别的长久对象上。而且即使这些问题都处理好了,也不能干脆根据对象的方式来对长久对象(
2、PO)编程,因为存在1:N关系的长久对象的查询其实就是1+n次对数据库的SQL,我曾经有一次失败的长久层设计,结果是某个关联许多其它长久对象的PO一查询就是5n1次 sql,速度慢的不得了,最终不得不整个修改底层设计,最终等于是完全抛弃了对象设计,完全是根据表字段进行操作。但是这样做特别难过,因为系统的设计是从需求设计,系统设计这样自顶而下的,结果都到了具体设计阶段了,被长久层映射问题限制,不得不自底向上修改设计方案,又回到了根据过程进行编程的老路上来,特别的糟糕。我对这个问题思索了很久,最终最终意识到这其实是一个很经典的问题:对象和关系的映射问题。事实上自从OOP编程流行以后,就存在这个难题
3、了,所以才有人提出关系数据库进行重新设计,改用对象数据库,但事实上关系数据库并没有被淘汰,于是就只能在上层的应用层找解决方案。这时候我明白了我须要的事实上是一种 ORM产品。我最早想到的ORM就是JDO,于是我下载了两个JDO产品,打算仔细的学习一下,但是探讨了一段时间之后,我发觉我对JDO特别的悲观,缘由如下:1、 JDO没有一个好的开源免费实现,好的产品都是商业产品,并且在国内没有销售和技术支持。这就造成了JDO只有学习之用,不能把它用在实际项目中,否则的话,你把软件卖给客户的时候,还要告知他,你还要另外去买一个国外的软件产品,并且在国内没有技术支持,出了长久层的问题,我们也解决不了,请你
4、自己打国际长途去解决问题,你认为客户能答应吗?2、JDO不是一个轻量级封装,它试图建立一个完整的长久层框架,但是还很不完善,造成了JDO 感觉比较笨重,许多操作方式令人觉得烦琐和怪异。这加重了程序员学习和编程的负担,而且封装的太多会造成一个严峻的问题就是一旦出现报错信息,调试起来特别困难,你很难精确的定位错误原委出在哪里,封装的越轻,问题越简单定位,越简单解决,封装的越重,问题越困难,越找不到缘由,CMP就是一个很好的例子,出了错误,调试起来特别困难和麻烦。3、JDO的标准很不完善,存在重大缺陷。最主要的问题体现在PO不能脱离PM(相当于 Hibernate的Session)而存在,这是个特别
5、严峻的问题,会造成编程的时候进行大量VO的拷贝操作,烦琐极了;另外一个重大缺陷是静态的 POJO的Enhancer,不能运行期动态Enhance,无法进行增量编译和调试,编程和调试起来特别烦琐,每次都要手共运行一个工具对POJO进行 Enhance;此外还有一些缺陷,例如JDOQL不完善,映射关系的表达不够强大等等。4、JDO产品的分裂。这个问题也比较严峻,由于JDO1.0标准的缺陷,而JDO2.0标准还遥遥无期,而各个JDO厂商为了能够在竞争中脱颖而出,那么除了在易操作性和性能上的提高之外,想要吸引客户,就必需有自己的产品特色。那么1.0标准的缺陷正好给了他们发挥的舞台,每个厂商都会有自己独
6、到的解决方案来解决标准的缺陷,然而这却造成了JDO 产品事实上的分裂。这种分裂严峻到什么程度?我可以简洁举个例子:你写好的POJO,用一种JDO的Enhancer进行Enhance过以后得到的 PO,在另一个JDO产品上跑不起来。这很像当年Unix的分裂,结果就是二进制代码级的不兼容,而只能在C源代码级兼容。现在的JDO也有这样的趋势,就像App Server的差别一样,一个在Weblogic上开发好的EJB,移植到Websphere,你肯定须要重新进行配置。我心目中的ORM最好有如下的特点:1、开源和免费的License,我可以在须要的时候探讨源代码,改写源代码,进行功能的定制。2、轻量级封
7、装,避开引入过多困难的问题,调试简单,也减轻程序员的负担。3、具有可扩展性,API开放,当本身功能不够用的时候,可以自己遍码进行扩展。4、开发者活跃,产品有稳定的发展保障。抛弃了JDO以后,我依据上面的原则,先后解除了TopLink,CocoBase,Castor等,最终选择了Apache OJB和Hibernate。OJB的解除很简单做出,一是因为它的文档太简洁,太少;二是因为OJB安排下一个版本全面支持JDO,它的API会有重大变动,所以现阶段学习OJB是个错误,等它的API稳定了以后再学习不迟。Hibernate的发觉是很偶然的事情,只是在别人提到JDO的产品中,附带提了提而已,但当我起
8、先探讨Hibernate之后,我发觉最终找到了我梦寐以求的ORM了。Hibernate 完全符合我上面提到的标准之外,也解决掉了JDO的全部缺陷,而且方式之优雅令人赞美。Hibernate的文档也是特别特别有特色的地方,它不仅仅是 Hibernate的功能介绍那么简洁,它事实上是一个长久层设计的最佳实践的阅历总结,文档里面的例子,文档里面的总结全部都是最佳设计的结晶。我仔细的把Hibernate读下来的感觉就是,不单单把Hibernate驾驭住了,而且对长久层的设计的阅历都长了一大块,以前可从来没有觉得长久层的设计还有那么多的学问,也由此感觉到Gavin肯定是一个大牛人。当然选择Hiberna
9、te最最重用的缘由是Hibernate是一个我能够完完全全驾驭的了的软件。Hibernate的源代码特别少,而且写的特别简洁,我总觉得挺惊奇的,这么少的源代码能够实现这么多的功能,是个奇迹。 Hibernate的源代码树分的很清晰简洁,源代码很易读,我一旦遇到文档中没有讲到的问题,或者文档中提到但是我搞不清晰的地方,我就去源代码中找,全部的问题都豁然开朗,而且让我对Hibernate的运行原理和细微环节搞的特殊清晰,似乎Hibernate就像自己写的代码一样,很清晰的知道,怎么写程序可以让Hibernate运行效率最高,最省内存,程序出了错误,很清晰的知道是什么地方的问题,怎么解决。所以用Hibernate让我特殊放心,我能够驾驭它,而不像那些过于困难的软件,本身框架就困难的很,再加上不开源,出了问题也不知道怎么回事。 2022年3月29日 2022年3月28日 2022年3月28日 2022年3月28日 2022年3月28日 2022年3月28日 2022年3月27日 2022年3月27日 2022年3月26日 2022年3月26日 2022年3月26日 2022年3月26日