我的 DAO 将扩展 spring 提供的 HibernateDaoSupport
类。
现在我需要:
- 在 web.xml 中设置我的数据库连接
- 告诉 spring 我正在使用注释进行 hibernate 映射?
- 将 session 连接到 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 设置 session 。
我感到困惑的是,这些 bean 在代码中的什么位置使用?
我想创建一个扩展HibernateDaoSupport
的GenericDaoImpl
。然后,我将创建扩展 GenericDaoImpl 的 EntityDaoImpl。
只是对内部使用“mydatasource”和“mysessionFactory”的位置感到困惑。它们不应该都是 HibernateDaoSupport
的属性吗?
最佳答案
Shouldn't they both be properties to HibernateDaoSupport?
嗯,SessionFactory
应该如此。 DAO 不需要 DataSource
,因为它由 SessionFactory
在内部使用。您自己的代码应该不需要原始 DataSource
,因此不必注入(inject)它。
您的 DAO(扩展 HibernateDaoSupport
)需要注入(inject) 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>
关于java - 对于 spring 和 hibernate,需要澄清数据源和 session 是如何连接的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3266318/