23

想解开一些疑惑。我有applicationContext.xml。

问题 1: 1 和 2 有什么区别。它们都相同但方法不同吗?

问题2:

我在 Spring 论坛上就一些问题提出了问题。他提到的关于池的事情如下

如果您需要/想要使用内部连接池进行休眠,我建议您不要这样做,只需配置一个支持连接池的数据源并将其注入您的 sessionfactorybean。

休眠的内部连接池 =这是下面的 2 号。对?

只需配置一个支持连接池的数据源并将其注入您的 sessionfactorybean =这是下面的数字 1。对?

1# -

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="100"/>
        <property name="maxIdle" value="30"/>
        <property name="maxWait" value="16000"/>
        <property name="minIdle" value="0"/>
    </bean>

 <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="annotatedClasses">
            <list>
                <value>com.mkyong.customer.model.Customer</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">false</prop>
                <prop key="hibernate.generate_statistics">true</prop>
            </props>
        </property>
    </bean>

2# -

池和连接信息在 hibernate.cfg.xml 中

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
    </bean>
4

2 回答 2

10

答案1:

两种方法都是一样的。默认情况下,hibernate 从classpath:hibernate.cfg.xml构建中读取配置SessionFactoryLocalSessionFactoryBean只允许您在内部设置休眠配置,applicationContext.xml而不是hibernate.cfg.xml.

如果在两个文件中指定了相同的属性,则根据属性,它将具有令人上瘾的效果,或者在中指定的属性 将具有更高的优先级,从而将忽略applicationContext.xml其中的那些值 。hibernate.cfg.xml

对于方法一,annotatedClasses应该hibernateProperties有上瘾的效果,对应的值在hibernate.cfg.xml. 中的 DBCP 数据源applicationContext.xml应导致相关属性hibernate.cfg.xml被忽略。

答案 2:

对于方法 2,如果不指定 的任何属性LocalSessionFactoryBean,则所有的休眠配置都由hibernate.cfg.xml. 如果没有配置连接池hibernate.cfg.xml则默认使用hibernate自己的连接池算法,这是相当初级的,不适合在生产系统中使用,甚至不用于性能测试。

于 2012-09-28T08:09:55.820 回答
4

如果您想要构建一个会话工厂,那么这两种方法都会得到相同的结果。我不认为一个人能比另一个人做得更多。

在我看来,当你不使用 Spring 时,你会使用hibernate.cfg.xml方法。例如,当 JUnit 测试您的 DAO 时。不必构建 Spring 应用程序上下文使您的测试运行得更快。

但是,当您使用 Spring 时,我认为将数据源与会话工厂分开是一件好事。您正在使用 Spring 进行依赖注入,对吗?为什么不使用 spring 为您的会话工厂提供所需的东西?

于 2012-09-28T06:50:02.380 回答