【问题标题】:With spring and hibernate, need clarification on how the datasource and session are wired使用 spring 和 hibernate,需要澄清数据源和会话的连接方式
【发布时间】:2010-07-16 15:15:16
【问题描述】:

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

现在我需要:

  1. 在 web.xml 中设置我的数据库连接
  2. 告诉 spring 我正在使用注解进行休眠映射?
  3. 将会话连接到 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 在代码中的什么地方被使用了?

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

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

【问题讨论】:

    标签: java hibernate spring spring-mvc


    【解决方案1】:

    它们不应该都是属性吗? HibernateDaoSupport?

    嗯,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>
    

    【讨论】:

    • 啊,好吧,但是由于我使用的是每个 EntityDao 都将继承的 GenericDao,所以我只需要执行一次!很酷。
    • 所以你说的“mydatasource”只是为了让“mysessionfactory”bean 引用,在代码中真的不应该有任何对“mydatasource”bean 的引用吗?它仅在 sessionFactory 的 .xml 中引用正确吗?
    • Spring 将要求您为要使用的每个 GenericDao 实现声明一个 - 否则 Spring 将不知道创建实例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多