|
该用户从未签到
|
12#
发表于 2014-03-11 21:44:59
|只看该作者
虑的步骤。 2) 选择合适的缓存插件,然后编辑该插件的配置文件。. T1 o" P4 [3 C# Z
编辑本段Hibernate与延迟加载
; z* }6 Z! S9 c& e: v0 l Hibernate对象关系映射提供延迟的与非延迟的对象初始化。非延迟加载在读取一个对象的时候会将与这个对象所有相关的其他对象一起读取出来。这有时会导致成百的(如果不是成千的话)select语句在读取对象的时候执行。这个问题有时出现在使用双向关系的时候,经常会导致整个数据库都在初始化的阶段被读出来了。当然,你可以不厌其烦地检查每一个对象与其他对象的关系,并把那些最昂贵的删除,但是到最后,我们可能会因此失去了本想在ORM工具中获得的便利。 一个明显的解决方法是使用Hibernate提供的延迟加载机制。这种初始化策略只在一个对象调用它的一对多或多对多关系时才将关系对象读取出来。这个过程对开发者来说是透明的,而且只进行了很少的数据库操作请求,因此会得到比较明显的性能提升。这项技术的一个缺陷是延迟加载技术要求一个Hibernate会话要在对象使用的时候一直开着。这会成为通过使用DAO模式将持久层抽象出来时的一个主要问题。为了将持久化机制完全地抽象出来,所有的数据库逻辑,包括打开或关闭会话,都不能在应用层出现。最常见的是,一些实现了简单接口的DAO实现类将数据库逻辑完全封装起来了。一种快速但是笨拙的解决方法是放弃DAO模式,将数据库连接逻辑加到应用层中来。这可能对一些小的应用程序有效,但是在大的系统中,这是一个严重的设计缺陷,妨碍了系统的可扩展性。
/ ] n$ N4 d o' E: g3 M: c8 E编辑本段在Web层进行延迟加载
: S- B! `- g) T7 W$ ?& w" ~ 幸运的是,Spring框架为Hibernate延迟加载与DAO模式的整合提供了一种方便的解决方法。以一个Web应用为例,Spring提供了OpenSessionInViewFilter和OpenSessionInViewInterceptor。我们可以随意选择一个类来实现相同的功能。两种方法唯一的不同就在于interceptor在Spring容器中运行并被配置在web应用的上下文中,而Filter在Spring之前运行并被配置在web.xml中。不管用哪个,他们都在请求将当前会话与当前(数据库)线程绑定时打开Hibernate会话。一旦已绑定到线程,这个打开了的Hibernate会话可以在DAO实现类中透明地使用。这个会话会为延迟加载数据库中值对象的视图保持打开状态。一旦这个逻辑视图完成了,Hibernate会话会在Filter的doFilter方法或者Interceptor的postHandle方法中被关闭。 实现方法在web.xml中加入 <filter> <filter-name>hibernateFilter</filter-name> <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class> </filter <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
2 j2 |6 T u* Z7 s5 [& K6 m5 Z7 U2 M. W8 b( _) p
; ?( w8 u- o, Z2 \) ?: q/ o3 v& `" \8 ]
五、学习顺序和条件. J# a7 b; N' N, [" [# m
一步一步的学,要学三个框架(struts + hibernate +spring),建议,先学懂以下技术) R! m5 o1 F) {! ^) [# x
1、J2SE 必须的,有点废话 - -
6 @$ w( q' a/ Z! d0 ^. g2、数据库(Oracle,MySql...)
+ [. M, V1 `* i! C3、JDBC2 @5 L1 ~1 Q! D/ w4 k6 l
4、jsp + servlet
% |6 u* h4 ?7 `, \( X5 G* a9 p) t3 _然后先学struts,接着学hibernate,再学spring。
, y# M. p5 h& y* p- e g |
|