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);
}
});
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;
}
}
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;
}
}