﻿<?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-举止优雅的猪 —— Java 我的朋友</title><link>http://www.blogjava.net/anticlockwise/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 05:59:11 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 05:59:11 GMT</pubDate><ttl>60</ttl><item><title>非结构化流程图到结构化流程图的自动转换</title><link>http://www.blogjava.net/anticlockwise/archive/2006/06/03/50110.html</link><dc:creator>举止优雅的猪</dc:creator><author>举止优雅的猪</author><pubDate>Sat, 03 Jun 2006 04:11:00 GMT</pubDate><guid>http://www.blogjava.net/anticlockwise/archive/2006/06/03/50110.html</guid><wfw:comment>http://www.blogjava.net/anticlockwise/comments/50110.html</wfw:comment><comments>http://www.blogjava.net/anticlockwise/archive/2006/06/03/50110.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/anticlockwise/comments/commentRss/50110.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anticlockwise/services/trackbacks/50110.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 该文主要介绍了一个我和同学合作的项目，使将非结构化流程图转换成结构化流程图的程序。&nbsp;&nbsp;<a href='http://www.blogjava.net/anticlockwise/archive/2006/06/03/50110.html'>阅读全文</a><img src ="http://www.blogjava.net/anticlockwise/aggbug/50110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anticlockwise/" target="_blank">举止优雅的猪</a> 2006-06-03 12:11 <a href="http://www.blogjava.net/anticlockwise/archive/2006/06/03/50110.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Spring中利用Hibernate作为DAO的简化</title><link>http://www.blogjava.net/anticlockwise/archive/2006/03/09/34429.html</link><dc:creator>举止优雅的猪</dc:creator><author>举止优雅的猪</author><pubDate>Thu, 09 Mar 2006 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/anticlockwise/archive/2006/03/09/34429.html</guid><wfw:comment>http://www.blogjava.net/anticlockwise/comments/34429.html</wfw:comment><comments>http://www.blogjava.net/anticlockwise/archive/2006/03/09/34429.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/anticlockwise/comments/commentRss/34429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anticlockwise/services/trackbacks/34429.html</trackback:ping><description><![CDATA[<FONT color=#000000 size=2>在暑假里看了“Refactoring to Patterns”这本书，觉得很不错。里边讲到了很多在优化编码时可以用到的设计模式以及它们的用法。<BR>&nbsp;&nbsp;&nbsp; 我在编程时，一般都是用Spring作为中间层管理资源，而用Hibernate作为ORM。用过Spring的人都知道Spring对Hibernate的支持方法较多，我常用的是直接继承HibernateDaoSupport类。我们先来看一个类图：<BR><IMG alt="Dao Class Diagram" hspace=0 src="D:\JSoftware\eclipseworkspace\Jack's Blog\doc\dao.gif" align=baseline border=0><BR>在是我在应用中常用到的类结构。因为对于一个域模型来说，最基本的就是CRUD操作，所以将其放在Dao接口中，但是对于每个不同的域模型又有其特有的方法，则将其放在域模型对应的接口（SomeSpecificDao）中。<BR>&nbsp;&nbsp;&nbsp; 这样，对于最基本的CRUD操作就可以只需在BaseHibernateDao中实现，这一点利用了Template Method设计模式。对于create(), delete()和modify()三个方法都可以简单实现，即调用HibernateTemplate中相应的方法。对于findAll和findById，则可以借住Java的反射来实现。这里如果要利用反射且达到通用的目的，就需要将所有的域模型放在一个包中，并且有相同的命名规则，比如说如果域模型叫做User，那么相应的Dao应该以User开头，不过这也是常用的方法。下面给出一小段代码<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_0_61_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_61_Open_Text.style.display='none'; Codehighlighter1_0_61_Closed_Image.style.display='inline'; Codehighlighter1_0_61_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_0_61_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_61_Closed_Text.style.display='none'; Codehighlighter1_0_61_Open_Image.style.display='inline'; Codehighlighter1_0_61_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN id=Codehighlighter1_0_61_Open_Text><SPAN style="COLOR: #008000">/**</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;A convenience and generic method for retrieving all models from the database<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @throws DataAccessException<BR></SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_116_628_Open_Image onclick="this.style.display='none'; Codehighlighter1_116_628_Open_Text.style.display='none'; Codehighlighter1_116_628_Closed_Image.style.display='inline'; Codehighlighter1_116_628_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_116_628_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_116_628_Closed_Text.style.display='none'; Codehighlighter1_116_628_Open_Image.style.display='inline'; Codehighlighter1_116_628_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;List&nbsp;findAll()&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;DataAccessException&nbsp;</SPAN><SPAN id=Codehighlighter1_116_628_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"></SPAN><SPAN id=Codehighlighter1_116_628_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG 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;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;models&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ArrayList();<BR><IMG id=Codehighlighter1_212_458_Open_Image onclick="this.style.display='none'; Codehighlighter1_212_458_Open_Text.style.display='none'; Codehighlighter1_212_458_Closed_Image.style.display='inline'; Codehighlighter1_212_458_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_212_458_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_212_458_Closed_Text.style.display='none'; Codehighlighter1_212_458_Open_Image.style.display='inline'; Codehighlighter1_212_458_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_212_458_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"></SPAN><SPAN id=Codehighlighter1_212_458_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;models&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;getHibernateTemplate().loadAll(<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(getClass().getName().replaceAll(<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">HibernateDao</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">""</SPAN><SPAN style="COLOR: #000000">).replaceAll(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">dao.hibernate</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">model</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)));<BR><IMG id=Codehighlighter1_501_599_Open_Image onclick="this.style.display='none'; Codehighlighter1_501_599_Open_Text.style.display='none'; Codehighlighter1_501_599_Closed_Image.style.display='inline'; Codehighlighter1_501_599_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_501_599_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_501_599_Closed_Text.style.display='none'; Codehighlighter1_501_599_Open_Image.style.display='inline'; Codehighlighter1_501_599_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">&nbsp;(ClassNotFoundException&nbsp;exception)&nbsp;</SPAN><SPAN id=Codehighlighter1_501_599_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"></SPAN><SPAN id=Codehighlighter1_501_599_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG 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: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exception.printStackTrace();<BR><IMG 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 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;models;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN></DIV></FONT>&nbsp;&nbsp;&nbsp;<FONT size=2> 以上给出的是findAll的实现，findById也是一样。这样一来，就无需再在子类中重复编写CRUD算法的实现了。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 再有就是在编写子类Dao中特有的find方法，因为利用HibernateTemplate中的execute方法来实现，所以可以在BaseHibernateDao这个父类中编写一个protected的方法，以便子类Dao调用，这个方法中包含了调用HibernateTemplate中execute方法的代码：<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_0_68_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_68_Open_Text.style.display='none'; Codehighlighter1_0_68_Closed_Image.style.display='inline'; Codehighlighter1_0_68_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_0_68_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_68_Closed_Text.style.display='none'; Codehighlighter1_0_68_Open_Image.style.display='inline'; Codehighlighter1_0_68_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN id=Codehighlighter1_0_68_Open_Text><SPAN style="COLOR: #008000">/**</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Covenience&nbsp;method&nbsp;for&nbsp;retrieving&nbsp;objects by&nbsp;HQL<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">protected</SPAN><SPAN style="COLOR: #000000">&nbsp;Query&nbsp;find(</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;query</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_184_486_Open_Image onclick="this.style.display='none'; Codehighlighter1_184_486_Open_Text.style.display='none'; Codehighlighter1_184_486_Closed_Image.style.display='inline'; Codehighlighter1_184_486_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_184_486_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_486_Closed_Text.style.display='none'; Codehighlighter1_184_486_Open_Image.style.display='inline'; Codehighlighter1_184_486_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;DataAccessException&nbsp;</SPAN><SPAN id=Codehighlighter1_184_486_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"></SPAN><SPAN id=Codehighlighter1_184_486_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;aQuery&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Query)&nbsp;getHibernateTemplate().execute(<BR><IMG id=Codehighlighter1_289_455_Open_Image onclick="this.style.display='none'; Codehighlighter1_289_455_Open_Text.style.display='none'; Codehighlighter1_289_455_Closed_Image.style.display='inline'; Codehighlighter1_289_455_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_289_455_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_289_455_Closed_Text.style.display='none'; Codehighlighter1_289_455_Open_Image.style.display='inline'; Codehighlighter1_289_455_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;HibernateCallback()&nbsp;</SPAN><SPAN id=Codehighlighter1_289_455_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"></SPAN><SPAN id=Codehighlighter1_289_455_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_356_437_Open_Image onclick="this.style.display='none'; Codehighlighter1_356_437_Open_Text.style.display='none'; Codehighlighter1_356_437_Closed_Image.style.display='inline'; Codehighlighter1_356_437_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_356_437_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_356_437_Closed_Text.style.display='none'; Codehighlighter1_356_437_Open_Image.style.display='inline'; Codehighlighter1_356_437_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Object&nbsp;doInHibernate(Session&nbsp;session)&nbsp;</SPAN><SPAN id=Codehighlighter1_356_437_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"></SPAN><SPAN id=Codehighlighter1_356_437_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;session.createQuery(query);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">);<BR><IMG 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;aQuery;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN></DIV>&nbsp;&nbsp;&nbsp;&nbsp; 这样在子类Dao中就可以直接调用该find方法来实现，而不必每次都编写繁琐的execute方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 以上的方法我都做过测试，在实现和应用中没有问题。在效率上可能会比在子类中实现要差一点，因为find*方法中用到了Java的反射，对效率会一定的影响，这是缺点之一。如果有哪位有更好的办法，请在评论中写出，欢迎大家进行评判，谢谢……</FONT><img src ="http://www.blogjava.net/anticlockwise/aggbug/34429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anticlockwise/" target="_blank">举止优雅的猪</a> 2006-03-09 10:36 <a href="http://www.blogjava.net/anticlockwise/archive/2006/03/09/34429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的Java，现在和未来</title><link>http://www.blogjava.net/anticlockwise/archive/2006/03/05/33697.html</link><dc:creator>举止优雅的猪</dc:creator><author>举止优雅的猪</author><pubDate>Sun, 05 Mar 2006 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/anticlockwise/archive/2006/03/05/33697.html</guid><wfw:comment>http://www.blogjava.net/anticlockwise/comments/33697.html</wfw:comment><comments>http://www.blogjava.net/anticlockwise/archive/2006/03/05/33697.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/anticlockwise/comments/commentRss/33697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anticlockwise/services/trackbacks/33697.html</trackback:ping><description><![CDATA[<FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; 不知道自己为什么会如此痴迷于Java，或者更应该说是编程。现在已经大三了，有了两年多的Java经验，虽然不长，但学到的东西很多。这主要归功于对Java的热爱还有我的英语。嘿嘿，本人初中在英国年的，所以英语还算不错，看文档和书籍都是英文原版的，所以得到的信息更多。<BR><BR>&nbsp;&nbsp;&nbsp; 刚到大学时对编程一无所知。大学里教的语言是C++，刚接触时死活都弄不明白指针，每次编程时都回遇到这样和那样的指针问题，最常见的就是指针为空的情况，郁闷至极<IMG height=20 src="http://www.blogjava.net/Emoticons/hitwall.gif" width=25 border=0>。大概是大二上学期某个时候，突然在图书馆看到关于Java的书籍，看了几页就已经着迷了。接着的两年多里，我不断的学习Java，从最开始的环境变量的配置（大家必须承认，这是Java初学者的最大问题），到现在已经熟悉J2EE（Java EE），包括目前流行的Web框架和一些比较有用的开源工具，比如Ant、JUnit、WebUnit的等等。<BR><BR>&nbsp;&nbsp;&nbsp; 我买的第一本Java书是Deitel两人写的“Java How to Program”。我很庆幸买了这本书，这是本很好的初学书籍，所以现在如果有人问我刚开始学Java应该用什么书，我会推荐他这本，当然前提是要看得懂英文<IMG height=19 src="http://www.blogjava.net/Emoticons/regular_smile.gif" width=19 border=0>。之后又随之买了Java Advanced How to Program，虽然这本书是老了一点，但是也很有用，给我奠定了较好的J2EE基础。<BR><BR>&nbsp;&nbsp;&nbsp; 学习J2EE大概是在我接触Java一年多后开始的，那时我对开源还不懂，所以以为J2EE只有Servlet、EJB和JSP。之前我一直使用的是Ant和Editplus，现在有时也用，Ant确实是一门非常好的工具。做J2EE开发就不能只使用Ant了，我回抓狂的。IDE最开始我选择了Netbeans，刚开始觉得很好用，很方便，但随着我做的东西的规模变大，机器就开始卡了（Netbeans很消耗内存的）。之后在网上看到Eclipse很流行，便下下来用，就用到了现在。<BR><BR>&nbsp;&nbsp;&nbsp; 目前最遗憾的是我没有找到机会去做项目，只是自己做网站，学习而已。不过这样有个好处就是没人限制你，所以你可以尽情发挥，可以去探索的更加透彻，有时间去想。因为还在学习阶段，所以我一直没有把网站放到网上，我喜欢把我学过的技术和我自己想出来的模式都网自己的网站上加，以得到实践。目前我是这样的：用Spring作为中间层管理资源、DAO、Service等；与数据库打交道我当然就选择的Hibernate；前端我用了Struts和JSF，觉得他们各有利，Struts主要接收和处理表单，JSF用来作为View Helper生成页面；视图我还是用的JSP，但是用了Sitemesh进行装饰。开始用的Tiles，但后来发现Tiles配置起来很麻烦，而且限制很多；我还用了两个小的开源组件，Ajaxtags和Displaytag，知道这两个东西的人应该都知道我用它来干嘛的，就不说了；安全方面我目前使用的AcegiSecurity，挺好用的，不过如果要求安全性更高，我还需要手工编码；模版技术我现在使用Freemarker，因为使用Velocity我总是配置不成功（偷懒）。现在我主要在琢磨如何简化代码，现在的结构都是我自己摸索出来的，后来下了Appfuse，发现它的结构竟然和我几乎一样！lol<IMG height=19 src="http://www.blogjava.net/Emoticons/teeth_smile.gif" width=19 border=0><BR>&nbsp;&nbsp;&nbsp; 说说未来吧，我已经大三了，还有一年就要毕业，我准备出国。开始准备去英国，因为环境熟悉，还选了一所英国计算机排名第三的“帝国理工（Imperial College）”。去英国就要考雅思。后来大家还是推荐我去美国，毕竟美国在计算机方面是老大。我又看中了卡耐基·梅隆，这所学校就不用介绍了吧，李开富的母校~~~~ 去美国要考托福和GRE。这下我三门都要考，托福和雅思我不怕，托福我刚做了套2003年的卷子，只错了4道题，也许有一点运气吧，但应该还算不错了。最怕的就是GRE，听说有些人因为GRE出了家<IMG height=19 src="http://www.blogjava.net/Emoticons/confused_smile.gif" width=19 border=0>，恐怖啊。我也渐渐感觉到了GRE的难度。<BR>&nbsp;&nbsp;&nbsp; 我是前几天刚注册的，看到“哈哈的日子”写的东西，感觉很温馨。本人还没有女朋友，属于“圣”男（剩下来的男人）哈哈……能够找到一个能够理解程序员的另一半也是我的未来。我总是在说“我目前最快乐的事情就是能够为自己的梦想而奋斗，也许会跌倒，也许会报怨，但那些都是这条路上所固有的”。我快乐！</FONT><img src ="http://www.blogjava.net/anticlockwise/aggbug/33697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anticlockwise/" target="_blank">举止优雅的猪</a> 2006-03-05 14:07 <a href="http://www.blogjava.net/anticlockwise/archive/2006/03/05/33697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>