Hibernate和延迟加载
Hibernate对象关系映射提供了两种对象
![](/icons/93453chushi.gif)
![](/icons/93453dou2.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453dou.gif)
![](/icons/93453dou.gif)
![](/icons/93453chushi.gif)
![](/icons/93453dou.gif)
![](/icons/93453dou2.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453chushi.gif)
![](/icons/93453de.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou2.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453de.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453dou.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou2.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453dou2.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453dou.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
在Web层使用延迟加载
幸运
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453dou.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou.gif)
![](/icons/93453dou2.gif)
![](/icons/93453de.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
![](/icons/93453int.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
Interceptor配置
<beans>
<bean id="urlMapping"
="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="
erceptors">
<list>
<ref bean="openSessionInViewInterceptor"/>
</list>
</property>
<property name="mappings">
...
</bean>
...
<bean name="openSessionInViewInterceptor"
="org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor">
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>
</beans>
Filter配置
<web-app>
...
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-
>
org.springframework.orm.hibernate.support.OpenSessionInViewFilter
</filter-
>
</filter>
...
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.spring</url-pattern>
</filter-mapping>
...
</web-app>
使用打开
![](/icons/93453de.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
需要做任何改动
![](/icons/93453dou2.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
DAO例子
public
HibernateProductDAO extends HibernateDaoSupport implements ProductDAO {
public Product getProduct(Integer productId) {
(Product)getHibernateTemplate
.load(Product.
, productId);
}
public Integer saveProduct(Product product) {
(Integer) getHibernateTemplate
.save(product);
}
public void updateProduct(Product product) {
getHibernateTemplate
.update(product);
}
}
在业务层使用延迟加载
甚至在表现层外
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
Spring应用上下文中
![](/icons/93453de.gif)
![](/icons/93453de.gif)
![](/icons/93453diaoyong.gif)
![](/icons/93453dou.gif)
![](/icons/93453diaoyong.gif)
![](/icons/93453dou.gif)
![](/icons/93453diaoyong.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
来介绍说明
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453int.gif)
public
erface BusinessObject {
public void doSomethingThatInvolvesDaos
;
}
类BusinessObjectImpl实现了BusinessObject接口:
public
BusinessObjectImpl implements BusinessObject {
public void doSomethingThatInvolvesDaos
{
// lots of logic that calls
// DAO
es Which access
// data objects lazily
}
}
通过Spring上下文
![](/icons/93453de.gif)
![](/icons/93453yi.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453diaoyong.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
看
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
<beans>
<bean id="hibernateInterceptor"
="org.springframework.orm.hibernate.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="businessObjectTarget"
="com.acompany.BusinessObjectImpl">
<property name="someDAO"><ref bean="someDAO"/></property>
</bean>
<bean id="businessObject"
="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target"><ref bean="businessObjectTarget"/></property>
<property name="proxyInterfaces">
<value>com.acompany.BusinessObject</value>
</property>
<property name="
erceptorNames">
<list>
<value>hibernateInterceptor</value>
</list>
</property>
</bean>
</beans>
当businessObject![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
![](/icons/93453diaoyong.gif)
![](/icons/93453dou2.gif)
BusinessOjbectImpl执行完成
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453dou.gif)
延迟加载访问数据对象
![](/icons/93453dou2.gif)
在单元测试中使用延迟加载
最后
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
![](/icons/93453de.gif)
![](/icons/93453set.gif)
![](/icons/93453dou2.gif)
![](/icons/93453yi.gif)
![](/icons/93453de.gif)
![](/icons/93453dou.gif)
![](/icons/93453de.gif)
![](/icons/93453dou2.gif)
public abstract
MyLazyTestCase extends TestCase {
public void
Up
throws Exception {
super.
Up
;
SessionFactory sessionFactory = (SessionFactory) getBean("sessionFactory");
Session s = sessionFactory.openSession
;
TransactionSynchronizationManager.bindResource(sessionFactory,
SessionHolder(s));
}
protected Object getBean(String beanName) {
//Code to get objects from Spring application context
}
public void tearDown
throws Exception {
super.tearDown
;
SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);
Session s = holder.getSession
;
s.flush
;
TransactionSynchronizationManager.unbindResource(sessionFactory);
SessionFactoryUtils.closeSessionIfNecessary(s, sessionFactory);
}
最新评论