2013-01-03 40 views
0

我在我的项目中使用了struts2-spring-hibernate。 我处理过春天数据库连接,所以我不需要hibernate.cfg.xml中 我要执行我的查询,而我需要的结果如何在Hibernate中打开会话执行查询

我获得成功的结果,通过使用这些方法

手动打开和关闭会话: 1. Session session = sessionFactory.openSession(); 2. Session newSession = HibernateUtil.getSessionFactory()。openSession();

手动不处理会话 1. getHibernateTemplate()。find(); 2. getSession()。createSQLQuery();

我不知道哪种方法最好一个,请建议我,哪一个是最适合会议

当会话将打开,并通过getHibernateTemplate()和密切的getSession()。

+0

您的场景是否涉及在UI层上打开Hibernate会话?如果是这样,你应该考虑[Op​​en View in View](http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/support/OpenSessionInViewFilter.html)模式。它可以通过Spring轻松配置。 – izilotti

+0

我在问会话休眠(Dao连接 - 查询执行) – softmage99

回答

0

我将展示我一起使用这些框架的方式。我避免了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扫描软件包。

这是我发现整合这个框架的最佳方式,我希望这很有帮助。

+0

嗨,我没有使用hibernate注释。 – softmage99

+0

这不是一个问题,在这个例子中我只使用了Spring注解。 –

+0

k谢谢,插入和更新,是交易提交需要? – softmage99

相关问题