想要澄清一些困惑。我有applicationContext.xml。
问题1: 1和1之间的区别是什么? 2.它们是否在不同方法上相同?
问题2:
我在Spring论坛上就一些问题提出了问题。他提到的有关汇集的内容如下:
如果您需要/想要使用内部连接池进行休眠 我会建议反对它,只需配置一个数据源 支持连接池并将其注入您的 sessionfactorybean。
hibernate = 的内部连接池这是下面的数字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>
答案 0 :(得分:10)
回答1:
两种方法都是一样的。默认情况下,hibernate会将配置从classpath:hibernate.cfg.xml
读取到构建SessionFactory
。 LocalSessionFactoryBean
只允许您在applicationContext.xml
内设置hibernate配置,而不是hibernate.cfg.xml
。
如果在两个文件中指定了相同的属性,则取决于属性,它将具有令人上瘾的效果,或者applicationContext.xml
中指定的属性将具有更高的优先级,以便hibernate.cfg.xml
中的这些值将被忽略
对于方法1,annotatedClasses
和hibernateProperties
应该会对hibernate.cfg.xml
中的相应值产生上瘾效果。 applicationContext.xml
中的DBCP dataSouruce应该会导致hibernate.cfg.xml
中的相关属性被忽略。
回答2:
对于方法2,如果未指定LocalSessionFactoryBean
的任何属性,则所有hibernate配置均由hibernate.cfg.xml
指定。如果hibernate.cfg.xml
,hibernate's own connection pooling algorithm is used by default中没有配置连接池,这是非常基本的,不打算在生产系统中使用,甚至不用于性能测试。
答案 1 :(得分:4)
如果您想要构建一个会话工厂,那么两种方法都会得到相同的结果。我不认为一个人可以比另一个人做得更多。
在我看来,当你不使用Spring时,你会使用 hibernate.cfg.xml 方法。例如,当JUnit测试你的DAO时。不必构建Spring应用程序上下文可以使测试运行得更快。
但是,当您使用Spring时,我认为将数据源与会话工厂分开是件好事。你正在使用Spring进行依赖注入,对吗?为什么不使用弹簧为您的会议工厂提供它所需要的东西?