你可以在Eclipse内运行Ant的target,方法是用右键单击包资源浏览器(Package Explorer)中的build.xml 文件,选择菜单中的运行Ant(Run Ant),然后在弹出对话框中选择你要运行的target,如图21所示。这个功能很cool。

图21 在Eclipse中运行Ant
查询数据相当简单、直白,即使Hibernate Synchronizer产生了很多辅助方法来使用指定查询,我认为这些没有什么用处,都是运行查询,然后返回包含结果的列表,而不是返回一个Query 对象,让你直接使用该对象。这使你不能使用任何Query提供的、方便的、类型安全(type-safe)的参数设置方法,因为这个,我打算让 _RootDAO对象提供一个Session对象,可以用“老式”的方法来使用Hibernate。公平来说,我认为如果编辑Hibernate Synchronizer 用来生成代码所使用的模板,就可以生成想要的任何方法,如果有一个项目,要用到该插件,可以肯定我会试着这么做。
实际上,进一步考虑,当你得到一个活动的Session时,你只能使用Query,而这些DAO对象已经提供为相应功能最佳的实现。如果你和我在例子中使用查询的方法一样,那就需要你自己来实现session管理。你能够把session管理内嵌于你自己所写的那一半DAO中,这样可以给你提供两方面的好处。(译者注:和有base的java POJO对象一样,对于DAO,该插件也生成一对类,一个base DAO给该插件用,一个是继承该base DAO的自定义DAO,你可以在其中添加商业逻辑)。这也是Hibernate Synchronizer把类分隔开来如此有用的另一个原因。对该插件的远见在下边做了一点研究
不管怎么说,下边是我第一次使用的代码,和书中48-49页上的代码功能基本一致:
package com.oreilly.hh;
import java.sql.Time;
import java.util.ListIterator;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import com.oreilly.hh.dao.TrackDAO;
import com.oreilly.hh.dao._RootDAO;
/**
* Use Hibernate Synchronizer's DAOs to run a query
*/
public class QueryTest3 {
public static void main(String[] args) throws HibernateException {
// Load the configuration file and get a session
_RootDAO.initialize();
Session session = _RootDAO.createSession();
try {
// Print the tracks that will fit in five minutes
Query query = session.getNamedQuery(
TrackDAO.QUERY_COM_OREILLY_HH_TRACKS_NO_LONGER_THAN);
query.setTime("length", Time.valueOf("00:05:00"));
for (ListIterator iter = query.list().listIterator() ;
iter.hasNext() ; ) {
Track aTrack = (Track)iter.next();
System.out.println("Track: \"" + aTrack.getTitle() +
"\", " + aTrack.getPlayTime());
}
} finally {
// No matter what, close the session
session.close();
}
}
}
