2011-08-23 112 views
1

嗨发现下面的论坛,介绍了不使用Spring冬眠模板:休眠Spring集成

http://forum.springsource.org/showthread.php?111771-what-is-the-difference-between-hibernate-template-and-hibernate-dao-support

它说:是不是因为这个版本它变得更加容易插件很好地冬眠, 春天需要一些挂羊头卖狗肉之前,代理方式和两轮牛车因为Hibernate 3.0.1, 不再需要

的的HibernateTemplate管理事务,线程绑定会话和异常转换。现在 与不再需要的新版本的hibernate,你仍然得到所有不错的东西例外翻译,会议管理 等,但没有使用任何春天特定的类。其中imho是 真的很不错,它使得春天的使用更加突兀。

我用HibernateTemplate和Dao支持,是否需要在新的应用程序中使用这些API?

我可以使用最新的一些示例代码来将Hibernate与Spring框架集成。

2)

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-hibernate-straight

此样式是类似的Hibernate参考文档和实施例,除了在一个实例变量持有了一个SessionFactory。我们强烈建议通过Hibernate的CaveatEmptor示例应用程序对老派静态HibernateUtil类进行基于实例的设置。

因为很多地方我们使用SessionFactory,这是获得会话的最佳方式,因为早些时候我使用HibernateUtil?

回答

1

使用Hibernate的Session工厂,而不是Hibernate的模板覆盖为:

public abstract class HomeSessionFactory { 

    @Autowired 
protected SessionFactory sessionFactory; 

} 

将此类扩展到您的xxDAOImpl文件中。

@Repository("LoginDetailsDAO") 
@Transactional 
public class LoginDetailsDAOImpl extends HomeSessionFactory implements LoginDetailsDAO { 
    @SuppressWarnings("unchecked") 
    @Transactional(readOnly = true) 
    public List<UserLogin> loginDetails(UserLogin login) { 
     Session session = sessionFactory.openSession(); 
     Transaction transaction = session.beginTransaction(); 
     List<UserLogin> result = session.createQuery("from UserLogin").list(); 
     transaction.commit(); 
     return result; 
    } 
} 

Spring上下文文件:

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref bean="dataSource" /> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
    </property> 
    <property name="annotatedClasses"> 
     <list> 
      <value>com.home.app.model.UserLogin</value> 
     </list> 
    </property> 
</bean> 
<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <value>properties/database.properties</value> 
    </property> 
</bean> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}" /> 
    <property name="url" value="${jdbc.url}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
</bean> 
2

在以前的Spring版本中,模板模型被用来为许多不同的框架(Hibernate,JPA,JMS等)提供一个通用的抽象。虽然这使开发变得简单,但它也将您的业务代码绑定到Spring框架。 Spring 3.x的目标之一是将你的应用程序代码与Spring分离,要求你尽可能少使用Spring特定的代码,这样可以使你的代码更加可重用。

推荐的集成风格是针对纯粹的 Hibernate,JPA和JDO API编码DAO。不再推荐使用Spring的DAO 模板。但是, 的覆盖范围可以在 附录的第A.1节“Classic ORM用法”中找到。
[Source]

Spring提供(事务管理,异常翻译等)现在怎么通过AOP,你不必担心它在你的代码的增强功能。该机制中描述:

13.3.2. Implementing DAOs based on plain Hibernate 3 API

,而传统的方法在

Classic ORM Usage: A.1.1.1 The HibernateTemplate