﻿<?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-狂奔 lion-随笔分类-Java EE</title><link>http://www.blogjava.net/yangyi/category/28785.html</link><description>用心 - 珍惜时间，勇于创造</description><language>zh-cn</language><lastBuildDate>Wed, 16 Jan 2008 05:59:25 GMT</lastBuildDate><pubDate>Wed, 16 Jan 2008 05:59:25 GMT</pubDate><ttl>60</ttl><item><title>如何学习spring</title><link>http://www.blogjava.net/yangyi/archive/2008/01/16/175607.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Wed, 16 Jan 2008 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2008/01/16/175607.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/175607.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2008/01/16/175607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/175607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/175607.html</trackback:ping><description><![CDATA[学习这些框架技术，我觉得归根结底就是做什么的，为什么做，如何做<br />
前人说读书有三个层次，我看这大概可以总结为是新的三个层次：）<br />
因为没有搞清楚为什么要用，就会误用，用了还不如没用。其实我觉得学spring读读rod那个原著挺好的，比单纯学spring有帮助，最好自己有体会。比如你开发网站很熟练了，自然就知道为什么要用spring了。等完全领会了他那两本书后，再读读他们的reference book应该差不多了。<br />
这个过程其实就是做什么-&gt;为什么-&gt;怎么做的过程<br />
<br />
<img src ="http://www.blogjava.net/yangyi/aggbug/175607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2008-01-16 10:19 <a href="http://www.blogjava.net/yangyi/archive/2008/01/16/175607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>延迟加载技术及其在iBATIS中的实现</title><link>http://www.blogjava.net/yangyi/archive/2007/12/09/166486.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Sun, 09 Dec 2007 11:17:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2007/12/09/166486.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/166486.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2007/12/09/166486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/166486.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/166486.html</trackback:ping><description><![CDATA[<p>O/R映射框架的延迟加载技术实现大体上有这么4种(参看Martin Fowler的意见):<br />
(<a title="http://www.martinfowler.com/eaaCatalog/lazyLoad.html" href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html">http://www.martinfowler.com/eaaCatalog/lazyLoad.html</a>)<br />
<br />
There are four main varieties of lazy load. <strong>Lazy Initialization</strong> uses a special marker value (usually null) to indicate a field isn't loaded. Every access to the field checks the field for the marker value and if unloaded, loads it. <strong>Virtual Proxy</strong> is an object with the same interface as the real object. The first time one of its methods are called it loads the real the object and then delegates. <strong>Value Holder</strong> is an object with a getValue method. Clients call getValue to get the real object, the first call triggers the load. A <strong>ghost</strong> is the real object without any data. The first time you call a method the ghost loads the full data into its fields.</p>
通过阅读源代码,发现iBATIS中的延迟加载是用上述方式中的虚拟代理实现的.<br />
<br />
在动态代理的实现上, iBATIS有Java动态代理和CGLIB两种实现方案,iBATIS把用CGLIB实现的方案称为Enhanced的方案,可见CGLIB的效率会比java的动态代理效率要高.<br />
在iBATIS首先判断是否定义了延迟加载,如果定义了,则利用Lazy的Loader来提取数据(返回一个Proxy).如没有执行对这个的任何操作,或者只是不再使用(finalize),则不做处理,否者就加载真正的对象.<br />
<br />
可以通过阅读类<br />
com.ibatis.sqlmap.engine.mapping.result.loader.LazyResultLoader<br />
的源码获取更多的细节. 
<img src ="http://www.blogjava.net/yangyi/aggbug/166486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2007-12-09 19:17 <a href="http://www.blogjava.net/yangyi/archive/2007/12/09/166486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>建了一个工具类，送给需要拼接插入字符串的朋友们：)</title><link>http://www.blogjava.net/yangyi/archive/2007/06/14/124275.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Thu, 14 Jun 2007 04:41:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2007/06/14/124275.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/124275.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2007/06/14/124275.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/124275.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/124275.html</trackback:ping><description><![CDATA[<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />
<span style="color: rgb(0, 0, 255);">import</span>
<span style="color: rgb(0, 0, 0);">&nbsp;java.sql.Date;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_23_71_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_71_Open_Text.style.display='none'; Codehighlighter1_23_71_Closed_Image.style.display='inline'; Codehighlighter1_23_71_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_23_71_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_23_71_Closed_Text.style.display='none'; Codehighlighter1_23_71_Open_Image.style.display='inline'; Codehighlighter1_23_71_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span>
<span id="Codehighlighter1_23_71_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">/**&nbsp;*/</span>
<span id="Codehighlighter1_23_71_Open_Text">
<span style="color: rgb(0, 128, 0);">/**</span>
<span style="color: rgb(0, 128, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;这个类用来对数据库做插入操作时采用<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span>
<span style="color: rgb(128, 128, 128);">@author</span>
<span style="color: rgb(0, 128, 0);">&nbsp;yangyi<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span>
<span style="color: rgb(0, 128, 0);">*/</span>
</span>
<span style="color: rgb(0, 0, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />
<br />
<img id="Codehighlighter1_98_1315_Open_Image" onclick="this.style.display='none'; Codehighlighter1_98_1315_Open_Text.style.display='none'; Codehighlighter1_98_1315_Closed_Image.style.display='inline'; Codehighlighter1_98_1315_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" />
<img id="Codehighlighter1_98_1315_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_98_1315_Closed_Text.style.display='none'; Codehighlighter1_98_1315_Open_Image.style.display='inline'; Codehighlighter1_98_1315_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />
</span>
<span style="color: rgb(0, 0, 255);">public</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">class</span>
<span style="color: rgb(0, 0, 0);">&nbsp;InsertTool&nbsp;</span>
<span id="Codehighlighter1_98_1315_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
<img src="http://www.blogjava.net/images/dot.gif"  alt="" />
</span>
<span id="Codehighlighter1_98_1315_Open_Text">
<span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">private</span>
<span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;tableName;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">private</span>
<span style="color: rgb(0, 0, 0);">&nbsp;StringBuffer&nbsp;sbColumnName;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">private</span>
<span style="color: rgb(0, 0, 0);">&nbsp;StringBuffer&nbsp;sbColumnContent;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_242_352_Open_Image" onclick="this.style.display='none'; Codehighlighter1_242_352_Open_Text.style.display='none'; Codehighlighter1_242_352_Closed_Image.style.display='inline'; Codehighlighter1_242_352_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_242_352_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_242_352_Closed_Text.style.display='none'; Codehighlighter1_242_352_Open_Image.style.display='inline'; Codehighlighter1_242_352_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">public</span>
<span style="color: rgb(0, 0, 0);">&nbsp;InsertTool(String&nbsp;tableName)&nbsp;</span>
<span id="Codehighlighter1_242_352_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
<img src="http://www.blogjava.net/images/dot.gif"  alt="" />
</span>
<span id="Codehighlighter1_242_352_Open_Text">
<span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">this</span>
<span style="color: rgb(0, 0, 0);">.tableName&nbsp;</span>
<span style="color: rgb(0, 0, 0);">=</span>
<span style="color: rgb(0, 0, 0);">&nbsp;tableName;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbColumnName&nbsp;</span>
<span style="color: rgb(0, 0, 0);">=</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">new</span>
<span style="color: rgb(0, 0, 0);">&nbsp;StringBuffer();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbColumnContent&nbsp;</span>
<span style="color: rgb(0, 0, 0);">=</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">new</span>
<span style="color: rgb(0, 0, 0);">&nbsp;StringBuffer();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span>
</span>
<span style="color: rgb(0, 0, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />
<br />
<img id="Codehighlighter1_413_599_Open_Image" onclick="this.style.display='none'; Codehighlighter1_413_599_Open_Text.style.display='none'; Codehighlighter1_413_599_Closed_Image.style.display='inline'; Codehighlighter1_413_599_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" />
<img id="Codehighlighter1_413_599_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_413_599_Closed_Text.style.display='none'; Codehighlighter1_413_599_Open_Image.style.display='inline'; Codehighlighter1_413_599_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">public</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">void</span>
<span style="color: rgb(0, 0, 0);">&nbsp;add(String&nbsp;columnName,&nbsp;Object&nbsp;columnContent)&nbsp;</span>
<span id="Codehighlighter1_413_599_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
<img src="http://www.blogjava.net/images/dot.gif"  alt="" />
</span>
<span id="Codehighlighter1_413_599_Open_Text">
<span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertColumnName(columnName);<br />
<img id="Codehighlighter1_484_536_Open_Image" onclick="this.style.display='none'; Codehighlighter1_484_536_Open_Text.style.display='none'; Codehighlighter1_484_536_Closed_Image.style.display='inline'; Codehighlighter1_484_536_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_484_536_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_484_536_Closed_Text.style.display='none'; Codehighlighter1_484_536_Open_Image.style.display='inline'; Codehighlighter1_484_536_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">if</span>
<span style="color: rgb(0, 0, 0);">&nbsp;(columnContent&nbsp;</span>
<span style="color: rgb(0, 0, 255);">instanceof</span>
<span style="color: rgb(0, 0, 0);">&nbsp;Date)&nbsp;</span>
<span id="Codehighlighter1_484_536_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
<img src="http://www.blogjava.net/images/dot.gif"  alt="" />
</span>
<span id="Codehighlighter1_484_536_Open_Text">
<span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbColumnContent.append(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">,</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 0);">+</span>
<span style="color: rgb(0, 0, 0);">&nbsp;columnContent);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span>
</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">else</span>
<span style="color: rgb(0, 0, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbColumnContent.append(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">,'</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 0);">+</span>
<span style="color: rgb(0, 0, 0);">&nbsp;columnContent&nbsp;</span>
<span style="color: rgb(0, 0, 0);">+</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">'</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span>
</span>
<span style="color: rgb(0, 0, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />
<br />
<img id="Codehighlighter1_657_737_Open_Image" onclick="this.style.display='none'; Codehighlighter1_657_737_Open_Text.style.display='none'; Codehighlighter1_657_737_Closed_Image.style.display='inline'; Codehighlighter1_657_737_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" />
<img id="Codehighlighter1_657_737_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_657_737_Closed_Text.style.display='none'; Codehighlighter1_657_737_Open_Image.style.display='inline'; Codehighlighter1_657_737_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">public</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">void</span>
<span style="color: rgb(0, 0, 0);">&nbsp;add(String&nbsp;columnName,&nbsp;</span>
<span style="color: rgb(0, 0, 255);">int</span>
<span style="color: rgb(0, 0, 0);">&nbsp;columnContent)&nbsp;</span>
<span id="Codehighlighter1_657_737_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
<img src="http://www.blogjava.net/images/dot.gif"  alt="" />
</span>
<span id="Codehighlighter1_657_737_Open_Text">
<span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insertColumnName(columnName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbColumnContent.append(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">,</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">+</span>
<span style="color: rgb(0, 0, 0);">columnContent);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span>
</span>
<span style="color: rgb(0, 0, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />
<br />
<img id="Codehighlighter1_790_834_Open_Image" onclick="this.style.display='none'; Codehighlighter1_790_834_Open_Text.style.display='none'; Codehighlighter1_790_834_Closed_Image.style.display='inline'; Codehighlighter1_790_834_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" />
<img id="Codehighlighter1_790_834_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_790_834_Closed_Text.style.display='none'; Codehighlighter1_790_834_Open_Image.style.display='inline'; Codehighlighter1_790_834_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">private</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">void</span>
<span style="color: rgb(0, 0, 0);">&nbsp;insertColumnName(String&nbsp;columnName)&nbsp;</span>
<span id="Codehighlighter1_790_834_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
<img src="http://www.blogjava.net/images/dot.gif"  alt="" />
</span>
<span id="Codehighlighter1_790_834_Open_Text">
<span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbColumnName.append(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">,</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 0);">+</span>
<span style="color: rgb(0, 0, 0);">&nbsp;columnName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span>
</span>
<span style="color: rgb(0, 0, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />
<br />
<img id="Codehighlighter1_867_1132_Open_Image" onclick="this.style.display='none'; Codehighlighter1_867_1132_Open_Text.style.display='none'; Codehighlighter1_867_1132_Closed_Image.style.display='inline'; Codehighlighter1_867_1132_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" />
<img id="Codehighlighter1_867_1132_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_867_1132_Closed_Text.style.display='none'; Codehighlighter1_867_1132_Open_Image.style.display='inline'; Codehighlighter1_867_1132_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">public</span>
<span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;getInsertSql()&nbsp;</span>
<span id="Codehighlighter1_867_1132_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
<img src="http://www.blogjava.net/images/dot.gif"  alt="" />
</span>
<span id="Codehighlighter1_867_1132_Open_Text">
<span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;sb&nbsp;</span>
<span style="color: rgb(0, 0, 0);">=</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">new</span>
<span style="color: rgb(0, 0, 0);">&nbsp;StringBuffer();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">INSERT&nbsp;INTO&nbsp;</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(tableName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(sbColumnName.substring(</span>
<span style="color: rgb(0, 0, 0);">1</span>
<span style="color: rgb(0, 0, 0);">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">)&nbsp;VALUES(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(sbColumnContent.substring(</span>
<span style="color: rgb(0, 0, 0);">1</span>
<span style="color: rgb(0, 0, 0);">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">)</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">return</span>
<span style="color: rgb(0, 0, 0);">&nbsp;sb.toString();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span>
</span>
<span style="color: rgb(0, 0, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1175_1313_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1175_1313_Open_Text.style.display='none'; Codehighlighter1_1175_1313_Closed_Image.style.display='inline'; Codehighlighter1_1175_1313_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1175_1313_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_1175_1313_Closed_Text.style.display='none'; Codehighlighter1_1175_1313_Open_Image.style.display='inline'; Codehighlighter1_1175_1313_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color: rgb(0, 0, 255);">public</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">static</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">void</span>
<span style="color: rgb(0, 0, 0);">&nbsp;main(String&nbsp;args[])</span>
<span id="Codehighlighter1_1175_1313_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
<img src="http://www.blogjava.net/images/dot.gif"  alt="" />
</span>
<span id="Codehighlighter1_1175_1313_Open_Text">
<span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InsertTool&nbsp;it&nbsp;</span>
<span style="color: rgb(0, 0, 0);">=</span>
<span style="color: rgb(0, 0, 0);">&nbsp;</span>
<span style="color: rgb(0, 0, 255);">new</span>
<span style="color: rgb(0, 0, 0);">&nbsp;InsertTool(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">aa</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it.add(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">a</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">,</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">d</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it.add(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">b</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">,</span>
<span style="color: rgb(0, 0, 0);">10</span>
<span style="color: rgb(0, 0, 0);">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it.add(</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">c</span>
<span style="color: rgb(0, 0, 0);">"</span>
<span style="color: rgb(0, 0, 0);">,</span>
<span style="color: rgb(0, 0, 0);">1</span>
<span style="color: rgb(0, 0, 0);">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(it.getInsertSql());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span>
</span>
<span style="color: rgb(0, 0, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span>
</span>
<span style="color: rgb(0, 0, 0);">
<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />
</span>
</div>
使用方法非常简单，看看Main就知道啦 
<img src ="http://www.blogjava.net/yangyi/aggbug/124275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2007-06-14 12:41 <a href="http://www.blogjava.net/yangyi/archive/2007/06/14/124275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[译]JDBC4.0具有哪些新特性？</title><link>http://www.blogjava.net/yangyi/archive/2007/04/24/113241.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Tue, 24 Apr 2007 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2007/04/24/113241.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/113241.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2007/04/24/113241.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/113241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/113241.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在 Java SE 6 所提供的诸多新特性和改进中，值得一提的是为 Java 程序提供数据库访问机制的 JDBC 版本升级到了 4.0, 这个以 JSR-221 为代号的版本 , 提供了更加便利的代码编写机制及柔性 , 并且支持更多的数据类型 . 在本文中，我们将从编码的易用性及柔性的角度探讨 JDBC 4.0 所带来的新特性及改进。 <br>JDBC 4.0 的新特性 <br><br>JDBC 4.0 文档列举了 20 个改进及新特性 , 大小不等 . 本文无法做到尽述其详 , 为此笔者根据其功能特点及应用领域将其分为下述四类： <br><br>1.     驱动及连接管理 <br><br>2.     异常处理 <br><br>3.     数据类型支持 <br><br>4.     API 的变化 <br><br>本文按照上述四类展开详述<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yangyi/archive/2007/04/24/113241.html'>阅读全文</a><img src ="http://www.blogjava.net/yangyi/aggbug/113241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2007-04-24 16:25 <a href="http://www.blogjava.net/yangyi/archive/2007/04/24/113241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Zarar Siddiqi: JSP是不是应该退出历史舞台了？（译自theServerSide.com）</title><link>http://www.blogjava.net/yangyi/archive/2007/04/22/112630.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Sun, 22 Apr 2007 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2007/04/22/112630.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/112630.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2007/04/22/112630.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/112630.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/112630.html</trackback:ping><description><![CDATA[Zarar Siddiqi写了一篇题为"<a href="http://weblogs.java.net/blog/zarar/archive/2007/04/are_jsps_dead.html">Are JSPs Dead?</a>,"的文章，文中不无夸张地建议，JSP技术应该也许根本不该出现在JavaEE开发的前沿阵地上，或许仅仅是ASP的原因吧.他说：<blockquote>JSP给Java的应用的重用所带来的阻碍是巨大的, J2EE中并没有提供这种机制.而如果你非要这么做的话，则必然以牺牲其他模块或应用的更大的可重用性为代价。对于容器的高度依赖导致了对SE的重用不可实现，同时测试工作也变得举步维艰，您或许不得不建立一些Mock对象来观察结果.JSP和Servlet一对一的绑定，对我来说也不是什么有趣的事情，后台对JSP编译为Java类的处理也毫无意义. 既然可以通过Servlet为网页直接服务，为什么还要多余的推出一种混合的技术呢？<br />
<br />
如果您还在考虑用JSP做您的MVC模型中的V部分来开发哪怕是一个中等大小的应用，您已经在犯严重的错误了。特别是，如果您的JSP仅仅作为视图显示的时候（页面中没有实际代码，只有taglibs），因为，您甚至连它仅有的&#8220;优点&#8221;——内嵌Java代码都没有应用。如果您是那种认为标签库没有想象中那么糟的人，那么您还是可以使用页面脚本，以此来生产您认为合格的软件。您已经无药可救了。<br />
</blockquote>Zarar建议使用Freemarker, Velocity, 以及AJAX 来替换JSP.<br />
<br />
这实在是种有趣的想法, 因为不论我们喜欢与否 (Zarar显然属于&#8220;否&#8221;的行列) JSPs是Java EE中默认的显示技术. JSP是否称职呢? 是否还有其他的可以成为标准的技术呢? 您又在应用何种技术呢? 为什么? (那些还被迫夹在陈旧的项目的中的，仍在使用Struts 1.1和JSPs的&#8220;可怜&#8221;的朋友们呢?) 
<img src ="http://www.blogjava.net/yangyi/aggbug/112630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2007-04-22 15:31 <a href="http://www.blogjava.net/yangyi/archive/2007/04/22/112630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用代码一步步学习Spring：IoC，AOP</title><link>http://www.blogjava.net/yangyi/archive/2006/12/11/87082.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Mon, 11 Dec 2006 14:55:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2006/12/11/87082.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/87082.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2006/12/11/87082.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/87082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/87082.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文通过几段可以运行的代码示例，让大家在20分钟之内掌握Spring的IoC，AOP这些不易理解的概念&nbsp;&nbsp;<a href='http://www.blogjava.net/yangyi/archive/2006/12/11/87082.html'>阅读全文</a><img src ="http://www.blogjava.net/yangyi/aggbug/87082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2006-12-11 22:55 <a href="http://www.blogjava.net/yangyi/archive/2006/12/11/87082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数字验证码小图生成程序</title><link>http://www.blogjava.net/yangyi/archive/2006/09/21/71188.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Thu, 21 Sep 2006 12:13:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2006/09/21/71188.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/71188.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2006/09/21/71188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/71188.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/71188.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 做了一个登陆验证码的生成小程序，或许对大家有用。支持背景图和文字旋转&nbsp;&nbsp;<a href='http://www.blogjava.net/yangyi/archive/2006/09/21/71188.html'>阅读全文</a><img src ="http://www.blogjava.net/yangyi/aggbug/71188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2006-09-21 20:13 <a href="http://www.blogjava.net/yangyi/archive/2006/09/21/71188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Ioc值得注意的两个特性</title><link>http://www.blogjava.net/yangyi/archive/2006/08/24/65402.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Wed, 23 Aug 2006 17:03:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2006/08/24/65402.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/65402.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2006/08/24/65402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/65402.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/65402.html</trackback:ping><description><![CDATA[1 Spring支持生命周期的回调，通过在bean配置属性中增加init-method来做一些初始化的工作，随之而产生了一个疑问：property设值注入和init-method哪个在先呢？结论是前者！这样最大的好处是，我们不必再为第三方的框架代码编写单独的适配器，仅仅通过在本类中property设置，然后在init-method中初始化即可；<br />
2 设值注入时，在setXX方法中可以不仅仅是简单的this.xX = xX;而可以对xX做一些加工，如：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">setXX(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;xX){<br />
</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(xX&nbsp;</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">){<br />
&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.xX&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;xX</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">;<br />
}</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.xX&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;xX;<br />
}</span></div>
这两个小技巧还停留在使用软件而不是开发软件的浅层次上，然而随着Spring的日益流行，他们也许能给站在巨人肩膀上的您的开发带来莫大的便利。<br />
<img src ="http://www.blogjava.net/yangyi/aggbug/65402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2006-08-24 01:03 <a href="http://www.blogjava.net/yangyi/archive/2006/08/24/65402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于一些java框架“中文问题”的看法</title><link>http://www.blogjava.net/yangyi/archive/2006/08/21/64781.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Mon, 21 Aug 2006 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2006/08/21/64781.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/64781.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2006/08/21/64781.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/64781.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/64781.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天上blogjava，发现首页技术区突然多了好几篇关于中文问题的文章。作者一出手便洋洋洒洒不下千言，而且好像言语中充满了对spring支持者的不屑。在这里仅从技术角度发表一下我的个人看法，有说得不对的地方，欢迎批评指正。&nbsp;&nbsp;<a href='http://www.blogjava.net/yangyi/archive/2006/08/21/64781.html'>阅读全文</a><img src ="http://www.blogjava.net/yangyi/aggbug/64781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2006-08-21 14:07 <a href="http://www.blogjava.net/yangyi/archive/2006/08/21/64781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何利用apache, war包发布你的网站</title><link>http://www.blogjava.net/yangyi/archive/2006/08/20/64586.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Sun, 20 Aug 2006 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2006/08/20/64586.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/64586.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2006/08/20/64586.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/64586.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/64586.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 首先说明war包和jar包，zip包没有什么区别，都是zip格式的文件压缩流。因此在制作时除了利用sun jdk中的jar命令，完全可以直接用winrar之类的工具进行zip格式压缩，只要注意好扩展名就好了。<br />
&nbsp;&nbsp;&nbsp; 在发布war包时，注意到$tomcat_home/webapps/ROOT下面是我们刚刚安装tomcat后的测试页面,也是我们部署的根位置所在.把这个文件夹备份到其他位置,或更改名称.然后把你要部署的war包,改名为ROOT.war,注意这里是大小写敏感的,一定要大写.登陆http://localhost:8080,怎么样,可以了吧?<br />
&nbsp;&nbsp;&nbsp; 想利用apache更安全的发布你的网站？好，下载apache2.0，和tomcat调用模块mod_jk.so，放到安装好的apache2modules文件夹下，在$apache_home/conf<a></a>/httpd.conf配置文件中加入如下内容:<br />
&lt;VirtualHost *:80&gt;<br />
&nbsp;&nbsp;&nbsp; #你的电子邮箱<br />
&nbsp;&nbsp;&nbsp; ServerAdmin contactyang@163.com<br />
&nbsp;&nbsp;&nbsp; #DocumentRoot C:/Program Files/tomcat/webapps/ROOT<br />
&nbsp;&nbsp;&nbsp; #有域名吗<br />
&nbsp;&nbsp;&nbsp; ServerName localhost<br />
&nbsp;&nbsp;&nbsp; #Load m<a></a>odule of mod_jk apache tomcat connecter<br />
&nbsp;&nbsp;&nbsp; LoadModule jk_module modules/mod_jk.so <br />
&nbsp;&nbsp;&nbsp; JkWorkersFile conf/workers.properties<br />
&nbsp;&nbsp;&nbsp; JkLogFile&nbsp;&nbsp;&nbsp;&nbsp; logs/mod_jk.log<a></a><br />
&nbsp;&nbsp;&nbsp; JkMount&nbsp; /*.jsp ajp13<br />
<br />
&nbsp;&nbsp;&nbsp; #Load jk2 apache tomcat connecter end<br />
&lt;/VirtualHost&gt;<br />
<br />
在$apache_home/conf目录下建立workers.properties文件,加入如下内容:<br />
<br />
workers.tomcat_home="c:\program files\tomcat"<br />
#让mod_jk模块知道Tomcat的安装路径<br />
workers.java_home=C:\Program Files\Java\jdk1.5.0<br />
#让mod_jk模块知道jdk路径<br />
ps=\<br />
worker.list=ajp13<br />
#这里是关键，名字要和httpd.conf的一致。如果这里改了httpd.conf也要改。<br />
worker.ajp13.port=8009<br />
#工作端口,tomcat的jk监听端口，可以查看Tomcat 的Server.xml中有port="8009" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"这样的Connector<br />
worker.ajp13.host=localhost <br />
#Tomcat所在机器，如果安装在与apache不同的机器则需要设置IP<br />
worker.ajp13.type=ajp13<br />
#类型，Apache与Tomcat之间传递使用的协议<br />
worker.ajp13.lbfactor=1<br />
<br />
登陆http://localhost/<br />
<br />
怎么样?有了吧<br />
<img src ="http://www.blogjava.net/yangyi/aggbug/64586.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2006-08-20 09:35 <a href="http://www.blogjava.net/yangyi/archive/2006/08/20/64586.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于SOA与Web Services的疑问</title><link>http://www.blogjava.net/yangyi/archive/2006/08/18/64414.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Fri, 18 Aug 2006 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2006/08/18/64414.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/64414.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2006/08/18/64414.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/64414.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/64414.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 今天忽然想到一个问题，Ｗｅｂ　Ｓｅｒｖｉｃｅ未来的发展趋势是什么？为什么近两年听到的声音越来越少了？ 记得０４年的时候，WS还是比较火的，不仅在课堂上学习，还做过一些ｊａｖａ和.ｎｅｔ的应用，以后就不怎么用了，也许是分布式理论受到了挑战吧 （Rod果然站在时代的前沿）。<br />
&nbsp;&nbsp;&nbsp; 许多人说，现在最火的SOA里面用到的技术就是Ｗｅｂ　Ｓｅｒｖｉｃｅ，可是ＳＯＡ是个概念而已，大厂商主导的东西不一定经得起推敲的，正如ＷＳ一样。<br />
<br />
网上一篇介绍SOA的文章如是说：<br />
<br />
<font size="2">面向服务架构（SOA）的原则 <br />
<br />
Web service已经不再是新婚的娘子。众多企业都已经创建各种实验性Web Services 项目，事实证明，这项新兴的分布式计算技术确实能够降低集成和开发的成本。另外，一些关键的Web Services标准纷纷制定，强安全（robust security）和管理方面的产品也陆续问世。对于志向远大的企业来说，他们已经在考虑下一步了。<br />
<br />
对大多数公司来说，下一步要考虑的不再是点对点的应用，而是Web services在企业间以及业务伙伴间更为宽广的应用。这种技术的变迁需要更松散耦合、面向基于标准的服务的架构。这样一个架构要求对IT在组织中的角色有新的观点和认识，而不仅仅是一种实现方法。通过对业务的敏捷反应，企业可以得到实实在在的回报，而要达到这一点，面向服务架构设计师的角色非常关键。除此之外，潜在的回报更是不可胜数－分布计算技术能够保证对业务需求足够灵活的反应，而这种业务上的敏捷正是各公司梦寐以求而目前还遥不可及的。<br />
<br />
分布式计算将网络上分布的软件资源看作是各种服务。面向服务架构是一种不错的解决方案。但这种架构不是什么新思想；CORBA和DCOM就很类似，但是，这些过去的面向服务架构都受到一些难题的困扰：首先，它们是紧密耦合的，这就意味着如分布计算连接的两端都必须遵循同样API的约束。打比方说，如果一个COM对象的代码有了更改，那么访问该对象的代码也必须作出相应更改。其二，这些面向服务架构受到厂商的约束。Microsoft控制DCOM自不必说，CORBA也只是一个伪装的标准化努力，事实上，实现一个CORBA架构，经常都是在某个厂商对规范的实现上进行工作。<br />
<br />
Web services是在改进DCOM和CORBA缺点上的努力。今天应用Web services的面向服务架构与过去不同的特点就在于它们是基于标准以及松散耦合的。广泛接受的标准（如XML和SOAP）提供了在各不同厂商解决方案之间的交互性。而松散耦合将分布计算中的参与者隔离开来，交互两边某一方的改动并不会影响到另一方。这两者的结合意味着公司可以实现某些Web services而不用对使用这些Web services的客户端的知识有任何了解。我们将这种基于标准的、松散耦合的面向服务的架构简称为SOA。<a></a></font><br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 这和当年的宣传WS并没有什么不同，仅仅多了个ＳＯＡ而已， 试问今天的架构师，哪位应用了ＷＳ，哪位涉及了ＳＯＡ？ 有多少成功的案例？哪位知道这项技术在美国的发展情况，有很广泛的应用吗，还是仅限于ＳＯＡ？<br />
&nbsp;&nbsp;&nbsp; 真正项目中需要SOA思想的那种跨国财团有几个？对于在国内最多的中小型应用，暴露服务倒是极危险的事情。不过作为程序员，学习新技术，新概念实属无奈之举 。有些不必要的复杂性干扰人的思维，让你无法干净利落地做事。<br />
<br />
<img src ="http://www.blogjava.net/yangyi/aggbug/64414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2006-08-18 17:51 <a href="http://www.blogjava.net/yangyi/archive/2006/08/18/64414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>也谈多层架构</title><link>http://www.blogjava.net/yangyi/archive/2006/08/18/64412.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Fri, 18 Aug 2006 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2006/08/18/64412.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/64412.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2006/08/18/64412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/64412.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/64412.html</trackback:ping><description><![CDATA[<span class="word01">敏捷开发中一个经典的原则YAGNI原则，就是通过重构提取公因式当出现一次时，不分层，以后业务复杂了，马上抽象出一个层次来，分层是依赖倒置原则和模版方法模式的应用。谈到时候应该分层，我想：如果只是一个非常简单的网站，3、5个页面，7、8张表如果在这种需求下去分层，无异于自己折磨自己，添加系统不必要的复杂性。</span>
<img src ="http://www.blogjava.net/yangyi/aggbug/64412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2006-08-18 17:35 <a href="http://www.blogjava.net/yangyi/archive/2006/08/18/64412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何应用Hibernate在运行期获取属性的值</title><link>http://www.blogjava.net/yangyi/archive/2006/08/04/61726.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Fri, 04 Aug 2006 05:39:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2006/08/04/61726.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/61726.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2006/08/04/61726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/61726.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/61726.html</trackback:ping><description><![CDATA[Hibernate根据配置文件从数据库中把关系型的数据以对象的形式挖掘出来，那么假如我有一个Table控件，可以放置展现任何的表结构，如何在运行期做到把数据载入呢？Hibernate已经把数据读成对象的形式，就注定没有JDBC一般灵活，为次可以通过编写如下的两个工具方法来实现：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.lang.reflect.Method;<br />
<br />
</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;*&nbsp;获取指定bean的指定字段的值<br />
&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;BeanUtils&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;BeanUtils(){}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;根据beanName和列名字获取hql语句<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;beanName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;columnNames<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);">&nbsp;以list形式返回数据的hql语句<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;getHql(String&nbsp;beanName,&nbsp;String[]&nbsp;columnNames){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;sb&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">select&nbsp;new&nbsp;list(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;columnString&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,len</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">columnNames.length;i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">len;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columnString.append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columnString.append(columnNames[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(columnString.substring(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)&nbsp;from&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(Character.isUpperCase(beanName.charAt(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(beanName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(upperFirstChar(beanName));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;sb.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;bean&nbsp;获取到的域对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;fieldName&nbsp;欲获取值的字段名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);">&nbsp;字段在当前bean封装下的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;Object&nbsp;getFieldByName(Object&nbsp;bean,&nbsp;String&nbsp;fieldName){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;m&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;bean.getClass().getMethod(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">upperFirstChar(fieldName),&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;m.invoke(bean,&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;upperFirstChar(String&nbsp;orig){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;Character.toUpperCase(orig.charAt(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">))&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;orig.substring(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
按照已经处理后，我们就可以既应用Hibernate对象访问的优点，又不损失字符串的灵活性，代码中应用了Hibernate的select特性及java的反射机制<br />
<img src ="http://www.blogjava.net/yangyi/aggbug/61726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2006-08-04 13:39 <a href="http://www.blogjava.net/yangyi/archive/2006/08/04/61726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache commons-Email中文问题的解决办法</title><link>http://www.blogjava.net/yangyi/archive/2006/08/01/61246.html</link><dc:creator>杨一</dc:creator><author>杨一</author><pubDate>Tue, 01 Aug 2006 12:14:00 GMT</pubDate><guid>http://www.blogjava.net/yangyi/archive/2006/08/01/61246.html</guid><wfw:comment>http://www.blogjava.net/yangyi/comments/61246.html</wfw:comment><comments>http://www.blogjava.net/yangyi/archive/2006/08/01/61246.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/yangyi/comments/commentRss/61246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangyi/services/trackbacks/61246.html</trackback:ping><description><![CDATA[Apache commons-email是对javamailAPI的一层封装，经封装后的发送邮件的代码变得极为简单，但这里有一个中文支持的小问题。<br />
commons-email主要的封装类是Email类，这是一个抽象类，该框架给出了SimpleEmail的默认实现，但该实现并不支持中文，即使调用Email的setCharset也不起作用。<br />
事实上，SimpleEmail调用了Email超类中的setContent方法来设置邮件内容（通过setMsg方法），而在设置内容时，又采用了默认的英文字符集，我们只要在代码中直接调用email类的setContent方法就可以支持中文了，但要注意setContent具备两个参数，第一个是内容对象，第二个则是内容类型，我们把第二个参数设置为：<br />
SimpleEmail.TEXT_PLAIN + "; charset=utf-8"， 即可。理由如下面源代码所示：<br />
&nbsp;&nbsp;&nbsp; public void setContent(Object aObject, String aContentType)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; ......<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // set the charset if the input was properly formed<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String strMarker = "; charset=";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int charsetPos = aContentType.toLowerCase().indexOf(strMarker);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (charsetPos != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // find the next space (after the marker)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; charsetPos += strMarker.length();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int intCharsetEnd =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aContentType.toLowerCase().indexOf(" ", charsetPos);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (intCharsetEnd != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.charset =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aContentType.substring(charsetPos, intCharsetEnd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.charset = aContentType.substring(charsetPos);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; 即有一个文本解析的过程。<br />
<img src ="http://www.blogjava.net/yangyi/aggbug/61246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangyi/" target="_blank">杨一</a> 2006-08-01 20:14 <a href="http://www.blogjava.net/yangyi/archive/2006/08/01/61246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>