我將展示我一起使用這些框架的方式。我避免了HibernateTemplate的需要,我認爲這個類太有限了,我更喜歡直接使用Session。
一旦你的項目中有Spring,它應該在你的Daos中注入Hibernate SessionFactory,這樣你就可以處理Session。首先,你需要配置SessionFactory在你的applicationContext.xml:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
現在你可以用@Autowired註解注入的SessionFactory:
@Repository
public class HibernateProductDao implements ProductDao {
private final SessionFactory factory;
@Autowired
public HibernateProductDao(final SessionFactory factory) {
this.factory = factory;
}
public List<Product> findAll() {
return factory.getCurrentSession().createCriteria(Product.class).list();
}
public void add(final Product product) {
factory.getCurrentSession().save(product);
}
}
這裏有一些重要的事情,你應該使用方法getCurrentSession(),因爲這樣你就可以讓Spring控制Session的生命週期。如果你使用getSession()來代替它,它就成爲你的責任,例如關閉會話。
現在,讓我們配置的Struts 2.在你的web.xml:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
您需要的文件struts.xml中也說,春節將製造對象:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
</struts>
最後,您可以在您的動作中注入Dao:
public class ProductAction {
private ProductDao dao;
@Autowired
public ProductAction(ProductDao dao) {
this.dao = dao;
}
}
當然,由於您使用Spring註釋,用component-scan掃描軟件包。
這是我發現整合這個框架的最佳方式,我希望這很有幫助。
您的場景是否涉及在UI層上打開Hibernate會話?如果是這樣,你應該考慮[Open View in View](http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/support/OpenSessionInViewFilter.html)模式。它可以通過Spring輕鬆配置。 – izilotti
我在問會話休眠(Dao連接 - 查詢執行) – softmage99