下面介绍一下hibernate与spring的集成,这两个框架的集成关键在于applicationContext.xml文件的配置,其实很简单的,但需要注意的是,导入包时一定选择导入到webroot/web-inf/lib目录中,而且hibernate一般要在spring之前导入,因为集成时要用到sessionFactory类,
一、初始化工作:新建一个项目,如(ssh),在此项目中导入对hibernate的支持,新建一个表sstest表,有字段id,username,password,id为主健和自动增1
二、对新建的数据表进行hibernate进行映射,打开myhibernate视图,右击你sstest表->选hibernate revers engineering选项,然后把Sstest.hbm.xml文件映射到hibernateDao包中,同时选中工具 hibernate mapping file...,  java data object.....,  java data access object dao...选项,先中这几个文件就可以产生下列几个.java文件:BaseHibernateDAO. ,HibernateSessionFactory ,IBaseHibernateDAO, Sstest,SstestDAO,最后你对你的代码进行测试,测试成功,进行下一步
三、在项目中导入对spring的支持,在导入项目后不但要自动产生applicationContext.xml,而且在这个文件里会出现下面的内容:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation" value="classpath:hibernate.cfg.xml">   
  </property>
 </bean>
这就是为什么要先要导入hibernate的原因
四、若你对spring的ioc比较熟,你可以直接进入下一步,如果不是很了解,那么你可以写一个比较简单的例子测试一下看是否成功,必竟框架和在一起,所以小心点好,不然在以后出了有问题不好找
五、进入myeclipse hibernate视图下,在新的包(如springDao)中重新对sstest表进行映射,这次映射要注意的就是:打开hibernate reverse engineering对话框中复选按钮java data access object(dao)(hibernate 3 only)下,dao type 不是选basic dao选项,而是选spring dao选项,当你映射成功后,就会出现Sstest.java, SstestDAO.java, Sstest.hbm.xml几个文件,你可以写一个类进行测试,如:
springdaotest.java

package org.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import springDao.Sstest;
import springDao.SstestDAO;

public class SpringDaoTest {
 public static void main(String a[]){
  ApplicationContext cont = new ClassPathXmlApplicationContext("applicationContext.xml");
  SstestDAO  s = (SstestDAO) cont.getBean("SstestDAO");
   SstestDAO  s = (SstestDAO) cont.getBean("SstestDAOProxy");
  Sstest st = new Sstest();
  st.setUsername("spring");
  st.setPassword("spring");
  s.save(st);   
 } 
}
六、由于映射了两次,所以你要在hibernate.cfg.xml文件中,把原来映射的文件注解掉:
<mapping resource="hibernateDao/Sstest.hbm.xml" />
因为现在已有一行这样的代码:
<mapping resource="springDao/Sstest.hbm.xml" />
七、实现hibernate spring 代理,加上下面的代码即可:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory"/>
  </property>
 </bean>
 <bean id="SstestDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="proxyTargetClass">
   <value>true</value>
  </property>
  <property name="transactionManager">
   <ref bean="transactionManager"/>
  </property>
  <property name="target">
   <ref local="SstestDAO"/>
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
 </bean>
在进行测试,测试时,还是用原来的类,只需把SstestDAO  s = (SstestDAO) cont.getBean("SstestDAO");变成
SstestDAO  s = (SstestDAO) cont.getBean("SstestDAOProxy");这次的bean是用的代码类实现
下面是完整的代码:
在这个实例中hibernate包中的文件BaseHibernateDAO. ,HibernateSessionFactory ,IBaseHibernateDAO, Sstest,SstestDAO, Sstest.hbm.xml ,和在一个简单的struts,hibernate例子以及struts,hibernate集成中的文件是一样的,代码一样,下面是一些其它代码:
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation" value="classpath:hibernate.cfg.xml">   
  </property>
 </bean>

 <!-- spring dao -->
 <bean id="SstestDAO" class="springDao.SstestDAO">
  <property name="sessionFactory">
   <ref bean="sessionFactory"/>
  </property>
 </bean>
 <!-- hibernate 3 事务代理 -->
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory"/>
  </property>
 </bean>
 <bean id="SstestDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="proxyTargetClass">
   <value>true</value>
  </property>
  <property name="transactionManager">
   <ref bean="transactionManager"/>
  </property>
  <property name="target">
   <ref local="SstestDAO"/>
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
 </bean>
</beans> 
测试类:SpringDaoTest.java

package org.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import springDao.Sstest;
import springDao.SstestDAO;

public class SpringDaoTest {
 public static void main(String a[]){
  ApplicationContext cont = new ClassPathXmlApplicationContext("applicationContext.xml");
  //SstestDAO  s = (SstestDAO) cont.getBean("SstestDAO");
  //代理类
  SstestDAO  s = (SstestDAO) cont.getBean("SstestDAOProxy");
  Sstest st = new Sstest();
  st.setUsername("spring");
  st.setPassword("spring");
  s.save(st);   
 }