快速业务通道

Hibernate和Spring的延迟加载和DAO模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
gt; ... </web-app>

Hibernate和Spring的延迟加载和DAO模式(2)

时间:2011-01-01

使用打开的session的HibernateDAO实现类很简单。实际上,如果你已经使用Spring框架实现Hibernate的DAO对象,最有可能的是,你不

需要做任何改动。DAO必须通过方便的HibernateTemplate工具访问Hibernate,这对数据库访问来说就是小菜一碟。下面是一个DAO的实例。

DAO实例

public class HibernateProductDAO extends HibernateDaoSupport implements ProductDAO {     public Product getProduct(Integer productId) {         return (Product)getHibernateTemplate().load(Product.class, productId);     }     public Integer saveProduct(Product product) {         return (Integer) getHibernateTemplate().save(product);     }        public void updateProduct(Product product) {         getHibernateTemplate().update(product);     } }

在业务层使用延迟加载

甚至在表现层外,Spring框架也通过AOP******HibernateInterceptor提供了便利的延迟加载支持。hibernate******透明地拦截了配置在

Spring应用上下文中的业务对象的调用,在调用前打开hibernate session,在调用结束时关闭这个session。让我们通过一个简单的例子

来说明。假设我们有一个interface叫做BussinessObject:

public interface BusinessObject {    public void doSomethingThatInvolvesDaos(); }

类BusinessObjectImpl实现了BusinessObject接口:

public class BusinessObjectImpl implements BusinessObject {    public void doSomethingThatInvolvesDaos() {      // lots of logic that calls      // DAO classes Which access      // data objects lazily    } }

通过Spring上下文的一些配置,我们可以让HibernateInterceptor拦截对BusinessObjectImpl的调用,允许它的方法延迟访问数据对象。

看一下下面的片断:

<beans>    <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">      <property name="sessionFactory">       <ref bean="sessionFactory"/>      </property>    </bean>    <bean id="businessObjectTarget" class="com.acompany.BusinessObjectImpl">     <property name="someDAO"><ref bean="someDAO"/></property>    </bean>    <bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean">      <property name="target"><ref bean="businessObjectTarget"/></property>      <property name="proxyInterfaces">       <value>com.acompany.BusinessObject</value>      </property>      <property name="interceptorNames">       <list>         <value>hibernateInterceptor</value>       </list>      </property>    </bean> </beans>

当businessObject的实例被引用,HibernateInterceptor打开一个hibernate session并允许对BussinessObjectImpl的调用。当

BusinessOjbectImpl执行完成,HibernateInterceptor透明的关闭这个session。应用代码并不知道任何持

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号