分析一段以前的配置(精读)

本文详细解析了Spring与Hibernate整合配置的关键要素,包括数据源、SessionFactory、事务管理器等核心组件的设置方法,并深入探讨了Hibernate方言、SQL显示及缓存策略等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName"
   value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
  <property name="url"
   value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ITSM_JBPM;SelectMethod=cursor;" />
  <property name="username" value="sa" />
  <property name="password" value="sa" />
 </bean>

 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
  singleton="true">

<!-------

 问题一:property属性的名字能不能取成其他的名字?

mappingResources,  hibernateProperties,  dataSource

答案是: 不能随便取。

理由是:

package org.springframework.orm.hibernate3;

public class LocalSessionFactoryBean extends AbstractSessionFactoryBean {

 private Resource[] mappingLocations;

 private Properties hibernateProperties;

 private DataSource dataSource;

 public void setMappingResources(String[] mappingResources) {
  this.mappingLocations = new Resource[mappingResources.length];
  for (int i = 0; i < mappingResources.length; i++) {
   this.mappingLocations[i] = new ClassPathResource(mappingResources[i].trim());
  }
 }

 public void setHibernateProperties(Properties hibernateProperties) {
  this.hibernateProperties = hibernateProperties;
 }

 public void setDataSource(DataSource dataSource) {
  this.dataSource = dataSource;
 }

}

---->

  <property name="mappingResources">
   <list>
      <value>
          com/vandagroup/itsm/dataobject/attachment/ItsmAttachment.hbm.xml
      </value>

    <!-- ###################### -->
    <!-- # jbpm mapping files  以下是配置的一些工作流相关的信息# -->
    <!-- ###################### -->

    <!-- hql queries and type defs -->
    <value>org/jbpm/db/hibernate.queries.hbm.xml</value>

    <!-- graph.def mapping files -->
         <value>
                org/jbpm/graph/def/ProcessDefinition.hbm.xml
        </value>
       </list>

    <!-- # jbpm mapping files  这里不是我的重点。省略不提# -->
  </property>

  <property name="hibernateProperties">
   <props>
       <prop key="hibernate.dialect">
              org.hibernate.dialect.SQLServerDialect
       </prop>

<!-- # jbpm mapping files  这里是我的重点# -->

<!--

Hibernate SQL方言 (hibernate.dialect)

如果出现如下错误,则可能是Hibernate SQL方言 (hibernate.dialect)设置不正确。
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]'last_insert_id' 不是可以识别的 函数名。

RDBMS 方言
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect

-->

    <prop key="hibernate.show_sql">true</prop>

<!------

hibernate.show_sql 如果为true,表示在程序运行时,会在控制台输出SQL语句,这有利于跟踪Hibernate的运行状态,默认为false。在应用开发和测试阶段,可以把这个属性设为true,以便跟踪和调试应用程序,在应用发布阶段,应该把这个属性设为false,以便减少应用的输出信息,提高运行性能 

----->

    <prop key="hibernate.generate_statistics">true</prop>

<!------

hibernate.generate_statistics如果开启, Hibernate将收集有助于性能调节的统计数据. 取值 true | false

--->
    <prop key="hibernate.cache.use_second_level_cache">
     false
    </prop>

<------

hibernate.cache.use_second_level_cache能用来完全禁止使用二级缓存. 对那些在类的映射定义中指定<cache>的类,会默认开启二级缓存. 取值 true|false

--->
    <prop key="hibernate.cache.use_query_cache">false</prop>
   </props>

<!------

hibernate.cache.use_query_cache允许查询缓存, 个别查询仍然需要被设置为可缓存的. 取值 true|false

---->
  </property>
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
 </bean>

 <!-- transaction -->
 <bean id="TransactionProxyFactoryBean"
  class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyTargetClass">
   <value>true</value>
  </property>
  <property name="singleton">
   <value>false</value>
  </property>
  <property name="interceptorNames">
   <list>
    <value>transactionInterceptor</value>
   </list>
  </property>
 </bean>

 


 <bean id="transactionInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionAttributes">
   <props>
    <prop key="find*">
     PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly
    </prop>
    <prop key="*">
     PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
    </prop>
   </props>
  </property>
  <property name="transactionManager">
   <ref bean="hibernateTransactionManager" />
  </property>
 </bean>


 <bean id="hibernateTransactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>

<!----

package org.springframework.orm.hibernate3

public class HibernateTransactionManager extends AbstractPlatformTransactionManager
  implements ResourceTransactionManager, BeanFactoryAware, InitializingBean {

 private SessionFactory sessionFactory;

 /**
  * Set the SessionFactory that this instance should manage transactions for.
  */
 public void setSessionFactory(SessionFactory sessionFactory) {
  this.sessionFactory = sessionFactory;
 }

}

-->
 </bean>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值