本书写了一个常用的Spring整合Hibernate的方法,主要修改spring的xml配置文件。
Hibernate的连接、事务管理等都是由建立SessionFactory开始的,SessionFactory在应用程序中通常只需存在一个实例,因而SessionFactory底层的DataSource可使用spring的IOC注入,之后再把SessionFactory注入到相依赖的对象之中。
<beans>
<!-- 数据源配置 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo"/>
<property name="username" value=""/>
<property name="password" value=""/>
</bean>
<!-- SessionFactory of Hibernate -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
destroy-method="close">
<property name="dataSource" ref="dataSource"/>
<!-- 映射文件 -->
<property name="mappingResources">
<list>
<value>User.hbm.xml</value>
<value>Product.hbm.xml</value>
</list>
</property>
<!--
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com/test</value>
</list>
</property>
-->
<!-- 指定数据库类型 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
</bean>
<!-- 使用举例,对DAO类注入sessionFactory -->
<bean id="userDAO" class="com.test.UserDAO">
<property name="sessionFactor" ref="sessionFactory"/>
</bean>
</beans>
整合的好处,可以直接将DataSource注入至LocalSessionFactoryBean中,至于Hibernate所需的相关设置,则可通过
LocalSessionFactory相关属性来设置。省略了hibernate.cfg.xml文件。
映射文件(指定对象与其关联的表格)的位置与名称
指定在mappingResources中。使用
mappingDirectoryLocations属性,可以
一次性指定某路径下得所有.hbm.xml文件。
补:如果想保留hibernate.cfg.xml,可以将hibernate的配置单独放在该文件中,在applicationContext.xml中引用该文件。如下:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
补充:spring运用在web应用中,只需修改web.xml,添加spring的配置文件及监听器即可。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>