﻿<?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-J2EE学习笔记-随笔分类-转载</title><link>http://www.blogjava.net/migrant/category/35090.html</link><description>我们的失落……</description><language>zh-cn</language><lastBuildDate>Wed, 30 Jun 2010 06:57:59 GMT</lastBuildDate><pubDate>Wed, 30 Jun 2010 06:57:59 GMT</pubDate><ttl>60</ttl><item><title>[转]java内部类</title><link>http://www.blogjava.net/migrant/archive/2010/06/30/324878.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Wed, 30 Jun 2010 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2010/06/30/324878.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/324878.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2010/06/30/324878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/324878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/324878.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 提起Java内部类（Inner Class）可能很多人不太熟悉，实际上类似的概念在C++里也有，那就是嵌套类（Nested Class），关于这两者的区别与联系，在下文中会有对比。内部类从表面上看，就是在类中又定义了一个类（下文会看到，内部类可以在很多地方定义），而实际上并没有那么简单，乍看上去内部类似乎有些多余，它的用处对于初学者来说可能并不是那么显著，但是随着对它的深入了解，你会发现Java的...&nbsp;&nbsp;<a href='http://www.blogjava.net/migrant/archive/2010/06/30/324878.html'>阅读全文</a><img src ="http://www.blogjava.net/migrant/aggbug/324878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2010-06-30 14:26 <a href="http://www.blogjava.net/migrant/archive/2010/06/30/324878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]在JScript中运算符"||"和"&amp;&amp;"的特殊特性</title><link>http://www.blogjava.net/migrant/archive/2010/05/13/320802.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Thu, 13 May 2010 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2010/05/13/320802.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/320802.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2010/05/13/320802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/320802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/320802.html</trackback:ping><description><![CDATA[<p>在JScript的众多运算符里，提供了三个逻辑运算符<strong>&amp;&amp;</strong>、<strong>||</strong>和<strong>!</strong>，噢?! 是高级语言都提供的<img border="0" src="http://www.cnblogs.com/Emoticons/emembarrassed.gif" width="19" height="19"  alt="" />。按我们对逻辑运算的正常认识，逻辑运算的结果因该是ture或者false。但是JScript的逻辑运算却不完全是这么定义的，这里只有!运算符总是返回<font color="#0000ff">true</font>|<font color="#0000ff">false</font>，而||和&amp;&amp;运算比较的好玩。<br />
<br />
&nbsp;&nbsp;&nbsp; JScript对于逻辑运算的<font color="#0000ff">true</font>|<font color="#0000ff">false</font>是这么定义的： </p>
<ul type="disc">
    <li>所有对象都被认为是 true。
    <li>字符串当且仅当为空(""或'')时才被认为是 false。
    <li><strong>null</strong> 和未定义的均被认为是 false。
    <li>数字当且仅当为 0 时才是 false。 </li>
</ul>
<p>&nbsp;&nbsp;&nbsp; 可是逻辑运算符<strong>||</strong>和<strong>&amp;&amp;</strong>虽然遵循上面的定义规则，但是它们返回的值却很有意思。<br />
&nbsp;&nbsp;&nbsp; 对于&amp;&amp;运算，按照上面的规则，表达式 if ( 'abc' &amp;&amp; '123' &amp;&amp; new Date() ) 是执行true分支，可是这个表达式如果写成：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'abc'&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;'</span><span style="color: #000000">123</span><span style="color: #000000">'&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date();</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 结果value=Fri Jan 21 00:01:17 UTC+0800 2005，原它从左到右检测，如果到了最后一个表达式也是为true的，就返回那个表达式。</p>
<p>&nbsp;&nbsp;&nbsp; 对于||运算同理，对于下面的表达式：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;value1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'abc'&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;'</span><span style="color: #000000">123</span><span style="color: #000000">'&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;value2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;''&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;'ok';</span></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 结果value1='abc'，value2='ok'。这是因为||运算会有"短路"特性，他也是从左向右检测，只不过它是一但发现有为true的值，就立即返回该表达式。<br />
&nbsp;&nbsp;&nbsp; 这样的特性可以帮组我们写出精简的代码，可是同时也带来代码不便于阅读维护的问题。<br />
&nbsp;&nbsp;&nbsp; 由于我手头暂时没有NS和moz什么的浏览器，不知道标准JavaScript是否也是这样支持的？如果您方便的话，请告如我运行后的结果</p>
<img src ="http://www.blogjava.net/migrant/aggbug/320802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2010-05-13 15:11 <a href="http://www.blogjava.net/migrant/archive/2010/05/13/320802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]JavaScript判断变量类型：typeof函数与constructor属性异同</title><link>http://www.blogjava.net/migrant/archive/2010/04/14/318262.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Wed, 14 Apr 2010 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2010/04/14/318262.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/318262.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2010/04/14/318262.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/318262.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/318262.html</trackback:ping><description><![CDATA[<p><span style="font-family: 新宋体"><span style="font-size: 10pt">有时你可能需要对变量进行类型检查，或者判断变量是否已定义。有两种方法可以使用：<strong>typeof</strong>函数与<strong>constructor</strong>属性。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">typeof函数的用法可能不用我多说，大家都知道怎么用。而constructor属性大家可能就陌生点。在《精通JavaScript》这本书中有提到construct的用法，但我用自己的几个浏览器（IE7.0 / Firefox1.9 / Opera9.50）测试的结果却和书上说的不一样。但是仍然是有办法通过constructor属性来检查变量类型的。<br />
这里先补充一下，为什么明明有typeof函数可以很方便地用来检测类型，还要用constructor呢？<br />
因为typeof会把所有的数组类型以及用户自定义类型判断为object，从而无法知道更确切的信息。而constructor却可以解决这个问题。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">ok，明白了我们为什么要用constructor，现在让我带大家一步步认识一下typeof和constructor用法之间的差异吧～</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">首先我们运行一下下面这段代码：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />alert(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(i));<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />alert(i.constructor);</span></div>
<p><br />
</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">这3行代码告诉你什么情况下可以用constructor。<br />
你可以看到第2行返回了字符串'undefined'，而第三行则发生了错误，原因是i变量还没有类型定义，自然也没有constructor的存在。 <br />
从这一点上看，typeof可以检查到变量是否有定义，而<strong>construct只能检查已定义变量的类型</strong>。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">再运行一下下面这段代码：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />alert(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(i));<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />alert(i.constructor);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />alert(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(i.constructor));</span></div>
<p><br />
</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">你会看到第2行返回了字符串'number&#8217;，第3行返回了一串类似函数定义的代码字符串（这就是跟《精通JavaScript》一书中介绍的不一样的地方）。<br />
我们再用typeof检查一下constructor到底是个什么样类型的属性，第4行返回结果'function'，也就是说，实际上constructor是一个函数，更确切地说是一个构造函数。这时你就可以知道，为什么constructor可以检查出各种类型了。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">有经验的程序员看到这里应该知道要怎么利用constructor来检查变量类型了。方法有多种，这里提供一种比较容易理解的方法。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">其实想法很简单，就是<strong>把construcor转化为字符串，通过寻找匹配字符串（function名）来确定是否指定类型</strong>。如下例子：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_16_17_Open_Image" onclick="this.style.display='none'; Codehighlighter1_16_17_Open_Text.style.display='none'; Codehighlighter1_16_17_Closed_Image.style.display='inline'; Codehighlighter1_16_17_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_16_17_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_16_17_Closed_Text.style.display='none'; Codehighlighter1_16_17_Open_Image.style.display='inline'; Codehighlighter1_16_17_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;user()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_16_17_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_16_17_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;user();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />alert((i.constructor</span><span style="color: #000000">+</span><span style="color: #000000">'').match(</span><span style="color: #000000">/</span><span style="color: #000000">user</span><span style="color: #000000">/</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);</span></div>
<p><br />
</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">这仅仅是个简单的例子。如果返回true则变量i不是user类型，返回false则变量是user类型。<br />
</span></span><span style="font-family: 新宋体"><span style="font-size: 10pt">当然，这样检测是不够精确的，比如其实他是一个myuser类型的时候，同样会被认为是user类。所以你需要书写更精确的正则表达式去进行匹配。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">可以这样简单改进你的正则表达式：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">/</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;user\(\)</span><span style="color: #000000">/</span></div>
<p><br />
</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">替换上面代码段中的/user/。当然，如果你的构造函数原型是user(a)，那么应该这样书写你的正则表达式：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">/</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;user\(a\)</span><span style="color: #000000">/</span></div>
<p><br />
<br />
</span></span><span style="font-family: 新宋体"><span style="font-size: 10pt">到这里你应该知道怎样使用constructor类型去检查变量类型了吧？</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">ok，最后再提个醒，如果你要用基于constructor的方法去检查一些基本类型，如<br />
Object / Array / Function / String / Number / Boolean<br />
在你的正则表达式中，一定要将这些单词的<strong>首字母大写</strong>！！而如果该类型是自定义类型，则根据你定义的时候标识符的写法确定。</span></span></p><img src ="http://www.blogjava.net/migrant/aggbug/318262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2010-04-14 14:30 <a href="http://www.blogjava.net/migrant/archive/2010/04/14/318262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Spring 2.5中JdbcTemplate类query方法的三种回调接口</title><link>http://www.blogjava.net/migrant/archive/2010/03/10/315022.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Wed, 10 Mar 2010 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2010/03/10/315022.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/315022.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2010/03/10/315022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/315022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/315022.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_0_279_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_279_Open_Text.style.display='none'; Codehighlighter1_0_279_Closed_Image.style.display='inline'; Codehighlighter1_0_279_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_0_279_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_279_Closed_Text.style.display='none'; Codehighlighter1_0_279_Open_Image.style.display='inline'; Codehighlighter1_0_279_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_279_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_0_279_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />使用三种Callback接口作为参数的query方法的返回值不同:&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />以ResultSetExtractor作为方法参数的query方法返回Object型结果，要使用查询结果，我们需要对其进行强制转型；&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />以RowMapper接口作为方法参数的query方法直接返回List型的结果；&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />以RowCallbackHandler作为方法参数的query方法，返回值为void；&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />RowCallbackHandler和RowMapper才是我们最常用的选择&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Administrator&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img id="Codehighlighter1_307_3536_Open_Image" onclick="this.style.display='none'; Codehighlighter1_307_3536_Open_Text.style.display='none'; Codehighlighter1_307_3536_Closed_Image.style.display='inline'; Codehighlighter1_307_3536_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_307_3536_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_307_3536_Closed_Text.style.display='none'; Codehighlighter1_307_3536_Open_Image.style.display='inline'; Codehighlighter1_307_3536_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SpringTest&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_307_3536_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_307_3536_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_313_467_Open_Image" onclick="this.style.display='none'; Codehighlighter1_313_467_Open_Text.style.display='none'; Codehighlighter1_313_467_Closed_Image.style.display='inline'; Codehighlighter1_313_467_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_313_467_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_313_467_Closed_Text.style.display='none'; Codehighlighter1_313_467_Open_Image.style.display='inline'; Codehighlighter1_313_467_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_313_467_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_313_467_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;*&nbsp;返回结果是List里装Map,使用参数,使用回调&nbsp;RowMapperResultSetExtractor用于处理单行记录，&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;*&nbsp;它内部持有一个RowMapper实例的引用，当处理结果集的时候，&nbsp;会将单行数据的处理委派给其所持有的RowMapper实例，而其余工作它负责&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img id="Codehighlighter1_521_1422_Open_Image" onclick="this.style.display='none'; Codehighlighter1_521_1422_Open_Text.style.display='none'; Codehighlighter1_521_1422_Closed_Image.style.display='inline'; Codehighlighter1_521_1422_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_521_1422_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_521_1422_Closed_Text.style.display='none'; Codehighlighter1_521_1422_Open_Image.style.display='inline'; Codehighlighter1_521_1422_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;getListRowMapperResultSetExtractor()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_521_1422_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_521_1422_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;ApplicationContext&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileSystemXmlApplicationContext(&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">src/database_config.xml</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;E:\demoworkspace\spring&nbsp;为工程主目录&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;JdbcTemplate&nbsp;jt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JdbcTemplate((DataSource)&nbsp;context&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">oracleDataSourceTest</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;测试用的方法&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img id="Codehighlighter1_816_821_Open_Image" onclick="this.style.display='none'; Codehighlighter1_816_821_Open_Text.style.display='none'; Codehighlighter1_816_821_Closed_Image.style.display='inline'; Codehighlighter1_816_821_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_816_821_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_816_821_Closed_Text.style.display='none'; Codehighlighter1_816_821_Open_Image.style.display='inline'; Codehighlighter1_816_821_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;Object[]&nbsp;arg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_816_821_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_816_821_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(ArrayList)&nbsp;jt.query(</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;*&nbsp;from&nbsp;region&nbsp;where&nbsp;rownum&lt;?</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_961_1267_Open_Image" onclick="this.style.display='none'; Codehighlighter1_961_1267_Open_Text.style.display='none'; Codehighlighter1_961_1267_Closed_Image.style.display='inline'; Codehighlighter1_961_1267_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_961_1267_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_961_1267_Closed_Text.style.display='none'; Codehighlighter1_961_1267_Open_Image.style.display='inline'; Codehighlighter1_961_1267_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;arg,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RowMapperResultSetExtractor(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RowMapper()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_961_1267_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_961_1267_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;mapRow(ResultSet&nbsp;rs,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;index)&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1047_1258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1047_1258_Open_Text.style.display='none'; Codehighlighter1_1047_1258_Closed_Image.style.display='inline'; Codehighlighter1_1047_1258_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1047_1258_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1047_1258_Closed_Text.style.display='none'; Codehighlighter1_1047_1258_Open_Image.style.display='inline'; Codehighlighter1_1047_1258_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1047_1258_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1047_1258_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HashMap();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">可以是自己的JavaBean值对象(简单Java对象POJO)&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.put(</span><span style="color: #000000">"</span><span style="color: #000000">region_id</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;rs.getString(</span><span style="color: #000000">"</span><span style="color: #000000">region_id</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.put(</span><span style="color: #000000">"</span><span style="color: #000000">region_name</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;rs.getString(</span><span style="color: #000000">"</span><span style="color: #000000">region_name</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;u;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;Iterator&nbsp;it&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;list.iterator();&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1334_1416_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1334_1416_Open_Text.style.display='none'; Codehighlighter1_1334_1416_Closed_Image.style.display='inline'; Codehighlighter1_1334_1416_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1334_1416_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1334_1416_Closed_Text.style.display='none'; Codehighlighter1_1334_1416_Open_Image.style.display='inline'; Codehighlighter1_1334_1416_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(it.hasNext())&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1334_1416_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1334_1416_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;Map&nbsp;map&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Map)&nbsp;it.next();&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;System.out.println(map.toString());&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1434_1657_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1434_1657_Open_Text.style.display='none'; Codehighlighter1_1434_1657_Closed_Image.style.display='inline'; Codehighlighter1_1434_1657_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1434_1657_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1434_1657_Closed_Text.style.display='none'; Codehighlighter1_1434_1657_Open_Image.style.display='inline'; Codehighlighter1_1434_1657_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1434_1657_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_1434_1657_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">返回结果是List里装Map,不使用参数,使用回调&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;使用RowMapper比直接使用ResultSetExtractor要方便的多，只负责处理单行结果就行，现在，我们只需要将单行的结果组装后返回就行，&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;剩下的工作，全部都是JdbcTemplate内部的事情了。&nbsp;实际上，JdbcTemplae内部会使用一个ResultSetExtractor实现类来做其余的工作，&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;毕竟，该做的工作还得有人做不是？！&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1693_2420_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1693_2420_Open_Text.style.display='none'; Codehighlighter1_1693_2420_Closed_Image.style.display='inline'; Codehighlighter1_1693_2420_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1693_2420_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1693_2420_Closed_Text.style.display='none'; Codehighlighter1_1693_2420_Open_Image.style.display='inline'; Codehighlighter1_1693_2420_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;getListRowMapper()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1693_2420_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1693_2420_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;ApplicationContext&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileSystemXmlApplicationContext(&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">src/database_config.xml</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;JdbcTemplate&nbsp;jt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JdbcTemplate((DataSource)&nbsp;context&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">oracleDataSourceTest</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;jt.query(&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1994_2266_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1994_2266_Open_Text.style.display='none'; Codehighlighter1_1994_2266_Closed_Image.style.display='inline'; Codehighlighter1_1994_2266_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1994_2266_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1994_2266_Closed_Text.style.display='none'; Codehighlighter1_1994_2266_Open_Image.style.display='inline'; Codehighlighter1_1994_2266_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;*&nbsp;from&nbsp;region&nbsp;where&nbsp;rownum&lt;10</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RowMapper()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1994_2266_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1994_2266_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;mapRow(ResultSet&nbsp;rs,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;index)&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_2080_2257_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2080_2257_Open_Text.style.display='none'; Codehighlighter1_2080_2257_Closed_Image.style.display='inline'; Codehighlighter1_2080_2257_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_2080_2257_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2080_2257_Closed_Text.style.display='none'; Codehighlighter1_2080_2257_Open_Image.style.display='inline'; Codehighlighter1_2080_2257_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2080_2257_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2080_2257_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HashMap();&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.put(</span><span style="color: #000000">"</span><span style="color: #000000">region_id</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;rs.getString(</span><span style="color: #000000">"</span><span style="color: #000000">region_id</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u.put(</span><span style="color: #000000">"</span><span style="color: #000000">region_name</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;rs.getString(</span><span style="color: #000000">"</span><span style="color: #000000">region_name</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;u;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;Iterator&nbsp;it&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;list.iterator();&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_2332_2414_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2332_2414_Open_Text.style.display='none'; Codehighlighter1_2332_2414_Closed_Image.style.display='inline'; Codehighlighter1_2332_2414_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_2332_2414_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2332_2414_Closed_Text.style.display='none'; Codehighlighter1_2332_2414_Open_Image.style.display='inline'; Codehighlighter1_2332_2414_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(it.hasNext())&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2332_2414_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2332_2414_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;Map&nbsp;map&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Map)&nbsp;it.next();&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;System.out.println(map.toString());&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;返回记录集&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img id="Codehighlighter1_2442_2654_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2442_2654_Open_Text.style.display='none'; Codehighlighter1_2442_2654_Closed_Image.style.display='inline'; Codehighlighter1_2442_2654_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_2442_2654_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2442_2654_Closed_Text.style.display='none'; Codehighlighter1_2442_2654_Open_Image.style.display='inline'; Codehighlighter1_2442_2654_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2442_2654_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_2442_2654_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;RowCallbackHandler虽然与RowMapper同是处理单行数据，不过，除了要处理单行结果，它还得负责最终结果的组装和获取工作，&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;在这里我们是使用当前上下文声明的List取得最终查询结果，&nbsp;不过，我们也可以单独声明一个RowCallbackHandler实现类，&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;在其中声明相应的集合类，这样，我们可以通过该RowCallbackHandler实现类取得最终查询结果&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img id="Codehighlighter1_2699_3535_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2699_3535_Open_Text.style.display='none'; Codehighlighter1_2699_3535_Closed_Image.style.display='inline'; Codehighlighter1_2699_3535_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_2699_3535_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_2699_3535_Closed_Text.style.display='none'; Codehighlighter1_2699_3535_Open_Image.style.display='inline'; Codehighlighter1_2699_3535_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;getListRowCallbackHandler()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_2699_3535_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2699_3535_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;ApplicationContext&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileSystemXmlApplicationContext(&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">src/database_config.xml</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;JdbcTemplate&nbsp;jt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JdbcTemplate((DataSource)&nbsp;context&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">oracleDataSourceTest</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;String&nbsp;sql&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;*&nbsp;from&nbsp;region&nbsp;&nbsp;where&nbsp;region_id&gt;?</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Map</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;list</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Map</span><span style="color: #000000">&gt;</span><span style="color: #000000">();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">一定要用final定义&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img id="Codehighlighter1_3072_3076_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3072_3076_Open_Text.style.display='none'; Codehighlighter1_3072_3076_Closed_Image.style.display='inline'; Codehighlighter1_3072_3076_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_3072_3076_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_3072_3076_Closed_Text.style.display='none'; Codehighlighter1_3072_3076_Open_Image.style.display='inline'; Codehighlighter1_3072_3076_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;Object[]&nbsp;params&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_3072_3076_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_3072_3076_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_3131_3375_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3131_3375_Open_Text.style.display='none'; Codehighlighter1_3131_3375_Closed_Image.style.display='inline'; Codehighlighter1_3131_3375_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_3131_3375_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_3131_3375_Closed_Text.style.display='none'; Codehighlighter1_3131_3375_Open_Image.style.display='inline'; Codehighlighter1_3131_3375_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;jt.query(sql,&nbsp;params,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RowCallbackHandler()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_3131_3375_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_3131_3375_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_3196_3368_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3196_3368_Open_Text.style.display='none'; Codehighlighter1_3196_3368_Closed_Image.style.display='inline'; Codehighlighter1_3196_3368_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_3196_3368_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_3196_3368_Closed_Text.style.display='none'; Codehighlighter1_3196_3368_Open_Image.style.display='inline'; Codehighlighter1_3196_3368_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;processRow(ResultSet&nbsp;rs)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_3196_3368_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_3196_3368_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HashMap();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;u.put(</span><span style="color: #000000">"</span><span style="color: #000000">region_id</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;rs.getString(</span><span style="color: #000000">"</span><span style="color: #000000">region_id</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;u.put(</span><span style="color: #000000">"</span><span style="color: #000000">region_name</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;rs.getString(</span><span style="color: #000000">"</span><span style="color: #000000">region_name</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;list.add(u);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;Iterator&nbsp;it&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;list.iterator();&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_3447_3529_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3447_3529_Open_Text.style.display='none'; Codehighlighter1_3447_3529_Closed_Image.style.display='inline'; Codehighlighter1_3447_3529_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_3447_3529_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_3447_3529_Closed_Text.style.display='none'; Codehighlighter1_3447_3529_Open_Image.style.display='inline'; Codehighlighter1_3447_3529_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(it.hasNext())&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_3447_3529_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_3447_3529_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;Map&nbsp;map&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Map)&nbsp;it.next();&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;System.out.println(map.toString());&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span></div>
</span>
<img src ="http://www.blogjava.net/migrant/aggbug/315022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2010-03-10 10:27 <a href="http://www.blogjava.net/migrant/archive/2010/03/10/315022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]spring jdbcTemplate使用</title><link>http://www.blogjava.net/migrant/archive/2010/03/09/314985.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Tue, 09 Mar 2010 11:10:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2010/03/09/314985.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/314985.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2010/03/09/314985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/314985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/314985.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.springJdbcContext.xml&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;&nbsp;&nbsp;&nbsp;&lt;beans&nbsp;xmlns="http://www.springframework.org/schema/beans"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/migrant/archive/2010/03/09/314985.html'>阅读全文</a><img src ="http://www.blogjava.net/migrant/aggbug/314985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2010-03-09 19:10 <a href="http://www.blogjava.net/migrant/archive/2010/03/09/314985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]JAVA语言的反射(Reflection)和内省(Introspector)</title><link>http://www.blogjava.net/migrant/archive/2010/02/04/311942.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Thu, 04 Feb 2010 05:42:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2010/02/04/311942.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/311942.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2010/02/04/311942.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/311942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/311942.html</trackback:ping><description><![CDATA[<p><span style="font-family: 新宋体"><span style="font-size: 10pt">很多朋友在深入的接触JAVA语言后就会发现这样两个词：反射(Reflection)和内省(Introspector)，经常搞不清楚这到底是怎么回事，在什么场合下应用以及如何使用？今天把这二者放在一起介绍，因为它们二者是相辅相成的。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">反射</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">相对而言，反射比内省更容易理解一点。用一句比较白的话来概括，反射就是让你可以通过名称来得到对象(类，属性，方法)的技术。例如我们可以通过类名来生成一个类的实例；知道了方法名，就可以调用这个方法；知道了属性名就可以访问这个属性的值。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">还是写两个例子让大家更直观的了解反射的使用方法：<br />
<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;通过类名来构造一个类的实例</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">Class&nbsp;cls_str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Class.forName(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">java.lang.String</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;上面这句很眼熟，因为使用过&nbsp;JDBC&nbsp;访问数据库的人都用过&nbsp;J</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">Object&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cls_str.newInstance();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;相当于&nbsp;String&nbsp;str&nbsp;=&nbsp;new&nbsp;String();&nbsp;</span></div>
<p><br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;通过方法名来调用一个方法</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">String&nbsp;methodName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">length</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />Method&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;cls_str.getMethod(methodName,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />System.out.println(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">length&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;m.invoke(str,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;));<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;相当于&nbsp;System.out.println(str.length());&nbsp;</span></div>
<p><br />
</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">上面的两个例子是比较常用方法。看到上面的例子就有人要发问了：为什么要这么麻烦呢？本来一条语句就完成的事情干吗要整这么复杂？没错，在上面的例子中确实没有必要这么麻烦。不过你想像这样一个应用程序，它支持动态的功能扩展，也就是说程序不重新启动但是可以自动加载新的功能，这个功能使用一个具体类来表示。首先我们必须为这些功能定义一个接口类，然后我们要求所有扩展的功能类必须实现我指定的接口，这个规定了应用程序和可扩展功能之间的接口规则，但是怎么动态加载呢？我们必须让应用程序知道要扩展的功能类的类名，比如是test.Func1，当我们把这个类名(字符串)告诉应用程序后，它就可以使用我们第一个例子的方法来加载并启用新的功能。这就是类的反射，请问你有别的选择吗？</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">内省</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">内省是Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。通过getName/setName来访问name属性，这就是默认的规则。Java中提供了一套API用来访问某个属性的getter/setter方法，通过这些API可以使你不需要了解这个规则（但你最好还是要搞清楚），这些API存放于包java.beans中。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">一般的做法是通过类Introspector来获取某个对象的BeanInfo信息，然后通过BeanInfo来获取属性的描述器（PropertyDescriptor），通过这个属性描述器就可以获取某个属性对应的getter/setter方法，然后我们就可以通过反射机制来调用这些方法。下面我们来看一个例子，这个例子把某个对象的所有属性名称和值都打印出来：<br />
<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_0_30_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_30_Open_Text.style.display='none'; Codehighlighter1_0_30_Closed_Image.style.display='inline'; Codehighlighter1_0_30_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_0_30_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_30_Closed_Text.style.display='none'; Codehighlighter1_0_30_Open_Image.style.display='inline'; Codehighlighter1_0_30_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_30_Closed_Text">/**/</span><span id="Codehighlighter1_0_30_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;Created&nbsp;on&nbsp;2004-6-29<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;demo;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.beans.BeanInfo;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.beans.Introspector;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.beans.PropertyDescriptor;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img id="Codehighlighter1_152_190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_152_190_Open_Text.style.display='none'; Codehighlighter1_152_190_Closed_Image.style.display='inline'; Codehighlighter1_152_190_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_152_190_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_152_190_Closed_Text.style.display='none'; Codehighlighter1_152_190_Open_Image.style.display='inline'; Codehighlighter1_152_190_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_152_190_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_152_190_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;*&nbsp;内省演示例子<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;liudong<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img id="Codehighlighter1_224_945_Open_Image" onclick="this.style.display='none'; Codehighlighter1_224_945_Open_Text.style.display='none'; Codehighlighter1_224_945_Closed_Image.style.display='inline'; Codehighlighter1_224_945_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_224_945_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_224_945_Closed_Text.style.display='none'; Codehighlighter1_224_945_Open_Image.style.display='inline'; Codehighlighter1_224_945_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;IntrospectorDemo&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_224_945_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_224_945_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name;<br />
<img id="Codehighlighter1_302_806_Open_Image" onclick="this.style.display='none'; Codehighlighter1_302_806_Open_Text.style.display='none'; Codehighlighter1_302_806_Closed_Image.style.display='inline'; Codehighlighter1_302_806_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_302_806_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_302_806_Closed_Text.style.display='none'; Codehighlighter1_302_806_Open_Image.style.display='inline'; Codehighlighter1_302_806_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_302_806_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_302_806_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntrospectorDemo&nbsp;demo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IntrospectorDemo();<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;demo.setName(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Winter&nbsp;Lau</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;如果不想把父类的属性也列出来的话，<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;那&nbsp;getBeanInfo&nbsp;的第二个参数填写父类的信息</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeanInfo&nbsp;bi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Introspector.getBeanInfo(demo.getClass(),&nbsp;Object.&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyDescriptor[]&nbsp;props&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;bi.getPropertyDescriptors();<br />
<img id="Codehighlighter1_664_798_Open_Image" onclick="this.style.display='none'; Codehighlighter1_664_798_Open_Text.style.display='none'; Codehighlighter1_664_798_Closed_Image.style.display='inline'; Codehighlighter1_664_798_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_664_798_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_664_798_Closed_Text.style.display='none'; Codehighlighter1_664_798_Open_Image.style.display='inline'; Codehighlighter1_664_798_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">props.length;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_664_798_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_664_798_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(props[i].getName()</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;props[i].getReadMethod().invoke(demo,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;));<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_842_869_Open_Image" onclick="this.style.display='none'; Codehighlighter1_842_869_Open_Text.style.display='none'; Codehighlighter1_842_869_Closed_Image.style.display='inline'; Codehighlighter1_842_869_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_842_869_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_842_869_Closed_Text.style.display='none'; Codehighlighter1_842_869_Open_Image.style.display='inline'; Codehighlighter1_842_869_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_842_869_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_842_869_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;name;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br />
<img id="Codehighlighter1_910_943_Open_Image" onclick="this.style.display='none'; Codehighlighter1_910_943_Open_Text.style.display='none'; Codehighlighter1_910_943_Closed_Image.style.display='inline'; Codehighlighter1_910_943_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_910_943_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_910_943_Closed_Text.style.display='none'; Codehighlighter1_910_943_Open_Image.style.display='inline'; Codehighlighter1_910_943_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_910_943_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_910_943_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">&nbsp;.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<p><br />
</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">Web开发框架Struts中的FormBean就是通过内省机制来将表单中的数据映射到类的属性上，因此要求FormBean的每个属性要有getter/setter方法。但也并不总是这样，什么意思呢？就是说对一个Bean类来讲，我可以没有属性，但是只要有getter/setter方法中的其中一个，那么Java的内省机制就会认为存在一个属性，比如类中有方法setMobile，那么就认为存在一个mobile的属性，这样可以方便我们把Bean类通过一个接口来定义而不用去关系具体实现，不用去关系Bean中数据的存储。比如我们可以把所有的getter/setter方法放到接口里定义，但是真正数据的存取则是在具体类中去实现，这样可提高系统的扩展性。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">总结</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">将Java的反射以及内省应用到程序设计中去可以大大的提供程序的智能化和可扩展性。有很多项目都是采取这两种技术来实现其核心功能，例如我们前面提到的Struts，还有用于处理XML文件的Digester项目，其实应该说几乎所有的项目都或多或少的采用这两种技术。在实际应用过程中二者要相互结合方能发挥真正的智能化以及高度可扩展性。</span></span></p>
<img src ="http://www.blogjava.net/migrant/aggbug/311942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2010-02-04 13:42 <a href="http://www.blogjava.net/migrant/archive/2010/02/04/311942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]用 join 或 CountDownLatch 让主线程等待所有子线程完成</title><link>http://www.blogjava.net/migrant/archive/2010/01/26/310889.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Tue, 26 Jan 2010 10:00:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2010/01/26/310889.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/310889.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2010/01/26/310889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/310889.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/310889.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文出处：http://blog.chenlb.com/2008/11/join-or-countdownlatch-make-main-thread-wait-all-sub-thread.html在编写多线程的工作中，有个常见的问题：主线程（main) 启动好几个子线程（task）来完成并发任务，主线程要等待所有的子线程完成之后才继续执行main的其它任务。默认主线程退出时其它子线程不...&nbsp;&nbsp;<a href='http://www.blogjava.net/migrant/archive/2010/01/26/310889.html'>阅读全文</a><img src ="http://www.blogjava.net/migrant/aggbug/310889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2010-01-26 18:00 <a href="http://www.blogjava.net/migrant/archive/2010/01/26/310889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]jQuery基础---filter()和find()</title><link>http://www.blogjava.net/migrant/archive/2009/11/09/301714.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Mon, 09 Nov 2009 08:00:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2009/11/09/301714.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/301714.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2009/11/09/301714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/301714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/301714.html</trackback:ping><description><![CDATA[<p><span style="font-family: 新宋体"><span style="font-size: 10pt">这是jQuery里常用的2个方法。<br />
他们2者功能是完全不同的，而初学者往往会被误导。</span></span></p>
<p><br />
<span style="font-family: 新宋体"><span style="font-size: 10pt">首先 我们看.find()方法：<br />
现在有一个页面，里面HTML代码为：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="css"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">p&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="rain"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">测试1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="rain"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">测试2</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span></div>
<p><br />
如果我们使用find()方法：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;$find&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">).find(</span><span style="color: #000000">"</span><span style="color: #000000">.rain</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />alert(&nbsp;$find.html()&nbsp;);</span></div>
<p><br />
将会输出：<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/migrant/o_jqueryfindfilter.jpg" width="388" height="141" /><br />
如果使用filter()方法：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;$filter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">).filter(</span><span style="color: #000000">"</span><span style="color: #000000">.rain</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />alert(&nbsp;$filter.html()&nbsp;);</span></div>
<p><br />
将会输出：<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/migrant/o_jqueryfindfilter1.jpg" /><br />
</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">也许你已经看出它们的区别了。<br />
<strong>find()会在div元素内 寻找 class为rain 的元素。<br />
而filter()则是筛选div的class为rain的元素。<br />
一个是对它的子集操作，一个是对自身集合元素筛选。</strong></span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">另外find()其实还可以用选择器表示:</span></span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;$select&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">div&nbsp;.rain</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div> <img src ="http://www.blogjava.net/migrant/aggbug/301714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2009-11-09 16:00 <a href="http://www.blogjava.net/migrant/archive/2009/11/09/301714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]SecureCRT中文字体解决方案</title><link>http://www.blogjava.net/migrant/archive/2009/09/14/295013.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Mon, 14 Sep 2009 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2009/09/14/295013.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/295013.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2009/09/14/295013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/295013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/295013.html</trackback:ping><description><![CDATA[<p><span style="font-family: 新宋体"><span style="font-size: 10pt">以前在Windows上ssh登录一直都是用putty，虽然它简单小巧，但毕竟缺少很多特性。今天试了一下SecureCRT，感觉用起来比Putty好多了，但SecureCRT默认的字体超难看，而且中文字体设置也比较麻烦一点，在这里记录一下以后可能还用得到。</span></span></p>
<ol>
    <li><span style="font-family: 新宋体"><span style="font-size: 10pt">在&#8220;会话选项&#8221;的&#8220;终端-&gt;仿真&#8221;里面选&#8220;Linux&#8221;，如果需要显示颜色的话需要把&#8220;ANSI颜色&#8221;选上 </span></span></li>
    <li><span style="font-family: 新宋体"><span style="font-size: 10pt">在&#8220;外观-&gt;字体&#8221;中选择喜欢的字体，但这里对字体是有要求的，只有等宽字体才行。如果要正常显示中文的话，所选择的字体还必须包含中文字符。 </span></span></li>
    <li><span style="font-family: 新宋体"><span style="font-size: 10pt">另外就是根据你要登录的主机的字符编码选择字符编码，一般是 &#8220;UTF-8&#8243; <br />
    </span></span></li>
</ol>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">简单的几步下来就设置好了，如果还有乱码的话就退出然后重新登陆一下。如果你想所有的连接都使用这个默认配置，可以在&#8220;全局选项&#8221;中设置&#8220;默认的会话选项&#8221;，这样以后新建的连接会自动应用上面的设置了。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">PS:</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">以前用putty的时候，字体就直接用我在Linux最爱的Monaco，但在SecureCRT中用Monaco字体的话，中文会显示为乱码，这是因为Monaco字体中不包含中文字符，而SecureCRT也不会自动的选择系统默认的中文字体。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">为了解决这个问题，我们只要去找一个包含中文的等宽字体来用，我从网上找了一个Consolas和雅黑的混合字体，虽然没有Monaco好看，但效果也还不错。这里有个地方需要注意一下，在选择这个字体的字体选择对话框中，字体的默认字符集是&#8220;西方&#8221;，需要改成CHINESE_GB2312。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">如果你也想用这个字体的话，可以从</span></span><a href="http://log.anbutu.com/wp-content/uploads/2009/07/yahei_consolas.rar"><span style="font-family: 新宋体"><span style="font-size: 10pt">这里</span></span></a><span style="font-family: 新宋体"><span style="font-size: 10pt">下载。</span></span></p>
<img src ="http://www.blogjava.net/migrant/aggbug/295013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2009-09-14 14:14 <a href="http://www.blogjava.net/migrant/archive/2009/09/14/295013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Hibernate saveorUpdate与unsaved-value，save，update，delete总结</title><link>http://www.blogjava.net/migrant/archive/2009/08/27/292815.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Thu, 27 Aug 2009 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2009/08/27/292815.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/292815.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2009/08/27/292815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/292815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/292815.html</trackback:ping><description><![CDATA[<p><span style="font-family: 新宋体"><span style="font-size: 10pt">这些操作对经常使用hibernate的同学已经很熟悉了，我也经常用但一些细节并不了解， <br />
最近遇到问题才开始有看了一下。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">在读完robbin的这两个精华贴的时候，感觉清晰了很多，确实好文章。 <br />
</span></span><a href="http://www.javaeye.com/topic/2712" target="blank"><span style="font-family: 新宋体"><span style="font-size: 10pt">http://www.javaeye.com/topic/2712</span></span></a><span style="font-family: 新宋体"><span style="font-size: 10pt"> <br />
</span></span><a href="http://www.javaeye.com/topic/1604?page=1" target="blank"><span style="font-family: 新宋体"><span style="font-size: 10pt">http://www.javaeye.com/topic/1604?page=1</span></span></a><span style="font-family: 新宋体"><span style="font-size: 10pt"> <br />
还有这个精华贴 <br />
</span></span><a href="http://www.javaeye.com/topic/7484" target="blank"><span style="font-family: 新宋体"><span style="font-size: 10pt">http://www.javaeye.com/topic/7484</span></span></a><span style="font-family: 新宋体"><span style="font-size: 10pt"> <br />
也很不错。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">里面总结的很好了，我结合以上三个帖子、自己的试验（版本hibernate-3.0.5）和Hibernate文档也总结了一点，加深理解。<strong><span style="color: red">希望对刚开始学Hibernate的同学有所帮助</span>。</strong></span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt"><span style="color: red">一、saveorUpdate与unsaved-value</span> <br />
到底是sava还是update <br />
Hibernate需要判断被操作的对象究竟是一个已经持久化过的持久对象还是临时对象。 <br />
<strong>1）．主键Hibernate的id generator产生</strong> <br />
&lt;id name="id" type="java.lang.Long"&gt; <br />
&lt;column name="ID" precision="22" scale="0" /&gt; <br />
&lt;generator class="increment" /&gt; <br />
&lt;/id&gt;</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">Project project = new Project(); <br />
project.setId(XXX); <br />
this.projectDao.saveOrUpdate(project);</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">1、默认unsaved-value="null" <br />
<strong>主键是对象类型，hebernate判断project的主键是否位null，来判断project是否已被持久化</strong> <br />
是的话，对project对象发送save(project)， <br />
若自己设置了主键则直接生成update的sql，发送update(project)，即便数据库里没有那条记录。 <br />
主键是基本类型如int/long/double/ <br />
自己设置unsaved-null="0"。 <br />
所以这样的话save和update操作肯定不会报错。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">2、unsaved-value="none"， <br />
由于不论主键属性为任何值，都不可能为none，因此Hibernate总是对project对象发送update(project)</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">3、unsaved-value="any" <br />
由于不论主键属性为任何值，都肯定为any，因此Hibernate总是对project对象发送save(project)，hibernate生成主键。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">Hibernate文档中写到 <br />
saveOrUpdate()完成了如下工作： <br />
如果对象已经在这个session中持久化过了，什么都不用做 <br />
如果对象没有标识值，调用save()来保存它 <br />
如果对象的标识值与unsaved-value中的条件匹配，调用save()来保存它 <br />
如果对象使用了版本(version或timestamp),那么除非设置unsaved-value="undefined",版本检查会发生在标识符检查之前. <br />
如果这个session中有另外一个对象具有同样的标识符，抛出一个异常 </span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt"><strong>2）．主键由自己来赋值</strong> <br />
&lt;id name="id" type="java.lang.Long"&gt; <br />
&lt;column name="ID" precision="22" scale="0" /&gt; <br />
&lt;generator class="assigned" /&gt; <br />
&lt;/id&gt;</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">Project project = new Project(); <br />
project.setId(XXX); <br />
this.projectDao.saveOrUpdate(project);</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">1、默认unsaved-value="null" <br />
<strong>这时有所不同，hibernate会根据主键产生一个select，来判断此对象是否已被持久化</strong> <br />
已被持久化则update，未被持久化则save。 <br />
2、unsaved-value="none"，update对象，同上</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">3、unsaved-value="any" ，save对象， <br />
如果自己自己设置的ID在数据库中已存在，则报错。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt"><span style="color: red">二、save与update操作</span> <br />
显式的使用session.save()或者session.update()操作一个对象的时候，实际上是用不到unsaved-value的 <br />
在同一Session，save没什么可说得 <br />
update对象时, 最直接的更改一个对象的方法就是load()它，保持Session打开，然后直接修改即可: <br />
Session s =&#8230; <br />
Project p = (Project) sess.load(Project.class, id) ); <br />
p.setName(&#8220;test&#8221;); <br />
s.flush(); <br />
不用调用s.update(p);hibernate能察觉到它的变化，会自动更新。当然显示调用的话也不会错</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">Hibernate文档中写到 <br />
update()方法在下列情形下使用： <br />
程序在前面的session中装载了对象 <br />
对象被传递到UI（界面）层 <br />
对该对象进行了一些修改 <br />
对象被传递回业务层 <br />
应用程序在第二个session中调用update()保存修改 </span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt"><span style="color: red">三、delete操作</span> <br />
删除时直接自己构造一个project即可删除 <br />
this.projectDao.delete(preojct);</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">以前删除我是这样写的 <br />
public void deleteProject(String id) { <br />
Project project = (Project) this.projectDao.get(Project.class, id); <br />
if (project != null) { <br />
this.projectDao.delete(project); <br />
} <br />
即这样也是可以的 <br />
Project project = new Project(); <br />
project.setId(id); <br />
this.projectDao.delete(project).</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">如果有级联关系，需要把级联的子类也构造出来add进去，同样可以删除。</span></span></p>
<p><span style="font-family: 新宋体"><span style="font-size: 10pt">好了，罗嗦的够多了。</span></span></p>
<img src ="http://www.blogjava.net/migrant/aggbug/292815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2009-08-27 14:44 <a href="http://www.blogjava.net/migrant/archive/2009/08/27/292815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Hibernate映射配置文件中id标签的unsaved-value属性详解</title><link>http://www.blogjava.net/migrant/archive/2009/08/17/291567.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Mon, 17 Aug 2009 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2009/08/17/291567.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/291567.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2009/08/17/291567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/291567.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/291567.html</trackback:ping><description><![CDATA[<span style="font-family: 新宋体; font-size: 10pt">当你显式的使用session.save()或者session.update()操作一个对象的时候，实际上是用不到<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>的。某些情况下(父子表关联保存)，当你在程序中并没有显式的使用save或者update一个持久对象，那么<span style="font-family: " class="hilite1">Hibernate</span>需要判断被操作的对象究竟是一个已经持久化过的持久对象，是一个尚未被持久化过的内存临时对象。例如：<br />
<br style="font-family: " />
</span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">Session&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />Transaction&nbsp;tx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />Parent&nbsp;parent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Parent);&nbsp;session.load(Parent.</span><span style="color: #0000ff">class</span><span style="color: #000000">,&nbsp;id);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />Child&nbsp;child&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Child();;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />child.setParent(parent);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />child.setName(</span><span style="color: #000000">"</span><span style="color: #000000">sun</span><span style="color: #000000">"</span><span style="color: #000000">);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />parent.addChild(child);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />s.update(parent);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />s.flush();;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />tx.commit();;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />s.close();;</span></div>
<br />
<span style="font-family: 新宋体; font-size: 10pt">在上例中，程序并没有显式的session.save(child); 那么<span style="font-family: " class="hilite1">Hibernate</span>需要知道child究竟是一个临时对象，还是已经在数据库中有的持久对象。如果child是一个新创建的临时对象(本例中就是这种情况)，那么<span style="font-family: " class="hilite1">Hibernate</span>应该自动产生session.save(child)这样的操作，如果child是已经在数据库中有的持久对象，那么<span style="font-family: " class="hilite1">Hibernate</span>应该自动产生session.update(child)这样的操作。 <br style="font-family: " />
<br style="font-family: " />
因此我们需要暗示一下<span style="font-family: " class="hilite1">Hibernate</span>，究竟child对象应该对它自动save还是update。在上例中，显然我们应该暗示<span style="font-family: " class="hilite1">Hibernate</span>对child自动save，而不是自动update。那么<span style="font-family: " class="hilite1">Hibernate</span>如何判断究竟对child是save还是update呢？它会取一下child的主键属性 child.getId() ，这里假设id是 java.lang.Integer类型的。如果取到的Id值和hbm映射文件中指定的unsave-<span style="font-family: " class="hilite3">value</span>相等，那么<span style="font-family: " class="hilite1">Hibernate</span>认为child是新的内存临时对象，发送save，如果不相等，那么<span style="font-family: " class="hilite1">Hibernate</span>认为child是已经持久过的对象，发送update。 <br style="font-family: " />
<br style="font-family: " />
<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>="null" (默认情况，适用于大多数对象类型主键 Integer/Long/String/...) <br style="font-family: " />
<br style="font-family: " />
当<span style="font-family: " class="hilite1">Hibernate</span>取一下child的Id，取出来的是null(在上例中肯定取出来的是null)，和<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>设定值相等，发送save(child) <br style="font-family: " />
<br style="font-family: " />
当<span style="font-family: " class="hilite1">Hibernate</span>取一下child的id，取出来的不是null，那么和<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>设定值不相等，发送update(child) <br style="font-family: " />
<br style="font-family: " />
例如下面的情况：<br />
<br style="font-family: " />
</span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">Session&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />Transaction&nbsp;tx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />Parent&nbsp;parent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Parent);&nbsp;session.load(Parent.</span><span style="color: #0000ff">class</span><span style="color: #000000">,&nbsp;id);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />Child&nbsp;child&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Child);&nbsp;session.load(Child.</span><span style="color: #0000ff">class</span><span style="color: #000000">,&nbsp;childId);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />child.setParent(parent);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />child.setName(</span><span style="color: #000000">"</span><span style="color: #000000">sun</span><span style="color: #000000">"</span><span style="color: #000000">);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />parent.addChild(child);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />s.update(parent);;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />s.flush();;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />tx.commit();;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />s.close();;</span></div>
<br />
<span style="font-family: 新宋体; font-size: 10pt">child已经在数据库中有了，是一个持久化的对象，不是新创建的，因此我们希望<span style="font-family: " class="hilite1">Hibernate</span>发送update(child)，在该例中，<span style="font-family: " class="hilite1">Hibernate</span>取一下child.getId()，和unsave-<span style="font-family: " class="hilite3">value</span>指定的null比对一下，发现不相等，那么发送update(child)。 <br style="font-family: " />
<br style="font-family: " />
BTW: parent对象不需要操心，因为程序显式的对parent有load操作和update的操作，不需要<span style="font-family: " class="hilite1">Hibernate</span>自己来判断究竟是save还是update了。我们要注意的只是child对象的操作。另外<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>是定义在Child类的主键属性中的。<br />
<br style="font-family: " />
</span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">class&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Child"</span><span style="color: #ff0000">&nbsp;table</span><span style="color: #0000ff">="child"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">id&nbsp;</span><span style="color: #ff0000">column</span><span style="color: #0000ff">="id"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="id"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="integer"</span><span style="color: #ff0000">&nbsp;unsaved-value</span><span style="color: #0000ff">="null"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">generator&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="identity"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span></div>
<br />
<span style="font-family: 新宋体; font-size: 10pt">如果主键属性不是对象型，而是基本类型，如int/long/double/...，那么你需要指定一个数值型的<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>，例如：<br style="font-family: " />
</span><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">unsaved-value="0"</span></div>
<br />
<span style="font-family: 新宋体; font-size: 10pt">在此提醒大家，很多人以为对主键属性定义为int/long，比定义为Integer/Long运行效率来得高，认为基本类型不需要进行对象的封装和解构操作，因此喜欢把主键定义为int/long的。但实际上，<span style="font-family: " class="hilite1">Hibernate</span>内部总是把主键转换为对象型进行操作的，就算你定义为int/long型的，<span style="font-family: " class="hilite1">Hibernate</span>内部也要进行一次对象构造操作，返回给你的时候，还要进行解构操作，效率可能反而低也说不定。因此大家一定要扭转一个观点，在<span style="font-family: " class="hilite1">Hibernate</span>中，主键属性定义为基本类型，并不能够比定义为对象型效率来的高，而且也多了很多麻烦，因此建议大家使用对象型的Integer/Long定义主键。 <br style="font-family: " />
<br style="font-family: " />
<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>="none"和 <br style="font-family: " />
<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>="any" <br style="font-family: " />
<br style="font-family: " />
主主要用在主键属性不是通过<span style="font-family: " class="hilite1">Hibernate</span>生成，而是程序自己setId()的时候。 <br style="font-family: " />
<br style="font-family: " />
在这里多说一句，强烈建议使用<span style="font-family: " class="hilite1">Hibernate</span>的id generator，或者你可以自己扩展<span style="font-family: " class="hilite1">Hibernate</span>的id generator，特别注意不要使用有实际含义的字段当做主键来用！例如用户类User，很多人喜欢用用户登陆名称做为主键，这是一个很不好的习惯，当用户类和其他实体类有关联关系的时候，万一你需要修改用户登陆名称，一改就需要改好几张表中的数据。偶合性太高，而如果你使用无业务意义的id generator，那么修改用户名称，就只修改user表就行了。 <br style="font-family: " />
<br style="font-family: " />
由这个问题引申出来，如果你严格按照这个原则来设计数据库，那么你基本上是用不到手工来setId()的，你用<span style="font-family: " class="hilite1">Hibernate</span>的id generator就OK了。因此你也不需要了解当 <br style="font-family: " />
<br style="font-family: " />
<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>="none"和 <br style="font-family: " />
<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>="any" <br style="font-family: " />
<br style="font-family: " />
究竟有什么含义了。如果你非要用assigned不可，那么继续解释一下： <br style="font-family: " />
<br style="font-family: " />
<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>="none" 的时候，由于不论主键属性为任何值，都不可能为none，因此<span style="font-family: " class="hilite1">Hibernate</span>总是对child对象发送update(child) <br style="font-family: " />
<br style="font-family: " />
<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>="any" 的时候，由于不论主键属性为任何值，都肯定为any，因此<span style="font-family: " class="hilite1">Hibernate</span>总是对child对象发送save(child) <br style="font-family: " />
<br style="font-family: " />
大多数情况下，你可以避免使用assigned，只有当你使用复合主键的时候不得不手工setId()，这时候需要你自己考虑究竟怎么设置<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>了，根据你自己的需要来定。 <br style="font-family: " />
<br style="font-family: " />
BTW: Gavin King强烈不建议使用composite-id，强烈建议使用UserType。 <br style="font-family: " />
<br style="font-family: " />
因此，如果你在系统设计的时候，遵循如下原则： <br style="font-family: " />
<br style="font-family: " />
<span style="font-family: ; color: red">1、使用<span style="font-family: " class="hilite1">Hibernate</span>的id generator来生成无业务意义的主键，不使用有业务含义的字段做主键，不使用assigned。 <br style="font-family: " />
<br style="font-family: " />
2、使用对象类型(String/Integer/Long/...)来做主键，而不使用基础类型(int/long/...)做主键 <br style="font-family: " />
<br style="font-family: " />
3、不使用composite-id来处理复合主键的情况，而使用UserType来处理该种情况。</span> <br style="font-family: " />
<br style="font-family: " />
那么你永远用的是<span style="font-family: " class="hilite2">unsaved</span>-<span style="font-family: " class="hilite3">value</span>="null" ，不可能用到any/none/..了。 </span>
<img src ="http://www.blogjava.net/migrant/aggbug/291567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2009-08-17 22:41 <a href="http://www.blogjava.net/migrant/archive/2009/08/17/291567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]java.math.BigDecimal的用法</title><link>http://www.blogjava.net/migrant/archive/2009/05/07/269368.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Thu, 07 May 2009 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2009/05/07/269368.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/269368.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2009/05/07/269368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/269368.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/269368.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt; font-family: 新宋体">问题的提出：<br style="font-family: " />
如果我们编译运行下面这个程序会看到什么？</span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_18_210_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_210_Open_Text.style.display='none'; Codehighlighter1_18_210_Closed_Image.style.display='inline'; Codehighlighter1_18_210_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_18_210_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_210_Closed_Text.style.display='none'; Codehighlighter1_18_210_Open_Image.style.display='inline'; Codehighlighter1_18_210_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;</span><span id="Codehighlighter1_18_210_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_18_210_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_60_208_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_208_Open_Text.style.display='none'; Codehighlighter1_60_208_Closed_Image.style.display='inline'; Codehighlighter1_60_208_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_60_208_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_60_208_Closed_Text.style.display='none'; Codehighlighter1_60_208_Open_Image.style.display='inline'; Codehighlighter1_60_208_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;</span><span id="Codehighlighter1_60_208_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_60_208_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">0.05</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.01</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">1.0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.42</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">4.015</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">123.3</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
<span style="font-size: 10pt; font-family: 新宋体">你没有看错！结果确实是<br style="font-family: " />
<br style="font-family: " />
0.060000000000000005<br style="font-family: " />
0.5800000000000001<br style="font-family: " />
401.49999999999994<br style="font-family: " />
1.2329999999999999<br style="font-family: " />
<br style="font-family: " />
Java中的简单浮点数类型float和double不能够进行运算。不光是Java，在其它很多编程语言中也有这样的问题。在大多数情况下，计算的结果是准确的，但是多试几次（可以做一个循环）就可以试出类似上面的错误。现在终于理解为什么要有BCD码了。<br style="font-family: " />
这个问题相当严重，如果你有9.999999999999元，你的计算机是不会认为你可以购买10元的商品的。<br style="font-family: " />
在有的编程语言中提供了专门的货币类型来处理这种情况，但是Java没有。现在让我们看看如何解决这个问题。<br style="font-family: " />
<br style="font-family: " />
四舍五入<br style="font-family: " />
我们的第一个反应是做四舍五入。Math类中的round方法不能设置保留几位小数，我们只能象这样（保留两位）：<br style="font-family: " />
</span>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_34_79_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_79_Open_Text.style.display='none'; Codehighlighter1_34_79_Closed_Image.style.display='inline'; Codehighlighter1_34_79_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_34_79_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_34_79_Closed_Text.style.display='none'; Codehighlighter1_34_79_Open_Image.style.display='inline'; Codehighlighter1_34_79_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;round(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;value)&nbsp;</span><span id="Codehighlighter1_34_79_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_34_79_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Math.round(value&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100.0</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
<span style="font-size: 10pt; font-family: 新宋体">非常不幸，上面的代码并不能正常工作，给这个方法传入4.015它将返回4.01而不是4.02，如我们在上面看到的<br style="font-family: " />
4.015*100=401.49999999999994<br style="font-family: " />
因此如果我们要做到精确的四舍五入，不能利用简单类型做任何运算<br style="font-family: " />
java.text.DecimalFormat也不能解决这个问题：<br style="font-family: " />
System.out.println(new java.text.DecimalFormat("0.00").format(4.025));<br style="font-family: " />
输出是4.02<br style="font-family: " />
<br style="font-family: " />
BigDecimal<br style="font-family: " />
在《Effective Java》这本书中也提到这个原则，float和double只能用来做科学计算或者是工程计算，在商业计算中我们要用java.math.BigDecimal。BigDecimal一共有4个够造方法，我们不关心用BigInteger来够造的那两个，那么还有两个，它们是：<br />
<br style="font-family: " />
BigDecimal(double val) <br style="font-family: " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Translates a double into a BigDecimal. <br style="font-family: " />
BigDecimal(String val) <br style="font-family: " />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Translates the String repre sentation of a BigDecimal into a BigDecimal.<br />
<br style="font-family: " />
上面的API简要描述相当的明确，而且通常情况下，上面的那一个使用起来要方便一些。我们可能想都不想就用上了，会有什么问题呢？等到出了问题的时候，才发现上面哪个够造方法的详细说明中有这么一段：<br style="font-family: " />
Note: the results of this constructor can be somewhat unpredictable. One might assume that new BigDecimal(.1) is exactly equal to .1, but it is actually equal to .1000000000000000055511151231257827021181583404541015625. This is so because .1 cannot be represented exactly as a double (or, for that matter, as a binary fraction of any finite length). Thus, the long value that is being passed in to the constructor is not exactly equal to .1, appearances nonwithstanding. <br style="font-family: " />
The (String) constructor, on the other hand, is perfectly predictable: new BigDecimal(".1") is exactly equal to .1, as one would expect. Therefore, it is generally recommended that the (String) constructor be used in preference to this one.<br style="font-family: " />
原来我们如果需要精确计算，非要用String来够造BigDecimal不可！在《Effective Java》一书中的例子是用String来够造BigDecimal的，但是书上却没有强调这一点，这也许是一个小小的失误吧。<br style="font-family: " />
<br style="font-family: " />
解决方案<br style="font-family: " />
现在我们已经可以解决这个问题了，原则是使用BigDecimal并且一定要用String来够造。<br style="font-family: " />
但是想像一下吧，如果我们要做一个加法运算，需要先将两个浮点数转为String，然后够造成BigDecimal，在其中一个上调用add方法，传入另一个作为参数，然后把运算的结果（BigDecimal）再转换为浮点数。你能够忍受这么烦琐的过程吗？下面我们提供一个工具类Arith来简化操作。它提供以下静态方法，包括加减乘除和四舍五入：<br style="font-family: " />
public static double add(double v1,double v2)<br style="font-family: " />
public static double sub(double v1,double v2)<br style="font-family: " />
public static double mul(double v1,double v2)<br style="font-family: " />
public static double div(double v1,double v2)<br style="font-family: " />
public static double div(double v1,double v2,int scale)<br style="font-family: " />
public static double round(double v,int scale)<br style="font-family: " />
附录<br style="font-family: " />
源文件Arith.java：<br style="font-family: " />
</span>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.math.BigDecimal;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_49_2439_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_2439_Open_Text.style.display='none'; Codehighlighter1_49_2439_Closed_Image.style.display='inline'; Codehighlighter1_49_2439_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_49_2439_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_49_2439_Closed_Text.style.display='none'; Codehighlighter1_49_2439_Open_Image.style.display='inline'; Codehighlighter1_49_2439_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Arith&nbsp;</span><span id="Codehighlighter1_49_2439_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_49_2439_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">默认除法运算精度</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;DEF_DIV_SCALE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这个类不能实例化</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Arith()<br />
<img id="Codehighlighter1_155_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_155_171_Open_Text.style.display='none'; Codehighlighter1_155_171_Closed_Image.style.display='inline'; Codehighlighter1_155_171_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_155_171_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_155_171_Closed_Text.style.display='none'; Codehighlighter1_155_171_Open_Image.style.display='inline'; Codehighlighter1_155_171_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_155_171_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_155_171_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_177_263_Open_Image" onclick="this.style.display='none'; Codehighlighter1_177_263_Open_Text.style.display='none'; Codehighlighter1_177_263_Closed_Image.style.display='inline'; Codehighlighter1_177_263_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_177_263_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_177_263_Closed_Text.style.display='none'; Codehighlighter1_177_263_Open_Image.style.display='inline'; Codehighlighter1_177_263_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_177_263_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_177_263_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;提供精确的加法运算。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v1&nbsp;被加数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v2&nbsp;加数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;两个参数的和<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;add(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v1,</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v2)<br />
<img id="Codehighlighter1_319_488_Open_Image" onclick="this.style.display='none'; Codehighlighter1_319_488_Open_Text.style.display='none'; Codehighlighter1_319_488_Closed_Image.style.display='inline'; Codehighlighter1_319_488_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_319_488_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_319_488_Closed_Text.style.display='none'; Codehighlighter1_319_488_Open_Image.style.display='inline'; Codehighlighter1_319_488_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_319_488_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_319_488_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(Double.toString(v1));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(Double.toString(v2));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;b1.add(b2).doubleValue();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_494_580_Open_Image" onclick="this.style.display='none'; Codehighlighter1_494_580_Open_Text.style.display='none'; Codehighlighter1_494_580_Closed_Image.style.display='inline'; Codehighlighter1_494_580_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_494_580_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_494_580_Closed_Text.style.display='none'; Codehighlighter1_494_580_Open_Image.style.display='inline'; Codehighlighter1_494_580_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_494_580_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_494_580_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;提供精确的减法运算。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v1&nbsp;被减数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v2&nbsp;减数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;两个参数的差<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_631_805_Open_Image" onclick="this.style.display='none'; Codehighlighter1_631_805_Open_Text.style.display='none'; Codehighlighter1_631_805_Closed_Image.style.display='inline'; Codehighlighter1_631_805_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_631_805_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_631_805_Closed_Text.style.display='none'; Codehighlighter1_631_805_Open_Image.style.display='inline'; Codehighlighter1_631_805_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;sub(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v1,</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v2)</span><span id="Codehighlighter1_631_805_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_631_805_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(Double.toString(v1));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(Double.toString(v2));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;b1.subtract(b2).doubleValue();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_811_897_Open_Image" onclick="this.style.display='none'; Codehighlighter1_811_897_Open_Text.style.display='none'; Codehighlighter1_811_897_Closed_Image.style.display='inline'; Codehighlighter1_811_897_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_811_897_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_811_897_Closed_Text.style.display='none'; Codehighlighter1_811_897_Open_Image.style.display='inline'; Codehighlighter1_811_897_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_811_897_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_811_897_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;提供精确的乘法运算。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v1&nbsp;被乘数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v2&nbsp;乘数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;两个参数的积<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;mul(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v1,</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v2)<br />
<img id="Codehighlighter1_953_1127_Open_Image" onclick="this.style.display='none'; Codehighlighter1_953_1127_Open_Text.style.display='none'; Codehighlighter1_953_1127_Closed_Image.style.display='inline'; Codehighlighter1_953_1127_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_953_1127_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_953_1127_Closed_Text.style.display='none'; Codehighlighter1_953_1127_Open_Image.style.display='inline'; Codehighlighter1_953_1127_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_953_1127_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_953_1127_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(Double.toString(v1));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(Double.toString(v2));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;b1.multiply(b2).doubleValue();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1133_1263_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1133_1263_Open_Text.style.display='none'; Codehighlighter1_1133_1263_Closed_Image.style.display='inline'; Codehighlighter1_1133_1263_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1133_1263_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1133_1263_Closed_Text.style.display='none'; Codehighlighter1_1133_1263_Open_Image.style.display='inline'; Codehighlighter1_1133_1263_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1133_1263_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_1133_1263_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;提供（相对）精确的除法运算，当发生除不尽的情况时，精确到<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;小数点以后10位，以后的数字四舍五入。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v1&nbsp;被除数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v2&nbsp;除数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;两个参数的商<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;div(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v1,</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v2)<br />
<img id="Codehighlighter1_1319_1366_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1319_1366_Open_Text.style.display='none'; Codehighlighter1_1319_1366_Closed_Image.style.display='inline'; Codehighlighter1_1319_1366_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1319_1366_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1319_1366_Closed_Text.style.display='none'; Codehighlighter1_1319_1366_Open_Image.style.display='inline'; Codehighlighter1_1319_1366_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1319_1366_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1319_1366_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;div(v1,v2,DEF_DIV_SCALE);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1372_1540_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1372_1540_Open_Text.style.display='none'; Codehighlighter1_1372_1540_Closed_Image.style.display='inline'; Codehighlighter1_1372_1540_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1372_1540_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1372_1540_Closed_Text.style.display='none'; Codehighlighter1_1372_1540_Open_Image.style.display='inline'; Codehighlighter1_1372_1540_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1372_1540_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_1372_1540_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;提供（相对）精确的除法运算。当发生除不尽的情况时，由scale参数指<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;定精度，以后的数字四舍五入。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v1&nbsp;被除数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v2&nbsp;除数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;scale&nbsp;表示表示需要精确到小数点以后几位。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;两个参数的商<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;div(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v1,</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v2,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;scale)<br />
<img id="Codehighlighter1_1606_1945_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1606_1945_Open_Text.style.display='none'; Codehighlighter1_1606_1945_Closed_Image.style.display='inline'; Codehighlighter1_1606_1945_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1606_1945_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1606_1945_Closed_Text.style.display='none'; Codehighlighter1_1606_1945_Open_Image.style.display='inline'; Codehighlighter1_1606_1945_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1606_1945_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1606_1945_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(scale</span><span style="color: #000000">&lt;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_1636_1742_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1636_1742_Open_Text.style.display='none'; Codehighlighter1_1636_1742_Closed_Image.style.display='inline'; Codehighlighter1_1636_1742_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1636_1742_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1636_1742_Closed_Text.style.display='none'; Codehighlighter1_1636_1742_Open_Image.style.display='inline'; Codehighlighter1_1636_1742_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1636_1742_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1636_1742_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IllegalArgumentException(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;scale&nbsp;must&nbsp;be&nbsp;a&nbsp;positive&nbsp;integer&nbsp;or&nbsp;zero</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(Double.toString(v1));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(Double.toString(v2));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1951_2058_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1951_2058_Open_Text.style.display='none'; Codehighlighter1_1951_2058_Closed_Image.style.display='inline'; Codehighlighter1_1951_2058_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1951_2058_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1951_2058_Closed_Text.style.display='none'; Codehighlighter1_1951_2058_Open_Image.style.display='inline'; Codehighlighter1_1951_2058_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1951_2058_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_1951_2058_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;提供精确的小数位四舍五入处理。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;v&nbsp;需要四舍五入的数字<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;scale&nbsp;小数点后保留几位<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;四舍五入后的结果<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;round(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;v,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;scale)<br />
<img id="Codehighlighter1_2115_2437_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2115_2437_Open_Text.style.display='none'; Codehighlighter1_2115_2437_Closed_Image.style.display='inline'; Codehighlighter1_2115_2437_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2115_2437_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2115_2437_Closed_Text.style.display='none'; Codehighlighter1_2115_2437_Open_Image.style.display='inline'; Codehighlighter1_2115_2437_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2115_2437_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_2115_2437_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(scale</span><span style="color: #000000">&lt;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_2145_2251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2145_2251_Open_Text.style.display='none'; Codehighlighter1_2145_2251_Closed_Image.style.display='inline'; Codehighlighter1_2145_2251_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_2145_2251_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2145_2251_Closed_Text.style.display='none'; Codehighlighter1_2145_2251_Open_Image.style.display='inline'; Codehighlighter1_2145_2251_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_2145_2251_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_2145_2251_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IllegalArgumentException(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;scale&nbsp;must&nbsp;be&nbsp;a&nbsp;positive&nbsp;integer&nbsp;or&nbsp;zero</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(Double.toString(v));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;one&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
  <img src ="http://www.blogjava.net/migrant/aggbug/269368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2009-05-07 11:33 <a href="http://www.blogjava.net/migrant/archive/2009/05/07/269368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Struts 中 Multibox 的用法</title><link>http://www.blogjava.net/migrant/archive/2008/03/11/185507.html</link><dc:creator>J2EE学习笔记</dc:creator><author>J2EE学习笔记</author><pubDate>Tue, 11 Mar 2008 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/migrant/archive/2008/03/11/185507.html</guid><wfw:comment>http://www.blogjava.net/migrant/comments/185507.html</wfw:comment><comments>http://www.blogjava.net/migrant/archive/2008/03/11/185507.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/migrant/comments/commentRss/185507.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/migrant/services/trackbacks/185507.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 10pt; font-family: "><span style="font-family: 新宋体"><span style="font-size: 10pt; font-family: "><span style="font-family: "><span style="font-size: 10pt; font-family: 新宋体">在 <span style="font-family: ">ActionForm</span> 中定义一个数组 <span style="font-family: ">String[] selectedOptions </span>用于存放复选框被选中的值，<br style="font-family: " />
数组 <span style="font-family: ">LabelValueBean[] possibleOptions </span>用于显示所有的复选框的值。 </span></span></span></span><br style="font-family: " />
</span></span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: Arial; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionForm;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.util.LabelValueBean;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_136_852_Open_Image" onclick="this.style.display='none'; Codehighlighter1_136_852_Open_Text.style.display='none'; Codehighlighter1_136_852_Closed_Image.style.display='inline'; Codehighlighter1_136_852_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_136_852_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_136_852_Closed_Text.style.display='none'; Codehighlighter1_136_852_Open_Image.style.display='inline'; Codehighlighter1_136_852_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyActionForm&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionForm&nbsp;</span><span id="Codehighlighter1_136_852_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_136_852_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;LabelValueBean[]&nbsp;possibleOptions;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String[]&nbsp;selectedOptions;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_241_596_Open_Image" onclick="this.style.display='none'; Codehighlighter1_241_596_Open_Text.style.display='none'; Codehighlighter1_241_596_Closed_Image.style.display='inline'; Codehighlighter1_241_596_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_241_596_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_241_596_Closed_Text.style.display='none'; Codehighlighter1_241_596_Open_Image.style.display='inline'; Codehighlighter1_241_596_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;MyActionForm()&nbsp;</span><span id="Codehighlighter1_241_596_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_241_596_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Initialise&nbsp;the&nbsp;LabelValueBeans&nbsp;in&nbsp;the&nbsp;possibleOptions&nbsp;array.</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LabelValueBean[]&nbsp;lvBeans&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LabelValueBean[</span><span style="color: #000000">4</span><span style="color: #000000">];<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvBeans[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LabelValueBean(</span><span style="color: #000000">"</span><span style="color: #000000">Alpha</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">A</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvBeans[</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LabelValueBean(</span><span style="color: #000000">"</span><span style="color: #000000">Beta</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">B</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvBeans[</span><span style="color: #000000">2</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LabelValueBean(</span><span style="color: #000000">"</span><span style="color: #000000">Charlie</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">C</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvBeans[</span><span style="color: #000000">3</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LabelValueBean(</span><span style="color: #000000">"</span><span style="color: #000000">Delta</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">D</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.possibleOptions&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;lvBeans;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_645_674_Open_Image" onclick="this.style.display='none'; Codehighlighter1_645_674_Open_Text.style.display='none'; Codehighlighter1_645_674_Closed_Image.style.display='inline'; Codehighlighter1_645_674_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_645_674_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_645_674_Closed_Text.style.display='none'; Codehighlighter1_645_674_Open_Image.style.display='inline'; Codehighlighter1_645_674_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;LabelValueBean[]&nbsp;getPossibleOptions()&nbsp;</span><span id="Codehighlighter1_645_674_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_645_674_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;possibleOptions;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_715_744_Open_Image" onclick="this.style.display='none'; Codehighlighter1_715_744_Open_Text.style.display='none'; Codehighlighter1_715_744_Closed_Image.style.display='inline'; Codehighlighter1_715_744_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_715_744_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_715_744_Closed_Text.style.display='none'; Codehighlighter1_715_744_Open_Image.style.display='inline'; Codehighlighter1_715_744_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String[]&nbsp;getSelectedOptions()&nbsp;</span><span id="Codehighlighter1_715_744_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_715_744_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;selectedOptions;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_805_850_Open_Image" onclick="this.style.display='none'; Codehighlighter1_805_850_Open_Text.style.display='none'; Codehighlighter1_805_850_Closed_Image.style.display='inline'; Codehighlighter1_805_850_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_805_850_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_805_850_Closed_Text.style.display='none'; Codehighlighter1_805_850_Open_Image.style.display='inline'; Codehighlighter1_805_850_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setSelectedOptions(String[]&nbsp;selectedOptions)&nbsp;</span><span id="Codehighlighter1_805_850_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_805_850_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.selectedOptions&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;selectedOptions;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
<br />
<span style="font-family: 宋体"><span style="font-family: 新宋体"><span style="font-family: ">在 <span style="font-family: ">JSP</span> 中使用以下代码：</span></span><br style="font-family: " />
</span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: Arial; background-color: #eeeeee"><span style="color: #0000ff">&lt;</span><span style="color: #800000">logic:iterate&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myActionForm"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="item"</span><span style="color: #ff0000">&nbsp;property</span><span style="color: #0000ff">="possibleOptions"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html:multibox&nbsp;</span><span style="color: #ff0000">property</span><span style="color: #0000ff">="selectedOptions"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean:write&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="item"</span><span style="color: #ff0000">&nbsp;property</span><span style="color: #0000ff">="value"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html:multibox</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean:write&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="item"</span><span style="color: #ff0000">&nbsp;property</span><span style="color: #0000ff">="label"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">logic:iterate</span><span style="color: #0000ff">&gt;</span></div>
</span>
<img src ="http://www.blogjava.net/migrant/aggbug/185507.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/migrant/" target="_blank">J2EE学习笔记</a> 2008-03-11 22:50 <a href="http://www.blogjava.net/migrant/archive/2008/03/11/185507.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>