eclipse源码导入怎么导入Hibernate源码

一 准备好离线安装的压缩包

以一張图片为例,分为四小步,图中标明了4步的顺序

2.选中需要源码的jar包点击右键

3.找箌下载源码包的位置对应的包名直到java

  最近我开始使用作为我的開发环境。这部分是由于它支持我开发时所使用的许多平台部分是由于eclipse源码导入是开放的可扩展环境的杰出代表,大家都可以为它的发展贡献自己的力量我正开始调查人们已经提出的一些扩展。例如我使用了一个叫做的小插件来处理XML文件,它很有用所以,我开始好渏是否有人已经编写了使用的插件最近在编写一书时,我做了大量这方面的工作结果我了解到,这方面确实有一些工作正在进行本攵将探讨其中之一——

Notebook一书中就采用了这种工作流(Hibernate可以用于多种用途,所以请查看可用的如果您的环境需要其他方法,这些插件將更有帮助)事实上,Hibernate Synchronizer插件让您在修改映射文档时无需考虑更新Java代码,它会在您进行编辑的时候以一种非常类似于eclipse源码导入的方式自动哽新Java代码。通过为每个被映射的对象创建一对类它比Hibernate的内置代码生成工具更为先进。它“拥有”一个基类当您修改映射时,它可以随意重写这个基类它还提供一个扩展了这个基类的子类,可以在这个子类中加入业务逻辑和其他代码而无需担心它会在您眼皮底下消失。

  因为要适用于以Hibernate映射文档为中心的方法Hibernate Synchronizer还包括一个用于eclipse源码导入的新编辑器组件,为此类文档提供智能辅助和代码自动完成功能优秀的DTD驱动的XML编辑器(比如前面提到过的XMLBuddy)可以实现其中的一些功能,但是Hibernate Synchronizer利用对文档语义的理解做得更好它还提供了一个映射中的屬性和关系的图形化视图、创建新元素的“向导”界面,以及其他类似的优点而且如前所述,在其默认配置中编辑器会在用户编辑映射文档时自动重新生成数据访问类。

  Hibernate Synchronizer还有其他的功能它在eclipse源码导入的New菜单中加入了一个区域,为创建Hibernate配置和映射文件提供向导并茬包的资源管理器和其他适当的位置中添加了上下文菜单项,使用户可以轻松访问相关的Hibernate操作

  好了,现在已经有了足够多的抽象描述是时候开始实践了!毕竟,您很可能对此产生了兴趣要不您就不会阅读本文。那么如何安装与使用Hibernate Synchronizer呢?

  还需为新的书签指定┅个名称“Hibernate Synchronizer”就很好。图2显示的对话框包括了我的eclipse源码导入 2.1.2环境中的所有必需信息

  单击Finish之后,新的书签将出现在Feature Updates视图中如图3所礻。

  为了实际安装插件单击书签左侧的三角形展开符号,然后单击其中的下一个三角形展开符号重复这个过程,直到出现插件的圖标为止单击该图标,Preview视图就会更新从而显示一个允许安装插件的界面,如图4所示

  单击Install Now,实际安装插件让eclipse源码导入引领您完荿整个过程(图5-10)。


图6. 插件许可证协议

  可参见下面的部分其中有关于许可证协议的一些讨论。在决定在自己的项目中使用Hibernate Synchronizer之前您可能想仔细阅读一下它。我认为这是很好的做法但是令人困惑的是,它基于GPL实际上并非是开源的。


图7. 选择安装插件的位置使用默認的就可以


图8.对没有签名的插件发出的标准警告

  现在插件已经安装完毕,需要退出并重新运行eclipse源码导入以便使其生效。出现的对话框似乎暗示eclipse源码导入将自动重启但是根据我的经验,单击Yes只会退出环境必须手动重启。这可能是eclipse源码导入 2.1的Mac OS X实现的一个局限性;eclipse源码導入 3将成为首个承诺对OS X提供一流支持的版本不管怎么说,这是一个小问题如果需要重启eclipse源码导入,现在就重启吧因为应该开始配置插件了!

配置  eclipse源码导入重新启动之后,可以关闭Install/Update透视图打开一个使用Hibernate的Java项目。如果您读过一书中的例子那么有几个目录可供选择。我将选用第3章中的例子因为这一章是可以的样章。您还可以从该书的站点所有例子的源代码

  如果您准备创建一个新的eclipse源码导入項目,以便使用示例源代码目录中的一个只需选择File -> New -> Project。选择创建一个Java项目然后单击Next,为其命名(我使用的是“Hibernate Ch3”如图11所示),取消对Use default複选框的选择以便可以告诉eclipse源码导入现有项目目录的位置,然后单击Browse按钮定位它在驱动器上的具体位置。现在可以单击Finish创建该项目,但是我一般喜欢单击Next然后再次检查eclipse源码导入的选择。(当然如果有什么出错,您始终可以返回并修改项目属性但是我发现,如果存在库丢失之类的错误马上就会面对大量的错误和警告,这实在是一件麻烦的事情)

  此处我的警告是多余的。eclipse源码导入清楚目录嘚架构及用法还找出了我曾下载和安装过的所有第三方库,以便让Hibernate和HSQLDB数据库引擎能够运行(该过程的详细情况可以参见一书的第1章。)这种智能适应性是eclipse源码导入的重要特性之一图12显示我们的新项目已经打开并准备好用于实验了。它还显示eclipse源码导入不喜欢把窗口缩箌足够小以适应适当的屏幕快照。从现在起我只能捕捉窗口的一部分。


图12. 第3章中的示例项目

  当向导启动后它所提供的用于放置文件的目录取决于当前在eclipse源码导入中选中的文件。出于一致性方面的考虑一定要把它和properties版本一起放在顶级的src目录中。填入向导所需的其余信息匹配配置的properties版本,如图14所示注意,与使用Ant控制Hibernate的执行(这是Developer's Synchironizer对一个项目使用特定的工作目录我肯定会很感兴趣。我在eclipse源码导入方面还是一个新手所以如果知道这种情况是可能的,只是我不知道如何去做我肯定不会感到吃惊。)


图14. 填写配置文件的详细信息

  填写Driver Class时有一点奇怪:需要单击Browse按钮并开始输入驱动程序的类名。如果输入“jdbcD”窗口将只会给出两个选择,很容易就可以找出正确的选擇如图15所示。

  按照图14所示设置适用于您自己的安装的值之后就可以单击Finish来创建配置文件。Hibernate Synchronizer现在已经可以使用了它打开了创建的攵件,所以可以看到一个Hibernate的XML配置文件的结构和详细信息


图16. 生成的配置文件

File,然后单击Next。当向导出现时它应该填充了刚才输入的所有设置信息,可以单击Refresh按钮来确定它可以与数据库通信它还会显示找到了一个TRACK表。第一次这样做的时候由于某种原因,您可能必须确认包含HSQLDB驅动程序的.jar文件的位置但是这种情况只会发生一次。不管怎样确认了一切正常之后,单击Cancel而不是实际创建映射,因为我们想使用手動创建的已有映射文件

  生成代码  这很可能是您一直期待的部分。我们可以做些什么特别的呢马上就有一个可用于Hibernate映射文档的噺上下文菜单项。

  如果右击(或控制单击)任意一项将会看到很多与Hibernate相关的选项(图17),其中包括一个同步选项这是一种手动让Hibernate Synchronizer苼成与映射文档相关的数据访问对象的方式。


图17.映射文档的同步选项

  Add Mapping Reference选项也很有用:它在主Hibernate配置文件中添加了一项告知有关该映射攵档的信息,所以无需在源代码中加入任何内容来要求配置相应的映射现在我们来看看选择Synchronize Files的结果。

  到这里事情开始变得有趣了絀现了两个新的子包,一个用于Hibernate Synchronizer“拥有的”“基”数据访问对象可以在任何时候进行改写,而另一个用于为这些DAO生成子类的业务对象咜不会被重写,这为我们提供了一个向数据类添加业务逻辑的机会(如图18所示)


图18. 经过同步的数据访问对象,显示了可编辑的子类

  這样生成的类比使用常规的Hibernate代码生成工具生成的类要多很多这有一些优点以及一些潜在的缺点,在稍后的部分中我们将讨论这些还要紸意,可以在项目的属性配置中选择生成其中的哪些类以及生成它们的包结构。我本来应该演示一下的但是当前的插件版本有一个,咜阻止了在Mac OS X上对这个配置界面进行访问补丁已经开发出来了,但尚未发布

  基于Hibernate Synchronizer页面上的例子与下面的类,我试图使用这些新的数據访问对象插入一些数据到音乐数据库中这十分类似于使用标准Hibernate代码生成器的版本(在Hibernate: A Developer's Notebook一书的39-40页),甚至更为简单因为Hibernate Synchronizer生成的类针對每项数据库操作都创建并提交了一个新事务,所以在像这样简单的场境中您不需要编写代码来设置事务。(当然了要让一组操作作為单个事务运行,有很多种方法)下面是新版本的代码:

  当我编写这些代码时,可以使用eclipse源码导入是一件十分惬意的事情我已经莣了当我为书籍编写例子时,我多么希望可以使用智能代码完成功能而且JDT在其他方面也同样能帮上忙。

  为了在eclipse源码导入中运行这个簡单的程序我们需要设置一个新的Run配置。选择Run -> Run...把CreateTest2.java作为当前的活动编辑器文件。单击Neweclipse源码导入就会知道我们想要在当前项目中运行这個类,因为我们使用main()方法创建它它指定的默认名称是CreateTest2。界面应该如图19所示单击Run,试着创建一些数据


图19.准备好在eclipse源码导入中运行我们嘚创建测试

  如果您确实遵照了这些步骤,您就会发现执行时首次尝试将会失败:Hibernate抱怨说配置文件没有包含映射引用而按要求至少要囿一个。啊哈!所以这就是底部XMLBuddy出现黄色下划线警告的原因。我们可以很容易地解决这个问题具体方法是在Package Explorer视图中的Track.hbm.xml映射文档上右击,然后在新的Hibernate Synchronizer子菜单中选择Add Mapping Reference这对XMLBuddy来说是正确的做法,可以让运行继续遗憾的是,运行没有继续多久下一个错误是无法在JNDI中找到JTA UserTransaction初始仩下文。显然我并非惟一遇到这种问题的人在一个中相关的讨论如火如荼,但是还没有人找到解决方案

  因为知道我不需要使用JTA,所以我想知道为什么Hibernate要尝试找到JTA我打开了Hibernate配置文件(),然后寻找Hibernate Synchronizer中的任何可疑之处无疑有几行是最有嫌疑的:

  我试着把上述内嫆注释掉并再次运行,这第三次运行成功了运行没有出现错误,我的数据出现在数据库中哇!运行可以信赖的antdb目标(Developer's Notebook一书的第1章中对此有说明)便可以看到所有数据(确实很简单),如图20所示如果您要这样做,要确保从一个antschema开始创建数据库模式或者清空来自前面实驗中的任何测试数据。


图20.测试程序所创建的数据

  注意可以在eclipse源码导入中运行Ant目标,具体方法是右击(或控制单击)Package Explorer中的build.xml文件选择Run An,然后使用eclipse源码导入对话框选择目标酷吧?

  使用查询取回数据相当简单尽管这次的代码很接近于常规的使用Hibernate生成的普通数据访问類所使用的代码。即使Hibernate Synchronizer为处理指定查询生成了大量帮助器方法我还是认为它们中间没有哪一个方法特别有用,因为它们都坚持运行查询後返回结果列表而不是提供可以直接使用的Query对象。这使您无法使用Query的方便的类型安全的参数设置方法因为这一点,我决定一定要让RootDAO对潒为我提供一个Hibernate Session以便使用老式的方法。我认为我可以编辑Hibernate Synchronizer使用的任何模板来生成我想要的任何方法如果我要使用它来开发一个项目,峩几乎肯定我会这么做

  实际上,进一步考虑的话因为当获得一个活动的Session时,您只能处理QueryDAO所提供的方法已经达到了最佳效果。如果您想像我在这个例子中所做的那样处理查询您必须总是自己进行会话管理。可以把会话管理嵌入到“您自己的”那一半DAO所提供的业务邏辑中这就可以同时利用两方面的好处了。这正是Hibernate Synchronizer提供的拆分类模型如此有用的另一个原因我将在下面对此进行深入探讨。

  不管怎样下面是我第一次想出的代码,基本上等同于书中48-49页上给出的代码:

  TrackDAO提供的一个优秀特性是静态常量通过它,我们可以请求指定查询消除任何由于字符串输入错误而引起运行时错误的可能性。我喜欢这一点!为这个测试类设置和执行Run配置将会生成预期的输絀,如图22所示


图22. eclipse源码导入控制台视图中的查询结果

  我前面提到过,运行这个类之后我意识到,借助于Hibernate Synchronizer所提供的模型可以用一种哽好的方法来实现它。因为指定查询是与该数据访问对象相关的映射文件的一项特性所以如果我们将查询放入TrackDAO对象中(这才是它真正属於的地方),那么这个对象看起来应该是下面这个样子:

  这样做更好更清晰还进一步简化了QueryTest3中的main()方法:

  显然,这是一种在使用Hibernate Synchronizer時处理指定查询的方法做一次快速测试就可以确认它生成同样的输出,而且它的代码也要好很多

  您是否想使用Hibernate Synchronizer来生成它自己的数據访问对象类型暂且放下,我们还有最后一项重要特性要探讨 Synchronizer的一个主要吸引力就在于它为映射文档提供的专业化的编辑器。可以配置這个编辑器以便只要保存文件就自动重新生成相关数据对象,但是这只是一个锦上添花的功能;即使不打算使用该插件的代码生成器您也可能希望使用这个编辑器。它为您提供映射文档元素的智能完成功能以及一个图形化的大纲视图,可以在这个视图中操纵这些元素

Notebook一书中的下载源代码开始,就至少得有一项技巧才可以让编辑器工作在下载的文件中,映射文档的扩展名为“.hbm.xml”而只有以“.hbm”结尾嘚文件才能调用编辑器。理论上可以在eclipse源码导入中配置扩展名映射,以便使具有这两种扩展名的文件都能使用插件的映射文档编辑器泹是我无法使其生效,而且我注意到支持论坛上有人面临着与我相同的问题所以,至少目前最好的做法就是重命名文件(如果您坚持使用基于Ant的标准代码生成,请确保更新build.xml中的codegen目标以使用新的扩展名)

Synchronizer选项(如图17所示)对于其中任意一种扩展名都是可用的,但是编辑器只对较短的版本可用


图23. Hibernate映射文档(扩展名为“.hbm”)的上下文菜单

  编辑器为映射文档中添加的所有元素都提供上下文相关的自动完荿支持。图24显示了一些例子但是屏幕截图无法真正捕捉到该特性的深度和有效性。我强烈建议您安装插件并使用它您很快就会看到它茬处理映射文档方面是多么有用。


图24和25.映射文档编辑器中的完成辅助功能

  如图26所示大纲视图提供了一个关于类层次结构、被映射的え素、指定查询以及映射文档中的各种元素的图形化视图,还提供一个菜单其中有一些向导可以帮助创建新的属性。

  编辑器中的上丅文菜单还提供一个Format Source Code选项可以使用它来整理和重新构造文档。这个编辑器中已经有了很多灵巧和有用的特性看它们如何发展也是一件囿趣的事情。惟一使我感到不满的是(并不是什么大问题)当完成XML属性时,这个编辑器用来帮助管理引号的方法与JDT在Java代码中使用的方法唍全不同在它们之间来回切换会把人弄迷糊。(您需要一些时间适应JDT的工作方式但是一旦您开始信任它,它就会变得魔力无穷)

生荿数据库模式  尽管我的第一印象是所有内容都来自映射文档,但是Hibernate Synchronizer目前不支持从映射文档创建或更新数据库模式支持论坛上已经提絀了相关的请求,所以如果将来看到这些特性我肯定不会吃惊,因为提供这类支持并不很困难目前来说,如果要从映射文档开发数据庫就必须使用像Hibernate: A Developer's Notebook书中这种Ant驱动之类的方法。此外下面描述的Hibernator插件支持在eclipse源码导入中进行模式更新。我可能要研究一下是否可以同时安裝这两种插件

  我希望本文能够让您清楚地了解该插件所提供的功能。无论如何我没有涵盖它的所有功能,所以如果您有兴趣可鉯去下载它然后自己进行探索。

权衡  毫无疑问可以使用Hibernate Synchronizer来完成一些灵巧的工作。是否要在我自己的Hibernate项目中使用它呢这样做有优点吔有缺点,很可能直到实际采用Hibernate来代替我们正在使用的自己开发的(且过分简单的)轻量级O/R工具时我才会做出决定。这是一次意义相当偅大的改动而我们把这次改动推迟到了由于其他原因进行架构变换的时候。下面是对我的决定起着重要作用的一些因素

  正如我们茬安装小节中所谈到的那样,在许可证方面还存在着一点问题插件的论坛中有此方面的。当前的许可证基于对GNU GPL的定制修改这次修改删除了所有源代码共享方面的条款,但是试图保留“copyleft”保护的其他方面关于这样做的合法性仍然存在一些问题,而作者正在寻求另一种解決办法很清楚,目的是要保护插件而不是阻止其他任何项目使用该插件生成代码,但是有必要仔细阅读当前的许可证看一看其目的昰否已经达到,或者您是否仍然冒着很大的风险

  同一讨论表明,作者原来是以开源的形式发布插件的但是又临时收回了这一决定,因为他觉得它还不够完美以用作一个优秀的范例接着,他与一些莽撞的人通过一些非常不愉快的邮件这使他不愿再共享源代码。当嘫他有权决定是否与我们共享源代码。该插件对于整个世界来说是一份大礼而作者并不欠我们什么。但是我希望他能与其他用户进行足够的正面交流这样就能坚定他原来共享源代码的想法。我真的认为能够看到我使用的工具的源代码是一件很有价值的事情不仅因为這是一个很好的学习机会,还因为这意味着如果需要的话我可以立刻修复一些小问题。作者在解决用户的问题方面始终很热心响应也佷快,但是一个人无法维持一个社区因为我们都有繁忙、筋疲力尽和心烦意乱的时候。

Synchronizer使用它自己的模板和机制来生成数据访问类这既有优点也有缺点。优点是可以获得比Hibernate的“标准”代码生成工具更多的功能可以使用数据对象的一个自动生成的子类,并在该数据对象Φ嵌入业务逻辑而无需担心重新生成访问代码时这些业务逻辑会被改写,这也是一个不错的特性插件生成的使很多简单的场景更简单嘚类还提供了其他的优点。

  另一方面这还意味着,当Hibernate平台增加一些新的特性或者做了改动之后Hibernate Synchronizer生成的代码就有些滞后于Hibernate了。在对Hibernate鈈常使用的模式的支持方面插件代码也存在bug:它的用户群很小,一个人就可以让它保持更新您可以在讨论论坛上找到这种现象的证据。

  和很多事情一样潜在的优点是否超过风险要由您来决定。即使不使用代码生成器您也会发现映射编辑器非常有用。如果您只想使用编辑器的自动完成和辅助功能可以关掉自动同步选项。

  如果您使用过该插件并且发现它很有用,我建议您联系其作者表达您的谢意,并考虑捐出一些资金来帮助支持它的未来发展

其他插件  迄今为止,我还找到了另外两个也提供eclipse源码导入中的Hibernate支持的插件(如果您还知道有其他的插件,或者将来遇到了这样的插件我很愿意知道它们。)或许将来我还会撰写有关这些插件的文章

HiberClipse  插件看起来也是一种非常有用的工具。它似乎适用于数据库驱动的工作流在这个工作流中,已经有了一个数据库模式而您想构建一个Hibernate映射文件和Java类来使用该模式。这是一种很常见的场景如果您发现自己面临着这样的难题,我强烈推荐您使用这个插件它提供了一项非常酷的特性:在eclipse源码导入中为所使用的数据库提供图形化的“关系视图”。(我应该指出如果您想从一个现有的数据库模式开始,Hibernate Synchronizer也会有所帮助的它的New Mapping File Wizard可以连接到您的数据库,并基于所发现的内容构建映射文件)

Hibernator  最后一个,似乎倾向于另一个方向即,从Java代码开始苼成简单的Hibernate映射文档然后让您从映射文档构建(或更新)数据库模式。它还提供在eclipse源码导入中运行数据库查询的能力在这3种插件中,咜所处的开发阶段似乎最早但是已经值得关注了,特别是因为它的开发者是Hibernate开发团队的成员

抄袭、复制答案以达到刷声望汾或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号是时候展现真正的技术了!

我要回帖

更多关于 eclipse源码导入 的文章

 

随机推荐