﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Tamino-文章分类-Spring</title><link>http://www.blogjava.net/Tamino/category/10530.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 02:39:53 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 02:39:53 GMT</pubDate><ttl>60</ttl><item><title>Spring中Hibernate的使用问题(配置和Hibernate延迟加载)</title><link>http://www.blogjava.net/Tamino/articles/50494.html</link><dc:creator>Tamino</dc:creator><author>Tamino</author><pubDate>Mon, 05 Jun 2006 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/Tamino/articles/50494.html</guid><wfw:comment>http://www.blogjava.net/Tamino/comments/50494.html</wfw:comment><comments>http://www.blogjava.net/Tamino/articles/50494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Tamino/comments/commentRss/50494.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Tamino/services/trackbacks/50494.html</trackback:ping><description><![CDATA[
		<p>1。建议使用Hiberante进行Session和Transaction的管理</p>
		<p>    将需要进行事务的多个原子DAO设置到Service里，在Service层进行事务控制和会话控制</p>
		<p>    设置一个基础的dao，即baseDAO 且继承之HibernateDaoSupport，而业务对象原子DAO，持有一个baseDAO的引用，通过setter注射设置到业务DAO中</p>
		<p>    多个原子DAO，通过setter注射到Service层。</p>
		<p>2。在显示层，一对多显示时，提示Session关闭的问题</p>
		<p>    两个解决方法： <br />    1）在one－to－many设置lazy＝false，即不延迟加载子对象，但这样可能会带来性能的问题，特别是父子关系模型是树状结构时。<br />   
2）使用Hibernate提供的openSessiojnInView技术，即在视图层开启和关闭Session，在service层进行
Transaction管理，这个较为简单，只需要设置一个filter即可，在web.xml中配置</p>
		<p>
		</p>
		<table style="width: 681px; height: 194px;" border="1" cellpadding="0" cellspacing="0" width="681">
				<tbody>
						<tr>
								<td>&lt;filter&gt;<br />  &lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt;<br />  &lt;filter-class&gt;org.springframework.orm.hibernate.support.OpenSessionInViewFilter&lt;/filter-class&gt;<br /> &lt;/filter&gt;<br /> &lt;filter-mapping&gt;<br />  &lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt;<br />  &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br /> &lt;/filter-mapping&gt;</td>
						</tr>
				</tbody>
		</table>
		<p>需要注意的是，OpenSessionInViewFilter在调用过程中，需要引用Spring的ApplicationContext，而该
对象实例必须是保存在ServletContext中的，因此需要在web.xml中处始化Spring的环境，增加配置如下：</p>
		<p>
		</p>
		<table style="width: 699px; height: 251px;" border="1" cellpadding="0" cellspacing="0" height="251" width="699">
				<tbody>
						<tr>
								<td> &lt;context-param&gt;<br />            
&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />            
&lt;param-value&gt;/WEB-INF/spring/applicationContext-hibernate.xml&lt;/param-value&gt;<br />        &lt;/context-param&gt; 
<p>     &lt;servlet&gt;<br />     &lt;servlet-name&gt;context&lt;/servlet-name&gt;<br />            
&lt;servlet-class&gt;org.springframework.web.context.ContextLoaderServlet&lt;/servlet-class&gt;<br />             &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />     &lt;/servlet&gt;</p></td>
						</tr>
				</tbody>
		</table>
		<p>其中</p>
		<p>
		</p>
		<table border="1" cellpadding="0" cellspacing="0" height="100" width="100">
				<tbody>
						<tr>
								<td>&lt;servlet-name&gt;context&lt;/servlet-name&gt;<br />            
&lt;servlet-class&gt;org.springframework.web.context.ContextLoaderServlet&lt;/servlet-class&gt;<br />             &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />     &lt;/servlet&gt;</td>
						</tr>
				</tbody>
		</table>
		<p>表示在启动时，进行Spring环境的处始化，因此以后如果要引用Spring中的某个bean实例</p>
		<p>如下代码即可</p>
		<p>
		</p>
		<table border="1" cellpadding="0" cellspacing="0" height="100" width="100">
				<tbody>
						<tr>
								<td>org.springframework.context.ApplicationContext
ctx =
(org.springframework.context.ApplicationContext)application.getAttribute(org.springframework.web.context.WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);</td>
						</tr>
				</tbody>
		</table>
		<p>然后调用ctx.getBean返回bean实例</p>
		<p>Spring不只是AOP和IOC，更提供了大量的可重用技术，譬如request中的重设编码，Spring提供了相应的Filter：<strong>org.springframework.web.filter.CharacterEncodingFilter </strong>通过直接配置，即可解决Web应用中POST的中文乱码问题，JMS的<strong>org.springframework.jms 包  </strong>JavaMail的<strong>org.springframework.mail包</strong>等等，更多的，请参看Spring的reference，</p>
		<p>Spring能改善现有代码结构，大量的减少hard code，加快开发进度；</p>

一直有一种感觉：系统的构建是类似的搭积木<img src ="http://www.blogjava.net/Tamino/aggbug/50494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Tamino/" target="_blank">Tamino</a> 2006-06-05 14:55 <a href="http://www.blogjava.net/Tamino/articles/50494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>