正 文

在Eclipse中使用Hibernate插件


www.7dspace.com  更新日期:2005-11-1 4:26:48  七度空间



  TrackDAO为我们提供了一个很好的功能:静态常数,使用这个功能,可以用来进行指定查询(named query),这就消除了由于输入问题而导致运行时错误的任何机会。我欣赏这个功能。为该测试类设定运行配置,然后运行,输出结果正和我想的一样,如图 22所示。


图22 Eclipse控制台窗口显示的查询结果

  如上所述,这个类运行后,借助于Hibernate Synchronizer提供的模型,我想到有一个更好的方法可以实现这个功能。把查询放到TrackDAO中去,这里才是查询方法真正属于的地方,指定查询(named query)是和该DAO关联的映射文件的一个功能。

package com.oreilly.hh.dao;

import java.sql.Time;
import java.util.List;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;

import com.oreilly.hh.base.BaseTrackDAO;

/**
* This class has been automatically generated by Hibernate Synchronizer.
* For more information or documentation, visit The Hibernate Synchronizer page
* at http://www.binamics.com/hibernatesync or contact Joe Hudson at joe@binamics.com.
*
* This is the object class that relates to the TRACK table.
* Any customizations belong here.
*/
public class TrackDAO extends BaseTrackDAO {

    // Return the tracks that fit within a particular length of time
    public static List getTracksNoLongerThan(Time time)
        throws HibernateException
    {
        Session session = _RootDAO.createSession();
        try {
            // Print the tracks that will fit in five minutes
            Query query = session.getNamedQuery(
                QUERY_COM_OREILLY_HH_TRACKS_NO_LONGER_THAN);
            query.setTime("length", time);
            return query.list();
        } finally {
            // No matter what, close the session
            session.close();
        }
    }
}


  以上代码,看起来更好(nice)、更为清晰(clean),QueryTest3中的main()方法更是得到了大大简化

    public static void main(String[] args) throws HibernateException {
        // Load the configuration file and get a session
        _RootDAO.initialize();

        // Print the tracks that fit in five minutes
        List tracks = TrackDAO.getTracksNoLongerThan(Time.valueOf("00:05:00"));
        for (ListIterator iter = tracks.listIterator() ;
             iter.hasNext() ; ) {
            Track aTrack = (Track)iter.next();
            System.out.println("Track: \"" + aTrack.getTitle() +
                               "\", " + aTrack.getPlayTime());
        }
    }


  很清楚,这是在Hibernate Synchronizer中用到指定查询(named query)时所应采取的方法。很快测试一下就可以证实以上的代码输出同样的结果,而且这里的代码更好。
11页,页码:[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 

上一篇:浅议PHP程序开发中的模板选择
下一篇:Word入门动画教程20:用标尺调整页边距
作者:qiaoyu编译  来源:matrix ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐