我的DAO将扩展spring提供的HibernateDaoSupport类。

现在我需要:


在web.xml中设置我的数据库连接
告诉spring我正在使用注释进行休眠映射吗?
将会话连接到HibernateDaoSupport对象。


该文档显示了一个示例xml:

<beans>

  <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
  </bean>

  <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    <property name="mappingResources">
      <list>
        <value>product.hbm.xml</value>
      </list>
    </property>
    <property name="hibernateProperties">
      <value>
        hibernate.dialect=org.hibernate.dialect.HSQLDialect
      </value>
    </property>
  </bean>

</beans>


因此,“ mydatasource”配置与数据库的连接,而mySessionFactory设置会话。

我感到困惑的是,这些bean在代码中的哪里使用?

我想创建一个扩展GenericDaoImplHibernateDaoSupport。然后,我将创建扩展GenericDaoImpl的EntityDaoImpl

只是对内部使用“ mydatasource”和“ mysessionFactory”的位置感到困惑。它们都不应该是HibernateDaoSupport的属性吗?

最佳答案

他们都不应该都是
  HibernateDao支持吗?


好吧,SessionFactory应该。 DAO不需要DataSource,因为SessionFactory在内部使用。您自己的代码应该不需要原始的DataSource,因此不必将其注入。

您的DAO(扩展了HibernateDaoSupport)需要注入SessionFactory bean,例如

public class DaoA extends HibernateDaoSupport {
   // business methods here, that use getHibernateTemplate()
}

public class DaoB extends HibernateDaoSupport {
   // business methods here, that use getHibernateTemplate()
}




<bean id="daoA" class="DaoA">
   <property name="sessionFactory" ref="mySessionFactory"/>
</bean>

<bean id="daoB" class="DaoB">
   <property name="sessionFactory" ref="mySessionFactory"/>
</bean>

10-07 19:09