Spring中集成Hibernate

来源:互联网 发布:anywhere软件源 编辑:程序博客网 时间:2024/05/22 02:07

数据持久化的高级需求:
  延迟加载(lazy loading):随着对象关系变得越来越复杂,有时候我们并不希望立即获取完整的对象间关系。借助于延迟加载,我们可以只抓取需要的数据。我的理解是:例如,对象B是对象A的一个属性,如果我们只需要对象A的数据,那么在加载A对象的时候,就会加载B对象的数据,如果数据是大量的,那么这个就是一个开销很大的操作。借助于延迟加载,我们可以只取我们所需要的A对象的数据。
  预先抓取(eager fetching):与延迟加载是相对的。借助于预先抓取,我们可以使用一个查询获取完整的关联对象。我的理解是:对象B是对象A的一个属性,我们需要A对象和B对象的数据,可能需要进行多次查询,预先抓取可以在一个操作中就将所有数据全部从数据库提取出来,避免多次查询。
  级联(cascading):有时候,更改数据库中某一个表,会同时需要修改其他表。我的理解是:例如,学生表和学生选课表,如果我们更改学生表里的学生对象,那么我们就希望同时可以更改学生选课表的学生对象;如果我们删去一个学生对象,那么就需要删去该学生对象的选课对象。
  
  Spring支持的持久化框架有:Hibernate,iBATIS,JAVA数据对象(JAVA Data Objects,JDO)和JAVA持久化API。那么Spring是如何集成Hibernate的?
  Spring提供了模板类来抽象Hibernate的持久化功能。以前,是通过HibernateTemplate来简化Hibernate的工作,它的职责之一就是管理Hibernate的session,但它的不足之处是存在一定程度的侵入性。在DAO中使用HibernateTemplate时,DAO类就会与SpringAPI产生耦合。
  Hibernate3引入了上下文session(Contextual session),确保每个事务使用同一个session。
  获取Hibernate Session对象的标准方式是借助于Hibernate的SessionFactory接口的实现类,SessionFactory主要负责HibernateSession的打开、关闭和管理。
  如果使用XML文件来配置Hibernate Session,那么如下:
  

<bean id="sessionfactory"      class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">      <property name="datasource" ref="datasource">      <property name="mappingResource">//配置一个或者多个hibernate映射文件,定义了应用程序的持久化策略      <list>       <value>A.hbm.xml</value>//A是对象      </list>      </property>      <property name="hibernateProperties">//该属性配置了hibernate如何进行操作的细节       <props>        <prop key="dialect">org.hibernate.dialect.HSQLDialect</prop>//配置hibernate使用Hypersonic数据库并且要按照HSQLDialect来构建SQL        /props>        <property> </bean>

如果用注解的方式来定义持久化,那么如下

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="datasource"/>//从哪里获得数据库连接<property name="packageToscan" value="com.habuma.A.domain" /><property name="hebernateProperties">//要使用哪一种数据库  <props>  <prop key="dialect">org.hibernate.dialect.HSQLDialect</prop>  </props>  </property></bean>
原创粉丝点击