java - 对于 spring 和 hibernate,需要澄清数据源和 session 是如何连接的

标签 java hibernate spring spring-mvc

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

现在我需要:

  1. 在 web.xml 中设置我的数据库连接
  2. 告诉 spring 我正在使用注释进行 hibernate 映射?
  3. 将 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 在代码中的什么位置使用?

我想创建一个扩展HibernateDaoSupportGenericDaoImpl。然后,我将创建扩展 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/

相关文章:

java - 在Java中检查输入是5、10、15、20、25还是30

java - 如何使用通用整数在类中创建整数对象

java - 为什么我的 H2 数据库/Spring 启动应用程序会收到 JdbcSQLException(非十六进制字符)?

Spring @Transactional 超时未超时

java - 在Maven项目中导入错误

java - 如何为DataStore设置jndi.properties?

java - 具有多个错误消息的 Spring hibernate 类型验证

angularjs - 使用 Spring MVC 在 Angular JS 中处理 session

css - 在 spring boot vaadin 应用程序中使用多个主题

java - hibernate中的Session、Connection对象到底是什么