HibernateTemplate


Spring 在Hibernate上實現的Template-callback機制上提供有 org.springframework.orm.hibernate3.HibernateTemplate類別與 org.springframework.orm.hibernate3.HibernateCallback介面,一個使用的例子如下:
HibernateTemplate hibernateTemplate =
        new HibernateTemplate(sessionFactory);
...
hibernateTemplate.execute(new HibernateCallback() {
    public Object doInHibernate(
                Session session) throws HibernateException {
        return session.load(User.class);
    }
});

在HibernateTemplate上也提供有數個方便的方法,在呼叫時為您自動建立HibernateCallback物件,例如get()、save、delete()等方法,您可以改寫 SessionFactory 注入 的UserDAO類別,使用HibernateTemplate來簡化程式的撰寫:
  • UserDAO.java
package onlyfun.caterpillar;

import org.hibernate.SessionFactory;
import org.springframework.orm.
hibernate3.HibernateTemplate;

public class UserDAO implements IUserDAO {
private HibernateTemplate hibernateTemplate;

public void setSessionFactory(
SessionFactory sessionFactory) {
hibernateTemplate =
new HibernateTemplate(sessionFactory);
}

public void insert(User user) {
hibernateTemplate.save(user);
}

public User find(Integer id) {
User user =
(User) hibernateTemplate.get(User.class, id);

return user;
}
}

其它的檔案並不需要修改,執行的結果也是相同的,您必須在Classpath中加入spring-orm.jar檔案才可以執行。

您可以繼承org.springframework.orm.hibernate3.support.HibernateDaoSupport類別來撰寫 UserDAO類別,這可以幫您省去一些管理SessionFactory、HibernateTemplate資源的工作,您只要注入 SessionFactory的實例就可以了,例如將上面的UserDAO替代為以下的內容,則程式也是可以執行:
package onlyfun.caterpillar;

import org.springframework.orm.hibernate3.
                 support.HibernateDaoSupport;

public class UserDAO extends HibernateDaoSupport
                     implements IUserDAO {
   
    public void insert(User user) {
        getHibernateTemplate().save(user);
    }

    public User find(Integer id) {
        User user =
            (User) getHibernateTemplate().get(User.class, id);
       
        return user;
    }
}