2011-08-23 126 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