SessionFactory

1 Hibernate 的核心接口之一

SessionFactory 接口:SessionFactroy 接口负责初始化 Hibernate 。它充当数据存储源的代理,并负责创建Session 对象。这里用到了工厂模式。需要注意的是SessionFactory 并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory 就够,当需要操作多个数据库时,可以为每个数据库指定一个 SessionFactory

 

 

2  管理 SessionFactory

SessionFactory :单个数据库映射关系编译后的内存镜像。大部分情况下,一个J2EE 应用对应一个数据库。Spring 通过ApplicationContext 管理SessionFactory ,无须采用单独Hiberate 应用必需的hibernate.cfg.xml 文件。

SessionFactory 与数据库的连接,都由Spring 的配置管理。实际的J2EE 应用,通常使用数据源,数据源会采用依赖注入的方式,传给HibernateSessionFactory 。具体配置如下所示:

<?xml version="1.0" encoding="gb2312"?>

<!--  Spring 配置文件的 DTD 定义 -->

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

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

<!--  Spring 配置文件的根元素是 beans-->

<beans>

         <!-- 定义数据源 , bean ID dataSource-->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource>

                   <!--  指定数据库驱动 -->

<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>

                   <!--  指定连接数据库的 URL-->                 

           <property name="url"><value>jdbc:mysql://wonder:3306/j2ee</value></property>

                   <!--  root 为数据库的用户名 -->

           <property name="username"><value>root</value></property>

                   <!--  pass 为数据库密码 -->

           <property name="password"><value>pass</value></property>

    </bean>

         <!-- 定义 Hibernate SessionFactory-->

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

           <!--  依赖注入数据源,注入正是上文定义的 dataSource>

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

                   <!--  mappingResouces 属性用来列出全部映射文件 >

           <property name="mappingResources">

                <list>

                     <!-- 以下用来列出所有的 PO 映射文件 -->

                                     <value>lee/MyTest.hbm.xml</value>

                </list>

           </property>

          <!-- 定义 Hibernate SessionFactory 的属性 -->

           <property name="hibernateProperties">

                    <props>

                                     <!--  指定 Hibernate 的连接方言 -->

                                     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

<!--  不同数据库连接,启动时选择 create,update,create-drop-->

                         <prop key="hibernate.hbm2ddl.auto">update</prop>

                    </props>

        </property>

    </bean>

</beans>

SessionFactory ApplicationContext 管理,会随着应用启动时候自动加载。SessionFactory 可以被处于ApplicaionContext 管理的任意一个bean 引用,比如DAOHibernate 的数据库访问需要在Session 管理下,而SessionFactorySession 的工厂。Spring 采用依赖注入为DAO 对象注入SessionFactory 的引用。

Spring 更提供Hibernate 的简化访问方式,Spring 采用模板设计模式,提供Hibernate 访问与其他持久层访问的一致性。如果需要使用容器管理的数据源,则无须提供数据驱动等信息,只需要提供数据源的JNDI 即可。对上文的SessionFactory 无须任何修改,只需将dataSource 的配置替换成JNDI 数据源,将原有的dataSource Bean 替换成如下所示:

<!--  此处配置 JNDI 数据源 -->

<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

         <property name="jndiName">

                   <!--  指定数据源的 JNDI-->

                   <value>java:comp/env/jdbc/myds</value>

         </property>

</bean>

 

猜你喜欢

转载自wuguowei1314.iteye.com/blog/1104636