Spring集成Hibernate 《Srping in action》阅读笔记

一,使用Hibernate模板

与hibernate进行交互的接口是org.hibernate.Session。这个Session接口提供了基本的数据访问功能,比如从数据库保存、更新、删除和加载对象。

获得Hibernate Session对象应用的标准方式是实现Hibernate的sSessionFactory接口。SessionFactory负责打开、关闭和管理Hibernate Session,以及其它一些功能。

Spring的HibernateTemplate在Hibernate Session之上提供了一个抽象层,其主要功能是简化打开和关闭Hibernate会话,并且把Hibernate的特定异常转化为Spring ORM异常之一。

 

典型的Hibernate映射文件:

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

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

  <property name="mappingResource">

    <list>

      <value>com/rason/Rant.hbm.xml</value>

      <value>com/rason/Motorist.hbm.xml</value>

      <value>com/rason/Vehicle.hbm.xml</value>

    </list>

      </property>

  <property>

    <props>

      <prop key="hibernate.dialect" >${hibernate.dialect}</prop>

    </props>

  </property>

</bean>

 

 

建立基于Hibernate的DAO:

spring提供了HibernateDaoSupport,它能够让我们把会话工厂Bean直接装配到DAO类,会创建一个HibernateTemplate供DAO使用,如图:

 

public class HibernateRantDao extends HibernateDaoSupport implements RantDao{....}

 

使用getHibernateTemplate()获得HibernateTemplate:

public void saveMotorist(Motorist motorist){

  getHibernateTemplate().saveOrUpdate(motorist);

}

 

<bean id="rantDao" class="com.rason.dao.hibernate.HibernateRantDao">

  <property name="sessionFactory" ref="sessionFactory"/>

</bean>

 

上述方法扩展了一个spring特定的类,有些人不认为这是个问题,但有些人会认为是spring对其代码的一种入侵。下面利用hibernate3对上下文会话的支持从DAO里去除对特定spring的依赖。

 

二,使用hibernate3上下文会话

解耦版本的HibernateRantDao

public class HibernateRantDao extends HibernateDaoSupport implements RantDao{

  ....

  private SessionFactory sessionFactory;

  public void setSessionFactory(SessionFactory sessionFactory){

    this.sessionFactory=sessionFactory;

  }

}

 

使用hibernate3上下文会写编写saveRant()方法:

public void saveRant(Rant rant){

  sessionFactory.getCurrentSession().saveOrUpdate(rant);

}

posted @ 2011-12-22 22:57  rason2008  阅读(594)  评论(1编辑  收藏  举报