扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Eclipse重新启动之后,可以关闭Install/Update透视图。打开一个使用Hibernate的Java项目。如果您读过Developer's Notebook一书中的例子,那么有几个目录可供选择。我将选用第3章中的例子,因为这一章是可以在线阅读的样章。您还可以从该书的站点下载所有例子的源代码。
如果您准备创建一个新的Eclipse项目,以便使用示例源代码目录中的一个,只需选择File -> New -> Project。选择创建一个Java项目,然后单击Next,为其命名(我使用的是“Hibernate Ch3”,如图11所示),取消对Use default复选框的选择,以便可以告诉Eclipse现有项目目录的位置,然后单击Browse按钮,定位它在驱动器上的具体位置。现在可以单击Finish,创建该项目,但是我一般喜欢单击Next,然后再次检查Eclipse的选择。(当然,如果有什么出错,您始终可以返回并修改项目属性,但是我发现,如果存在库丢失之类的错误,马上就会面对大量的错误和警告,这实在是一件麻烦的事情。)
图11. 创建一个使用Hibernate的新项目
此处我的警告是多余的。Eclipse清楚目录的架构及用法,还找出了我曾下载和安装过的所有第三方库,以便让Hibernate和HSQLDB数据库引擎能够运行。(该过程的详细情况可以参见Developer's Notebook一书的第1章。)这种智能适应性是Eclipse的重要特性之一。图12显示我们的新项目已经打开并准备好用于实验了。它还显示,Eclipse不喜欢把窗口缩到足够小以适应适当的屏幕快照。从现在起,我只能捕捉窗口的一部分。
图12. 第3章中的示例项目
接下来要创建一个Hibernate Synchronizer可以使用的Hibernate配置文件。src目录中已经存在一个hibernate.properties文件,它说明了书中例子的配置,但是Hibernate Synchronizer只能使用Hibernate的基于XML的配置方法。所以,我们需要把hibernate.properties文件的内容复制到一个新的hibernate.cfg.xml文件中去。从好的方面来说,这使我们可以见识Hibernate Synchronizer的一项特性,即配置文件向导。选择File -> New -> Other,单击新可用的Hibernate类别,选中Hibernate Configuration File,然后单击Next。
图13. 启动Hibernate Configuration File向导
当向导启动后,它所提供的用于放置文件的目录取决于当前在Eclipse中选中的文件。出于一致性方面的考虑,一定要把它和properties版本一起放在顶级的src目录中。填入向导所需的其余信息,匹配配置的properties版本,如图14所示。注意,与使用Ant控制Hibernate的执行(这是Developer's Notebook一书中所使用的方法)不同,当调用Hibernate时,我们无法控制当前的工作目录,所以需要在URL中使用一条到数据库文件的完全限定路径。我使用的值是(有点难看):jdbc:hsqldb:/Users/jim/Documents/Work/OReilly/Hibernate/Examples/ch03/data/music。(如果有人能告诉我如何让Eclipse或Hibernate Synchironizer对一个项目使用特定的工作目录,我肯定会很感兴趣。我在Eclipse方面还是一个新手,所以如果知道这种情况是可能的,只是我不知道如何去做,我肯定不会感到吃惊。)
图14. 填写配置文件的详细信息
填写Driver Class时有一点奇怪:需要单击Browse按钮,并开始输入驱动程序的类名。如果输入“jdbcD”,窗口将只会给出两个选择,很容易就可以找出正确的选择,如图15所示。
图15. 指定HSQLDB驱动程序类
按照图14所示设置适用于您自己的安装的值之后,就可以单击Finish来创建配置文件。Hibernate Synchronizer现在已经可以使用了。它打开了创建的文件,所以可以看到一个Hibernate的XML配置文件的结构和详细信息。
图16. 生成的配置文件
一种快速测试该配置是否生效的方式是使用其他的向导界面。选择File -> New -> Other,单击新可用的Hibernate类别,选中Hibernate Mapping 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代码生成工具生成的类要多很多,这有一些优点以及一些潜在的缺点,在稍后的权衡部分中我们将讨论这些。还要注意,可以在项目的属性配置中选择生成其中的哪些类,以及生成它们的包结构。我本来应该演示一下的,但是当前的插件版本有一个bug,它阻止了在Mac OS X上对这个配置界面进行访问。补丁已经开发出来了,但尚未发布。
基于Hibernate Synchronizer页面上的例子与下面的类,我试图使用这些新的数据访问对象插入一些数据到音乐数据库中。这十分类似于使用标准Hibernate代码生成器的版本(在Hibernate: A Developer's Notebook一书的39-40页),甚至更为简单,因为Hibernate Synchronizer生成的类针对每项数据库操作都创建并提交了一个新事务,所以在像这样简单的场境中,您不需要编写代码来设置事务。(当然了,要让一组操作作为单个事务运行,有很多种方法。)下面是新版本的代码:
package com.oreilly.hh;
import java.sql.Time;
import java.util.Date;
import net.sf.hibernate.HibernateException;
import com.oreilly.hh.dao.TrackDAO;
import com.oreilly.hh.dao._RootDAO;
/**
* Try creating some data using the Hibernate Synchronizer approach.
*/
public class CreateTest2 {
public static void main(String[] args) throws HibernateException {
// Load the configuration file
_RootDAO.initialize();
// Create some sample data
TrackDAO dao = new TrackDAO();
Track track = new Track("Russian Trance", "vol2/album610/track02.mp3",
Time.valueOf("00:03:30"), new Date(), (short)0);
dao.save(track);
track = new Track("Video Killed the Radio Star",
"vol2/album611/track12.mp3", Time.valueOf("00:03:49"), new Date(),
(short)0);
dao.save(track);
// We don't even need a track variable, of course:
dao.save(new Track("Gravity's Angel", "/vol2/album175/track03.mp3",
Time.valueOf("00:06:06"), new Date(), (short)0));
}
}
当我编写这些代码时,可以使用Eclipse是一件十分惬意的事情。我已经忘了当我为书籍编写例子时,我多么希望可以使用智能代码完成功能,而且JDT在其他方面也同样能帮上忙。
为了在Eclipse中运行这个简单的程序,我们需要设置一个新的Run配置。选择Run -> Run...,把CreateTest2.java作为当前的活动编辑器文件。单击New,Eclipse就会知道我们想要在当前项目中运行这个类,因为我们使用main()方法创建它。它指定的默认名称是CreateTest2。界面应该如图19所示。单击Run,试着创建一些数据。
图19.准备好在Eclipse中运行我们的创建测试
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者