posts - 495,  comments - 11,  trackbacks - 0

          1Spring上下文中配置SessionFactory

          通過上文的描述,可以知道,Spring使用JdbcTemplate時必須和特定的數據源進行綁定。而在Hibernate中,數據源是對用戶屏蔽的,它使用一個稱為“Session”的強勁武器。

          Session具有建立或取消對象的持久關聯、同步對象狀態和數據庫以及事務管理等等復雜功能。SessionHibernate的核心概念,就如同SqlMap與之IBatis一樣。Session的創建依賴于HibernateSessionFactorySessionFactorySession一樣,也是Hibernate的核心組件。

          IBatis的整合方式一樣,Spring會將Hibernate基本配置文件中的數據源屬性抽離到Spring自身的配置文件中,以提供統一的數據源管理和注射。

          首先,給出Hibernate的配置文件,如代碼10.19所示。

          代碼10.19 hibernate.cfg.xml

          <?xml version='1.0' encoding='utf-8'?>

          <!DOCTYPE hibernate-configuration PUBLIC

          ??????? "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          ??????? "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

          <hibernate-configuration>

          <session-factory>

          <!-- Database connection settings -->

          <!--??? <property name="connection.driver_class">-->

          <!--????? org.postgresql.Driver-->

          <!--??? </property>-->

          <!--??? <property name="connection.url">-->

          <!--????? jdbc:postgresql://1210.0.0.1:5432/hibernate-->

          <!--??? </property>-->

          <!--??? <property name="connection.username">postgres</property>-->

          <!--??? <property name="connection.password">1111</property>-->

          ??? <!-- SQL dialect -->

          ??? <property name="dialect">

          ????? org.hibernate.dialect.PostgreSQLDialect

          ?? </property>

          ??? <!-- Echo all executed SQL to stdout -->

          ??? <property name="show_sql">true</property>

          ??? <!-- Drop and re-create the database schema on startup -->

          ??? <property name="hbm2ddl.auto">create</property>

          ??? <mapping resource="chapter7/hibernate/domain/Category.hbm.xml" />

          ??? <mapping resource="chapter7/hibernate/domain/Product.hbm.xml" />

          </session-factory>

          </hibernate-configuration>

          注意,代碼10.19中被注釋掉的部分,它將被抽離到了Spring的上下文配置文件,而其余部分則暫時保持不變。

          下面給出Spring的配置文件,如代碼10.20所示。

          代碼10.20 dataAccessContext-local.xml

          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

          "http://www.springframework.org/dtd/spring-beans.dtd">

          <beans>

          <bean id="propertyConfigurer"

          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

          ??? <property name="locations">

          ????? <list>

          ??????? <value>classpath:jdbc.properties</value>

          ????? </list>

          ??? </property>

          </bean>

          <bean id="dataSource"

          class="org.apache.commons.dbcp.BasicDataSource"

          destroy-method="close">

          ??? <property name="driverClassName" value="${jdbc.driverClassName}"/>

          ??? <property name="url"

          ??? value="jdbc:postgresql://127.0.0.1:5432/hibernate"/>

          ??? <property name="username" value="${jdbc.username}"/>

          ??? <property name="password" value="${jdbc.password}"/>

          </bean>

          <bean id="sessionFactory"

          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

          ??? <property name="dataSource" ref="dataSource"/>

          ??? <property name="configLocations">

          ????? <value>chapter7/spring/hibernate/hibernate.cfg.xml</value>

          ??? </property>

          <!--??? <property name="mappingResources">-->

          <!--????? <list>-->

          <!--??????? <value>chapter7/hibernate/domain/Category.hbm.xml</value>-->

          <!--??????? <value>chapter7/hibernate/domain/Product.hbm.xml</value>-->

          <!--????? </list>-->

          <!--??? </property>-->

          <!--??? <property name="hibernateProperties">-->

          <!--????? <props>-->

          <!--??????? <prop key="hibernate.dialect">

          ???????????????? org.hibernate.dialect.PostgreSQLDialect

          ?????????????? </prop>-->

          <!--??????? <prop key="show_sql">true</prop>-->

          <!--??????? <prop key="hbm2ddl.auto">create</prop>-->

          <!--????? </props>-->

          <!--??? </property>-->

          </bean>

          </beans>

          可以發現,從代碼10.19抽離出的數據源,現在換成了ApacheDBCP連接池。當然,也可以換作其他實現,比如從一個JNDI上獲取的數據源:

          <bean id="dataSource"

          class="org.springframework.jndi.JndiObjectFactoryBean">

          ??? <property name="jndiName" value="java:comp/env/jdbc/myds"/>

          </bean>

          Spring提供了LocalSessionFactoryBean來創建本地的Hibernate SessionFactory,這就類似于上節中介紹的SqlMapClientFactoryBean(它用以創建IBatisSqlMap)。當然也可以創建綁定在JNDI上的SessionFactory,不過這通常只在EJB環境下使用。

          注意:代碼10.20中被注釋掉的部分,如果不使用LocalSessionFactoryBeanconfigLocations屬性讀取Hibernate的原生配置文件,可由SpringLocalSessionFactoryBean負責配置Hibernate,它和hibernate.cfg.xml的作用完全一致,這時候就不需要Hibernate的原生配置了。

          posted on 2009-07-27 01:50 jadmin 閱讀(92) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 大洼县| 胶南市| 新巴尔虎左旗| 辽宁省| 昭平县| 武宣县| 楚雄市| 苏尼特左旗| 麻城市| 昌宁县| 盐源县| 古蔺县| 崇州市| 永善县| 澄迈县| 宜都市| 东乌珠穆沁旗| 灵璧县| 沁水县| 永胜县| 南安市| 于田县| 泉州市| 永德县| 漯河市| 湘西| 铜陵市| 华亭县| 松溪县| 乐昌市| 安西县| 定兴县| 巨野县| 遂宁市| 互助| 时尚| 山阴县| 彩票| 大宁县| 偏关县| 舒兰市|