1.Spring 整合 Hibernate 整合什么?
1)有IOC容器来管理Hibernate 的 SessionFactory
2)让Hibernate使用上Spring的声明式事务
2.整合步骤
1)加入Hibernate
Hibernate官网:http://hibernate.org/
① 添加jar包
c3p0-0.9.0.4.jar
ojdbc14.jar
antlr-2.7.7.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.2.Final.jar
hibernate-core-4.2.4.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.1.Final.jar
② 添加Hibernate 的配置文件:Hibernate.cfg.xml
<!-- 配置hibernate的基本属性 -->
<!-- 1.数据源需配置到IOC容器中,所以此处不再需要配置数据源 -->
<!-- 2.关联的.hbm.xml也在IOC容器配置SessionFactory实例时进行配置 -->
<!-- 3.配置hibernate的基本属性:
方言(hibernate.dialect),
SQL显示(hibernate.show_sql)
及格式化(hibernate.format_sql),
生成数据表的策略(hibernate.hbm2ddl.auto)
以及二级缓存等 -->
③ 编写了持久化类对应的 .hbm.xml 文件。
2)加入Spring
① 加入jar包
com.springsource.net.sf.cglib-2.1.3.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-logging-1.2.jar
spring-aop-4.0.2.RELEASE.jar
spring-aspects-4.0.2.RELEASE.jar
spring-beans-4.0.2.RELEASE.jar
spring-context-4.0.2.RELEASE.jar
spring-core-4.0.2.RELEASE.jar
spring-expression-4.0.2.RELEASE.jar
spring-jdbc-4.0.2.RELEASE.jar
spring-orm-4.0.2.RELEASE.jar
spring-tx-4.0.2.RELEASE.jar
spring-web-4.0.2.RELEASE.jar
spring-webmvc-4.0.2.RELEASE.jar
② 加入Spring的配置文件
applicationContext.xml
3)整合
① 配置数据源(此处使用资源文件配置)
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean>
② 配置hibernate的SessionFactory 实例 ,通过Spring提供的LocalSessionFactoryBean进行配置
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 1.配置数据源属性 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 2.配置hibernate配置文件的位置及名称 -->
<!--<property name="configLocation" value="classpath:hibernate.cfg.xml"></property> -->
<!--在不使用hibernate配置文件情况下,可以通过以下方式配置hibernate的属性-->
<!-- 使用hibernateProperties 属性来配置 Hibernate原生的属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 3.配置hibernate映射文件的位置及名称,可以使用通配符 -->
<property name="mappingLocations"
value="classpath:com/nhh/spring/hibernate/entities/*.hbm.xml"></property>
</bean>
③ 配置Spring的声明式事务
<!-- 1.配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 2.配置事务属性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 3.配置事务切点,并把切点和事务属性关联起来 -->
<aop:config>
<aop:pointcut expression="execution(* com.nhh.spring.hibernate.service.*.*(..))"
id="txPointCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>