<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>颠覆软件 &#187; SSH</title>
	<atom:link href="http://www.foxlog.org/category/ssh/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.foxlog.org</link>
	<description>关注 : 架构与设计,敏捷,快速开发,项目管理,执行力,SSH,RoR</description>
	<lastBuildDate>Tue, 26 Jan 2010 15:15:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Spring中的service之间如何调用</title>
		<link>http://www.foxlog.org/2007/05/14/spring%e4%b8%ad%e7%9a%84service%e4%b9%8b%e9%97%b4%e5%a6%82%e4%bd%95%e8%b0%83%e7%94%a8/</link>
		<comments>http://www.foxlog.org/2007/05/14/spring%e4%b8%ad%e7%9a%84service%e4%b9%8b%e9%97%b4%e5%a6%82%e4%bd%95%e8%b0%83%e7%94%a8/#comments</comments>
		<pubDate>Mon, 14 May 2007 13:45:57 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/14</guid>
		<description><![CDATA[key word : spring,service 在基于struts+spring+hibernate的开发框架下，一般service都是直接通过在Struts的action中getBean(&#8220;yourServiceName&#8221;)来获取，那么如果在serviceA中想调用serviceB中的方法该如何呢？ 直接new 一个serviceB是不行的，因为里面可能还有依赖注入的dao等其他本来需要容器管理的资源，可以象在action中一样getBean()么？ 获得applicationContext就可以了： AppContext ： public class AppContext {     private static ApplicationContext applicationContext;     public static ApplicationContext getApplicationContext() {         return applicationContext;     }     public static void setApplicationContext(             ApplicationContext applicationContext) {         AppContext.applicationContext = applicationContext;     } } SpringService： public class SpringBeanService {     private static SpringBeanService instance;     private ApplicationContext applicationContext;     public static synchronized SpringBeanService getInstance() {         if (instance == null) {             instance = new SpringBeanService();         }         return instance;     }     public ApplicationContext getApplicationContext() {         return this.applicationContext;     }     public void setApplicationContext(ApplicationContext applicationContext) {         this.applicationContext = applicationContext;     }     public UserService getUserService(){         return (UserService)AppContext.getApplicationContext().getBean(&#8220;userService&#8220;);     }     } ApplicationContext的初始化： public class ConfigLoadListener implements ServletContextListener {     public void contextInitialized(ServletContextEvent contextEvent) {         try {             WebApplicationContext context =WebApplicationContextUtils.getRequiredWebApplicationContext(contextEvent.getServletContext());             AppContext.setApplicationContext(context);             //读配置             try {                 ServletContext context2=contextEvent.getServletContext();                 String path=context2.getInitParameter(&#8220;setting.properties&#8220;);                 InputStream in =context2.getResourceAsStream(path);                 Properties properties = new Properties();                 properties.load(in);                 GlobalConstant.setCmdbProperties(properties);                 in.close(); [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/12/20/workshop-studio%e9%9c%87%e6%92%bc%e4%bd%a0%e7%9a%84%e5%bc%80%e5%8f%91%e6%95%88%e7%8e%87-bea-world2006-%e5%bd%92%e6%9d%a5%e8%b0%88%e6%84%9f%e5%8f%97%ef%bc%8c%e5%8f%91%e7%89%a2%e9%aa%9a/' rel='bookmark' title='Permanent Link: workshop studio震撼你的开发效率 [bea world2006 归来,谈感受，发牢骚]'>workshop studio震撼你的开发效率 [bea world2006 归来,谈感受，发牢骚]</a></li><li><a href='http://www.foxlog.org/2006/08/08/zt%e5%8f%af%e7%bc%96%e7%a8%8b%e7%9a%84%e7%83%ad%e9%83%a8%e7%bd%b2%e9%97%ae%e9%a2%98/' rel='bookmark' title='Permanent Link: [zt]可编程的热部署问题'>[zt]可编程的热部署问题</a></li><li><a href='http://www.foxlog.org/2006/09/06/%e7%94%a8digester%e8%a7%a3%e6%9e%90xml%e5%88%b0bean/' rel='bookmark' title='Permanent Link: 用Digester解析xml到bean'>用Digester解析xml到bean</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>key word :  spring,service</p>
<p>在基于struts+spring+hibernate的开发框架下，一般service都是直接通过在Struts的action中getBean(&#8220;yourServiceName&#8221;)来获取，那么如果在serviceA中想调用serviceB中的方法该如何呢？</p>
<p>直接new  一个serviceB是不行的，因为里面可能还有依赖注入的dao等其他本来需要容器管理的资源，可以象在action中一样getBean()么？</p>
<p>获得applicationContext就可以了：</p>
<p>AppContext  ：</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_24_358_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_358_Open_Text.style.display='none'; Codehighlighter1_24_358_Closed_Image.style.display='inline'; Codehighlighter1_24_358_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_24_358_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_24_358_Closed_Text.style.display='none'; Codehighlighter1_24_358_Open_Image.style.display='inline'; Codehighlighter1_24_358_Open_Text.style.display='inline';" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> AppContext </span><span id="Codehighlighter1_24_358_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_24_358_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> ApplicationContext applicationContext;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_150_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_150_191_Open_Text.style.display='none'; Codehighlighter1_150_191_Closed_Image.style.display='inline'; Codehighlighter1_150_191_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_150_191_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_150_191_Closed_Text.style.display='none'; Codehighlighter1_150_191_Open_Image.style.display='inline'; Codehighlighter1_150_191_Open_Text.style.display='inline';" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> ApplicationContext getApplicationContext() </span><span id="Codehighlighter1_150_191_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_150_191_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> applicationContext;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setApplicationContext(<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_290_356_Open_Image" onclick="this.style.display='none'; Codehighlighter1_290_356_Open_Text.style.display='none'; Codehighlighter1_290_356_Closed_Image.style.display='inline'; Codehighlighter1_290_356_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_290_356_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_290_356_Closed_Text.style.display='none'; Codehighlighter1_290_356_Open_Image.style.display='inline'; Codehighlighter1_290_356_Open_Text.style.display='inline';" align="top" />            ApplicationContext applicationContext) </span><span id="Codehighlighter1_290_356_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_290_356_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />        AppContext.applicationContext </span><span style="color: #000000">=</span><span style="color: #000000"> applicationContext;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><br />
SpringService：</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_31_703_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_703_Open_Text.style.display='none'; Codehighlighter1_31_703_Closed_Image.style.display='inline'; Codehighlighter1_31_703_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_31_703_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_31_703_Closed_Text.style.display='none'; Codehighlighter1_31_703_Open_Image.style.display='inline'; Codehighlighter1_31_703_Open_Text.style.display='inline';" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> SpringBeanService </span><span id="Codehighlighter1_31_703_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_31_703_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> SpringBeanService instance;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">private</span><span style="color: #000000"> ApplicationContext applicationContext;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_196_317_Open_Image" onclick="this.style.display='none'; Codehighlighter1_196_317_Open_Text.style.display='none'; Codehighlighter1_196_317_Closed_Image.style.display='inline'; Codehighlighter1_196_317_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_196_317_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_196_317_Closed_Text.style.display='none'; Codehighlighter1_196_317_Open_Image.style.display='inline'; Codehighlighter1_196_317_Open_Text.style.display='inline';" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">synchronized</span><span style="color: #000000"> SpringBeanService getInstance() </span><span id="Codehighlighter1_196_317_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_196_317_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_228_286_Open_Image" onclick="this.style.display='none'; Codehighlighter1_228_286_Open_Text.style.display='none'; Codehighlighter1_228_286_Closed_Image.style.display='inline'; Codehighlighter1_228_286_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_228_286_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_228_286_Closed_Text.style.display='none'; Codehighlighter1_228_286_Open_Image.style.display='inline'; Codehighlighter1_228_286_Open_Text.style.display='inline';" align="top" />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (instance </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">) </span><span id="Codehighlighter1_228_286_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_228_286_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            instance </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> SpringBeanService();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> instance;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_374_420_Open_Image" onclick="this.style.display='none'; Codehighlighter1_374_420_Open_Text.style.display='none'; Codehighlighter1_374_420_Closed_Image.style.display='inline'; Codehighlighter1_374_420_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_374_420_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_374_420_Closed_Text.style.display='none'; Codehighlighter1_374_420_Open_Image.style.display='inline'; Codehighlighter1_374_420_Open_Text.style.display='inline';" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> ApplicationContext getApplicationContext() </span><span id="Codehighlighter1_374_420_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_374_420_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">this</span><span style="color: #000000">.applicationContext;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_500_560_Open_Image" onclick="this.style.display='none'; Codehighlighter1_500_560_Open_Text.style.display='none'; Codehighlighter1_500_560_Closed_Image.style.display='inline'; Codehighlighter1_500_560_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_500_560_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_500_560_Closed_Text.style.display='none'; Codehighlighter1_500_560_Open_Image.style.display='inline'; Codehighlighter1_500_560_Open_Text.style.display='inline';" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setApplicationContext(ApplicationContext applicationContext) </span><span id="Codehighlighter1_500_560_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_500_560_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.applicationContext </span><span style="color: #000000">=</span><span style="color: #000000"> applicationContext;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_602_692_Open_Image" onclick="this.style.display='none'; Codehighlighter1_602_692_Open_Text.style.display='none'; Codehighlighter1_602_692_Closed_Image.style.display='inline'; Codehighlighter1_602_692_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_602_692_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_602_692_Closed_Text.style.display='none'; Codehighlighter1_602_692_Open_Image.style.display='inline'; Codehighlighter1_602_692_Open_Text.style.display='inline';" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> UserService getUserService()</span><span id="Codehighlighter1_602_692_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_602_692_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> (UserService)AppContext.getApplicationContext().getBean(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">userService</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span></p>
<p>ApplicationContext的初始化：</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_66_1314_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_1314_Open_Text.style.display='none'; Codehighlighter1_66_1314_Closed_Image.style.display='inline'; Codehighlighter1_66_1314_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_66_1314_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_66_1314_Closed_Text.style.display='none'; Codehighlighter1_66_1314_Open_Image.style.display='inline'; Codehighlighter1_66_1314_Open_Text.style.display='inline';" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> ConfigLoadListener </span><span style="color: #0000ff">implements</span><span style="color: #000000"> ServletContextListener </span><span id="Codehighlighter1_66_1314_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_66_1314_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_138_1233_Open_Image" onclick="this.style.display='none'; Codehighlighter1_138_1233_Open_Text.style.display='none'; Codehighlighter1_138_1233_Closed_Image.style.display='inline'; Codehighlighter1_138_1233_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_138_1233_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_138_1233_Closed_Text.style.display='none'; Codehighlighter1_138_1233_Open_Image.style.display='inline'; Codehighlighter1_138_1233_Open_Text.style.display='inline';" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> contextInitialized(ServletContextEvent contextEvent) </span><span id="Codehighlighter1_138_1233_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_138_1233_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_154_1103_Open_Image" onclick="this.style.display='none'; Codehighlighter1_154_1103_Open_Text.style.display='none'; Codehighlighter1_154_1103_Closed_Image.style.display='inline'; Codehighlighter1_154_1103_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_154_1103_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_154_1103_Closed_Text.style.display='none'; Codehighlighter1_154_1103_Open_Image.style.display='inline'; Codehighlighter1_154_1103_Open_Text.style.display='inline';" align="top" />        </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span id="Codehighlighter1_154_1103_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_154_1103_Open_Text"><span style="color: #000000">{</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">            WebApplicationContext context </span><span style="color: #000000">=</span><span style="color: #000000">WebApplicationContextUtils.getRequiredWebApplicationContext(contextEvent.getServletContext());</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">            AppContext.setApplicationContext(context);<br />
</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="color: #008000">//</span><span style="color: #008000">读配置</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_654_1039_Open_Image" onclick="this.style.display='none'; Codehighlighter1_654_1039_Open_Text.style.display='none'; Codehighlighter1_654_1039_Closed_Image.style.display='inline'; Codehighlighter1_654_1039_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_654_1039_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_654_1039_Closed_Text.style.display='none'; Codehighlighter1_654_1039_Open_Image.style.display='inline'; Codehighlighter1_654_1039_Open_Text.style.display='inline';" align="top" /></span><span style="color: #000000">            </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span id="Codehighlighter1_654_1039_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_654_1039_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />                ServletContext context2</span><span style="color: #000000">=</span><span style="color: #000000">contextEvent.getServletContext();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />                String path</span><span style="color: #000000">=</span><span style="color: #000000">context2.getInitParameter(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">setting.properties</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />                InputStream in </span><span style="color: #000000">=</span><span style="color: #000000">context2.getResourceAsStream(path);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />                Properties properties </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Properties();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />                properties.load(in);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />                GlobalConstant.setCmdbProperties(properties);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />                in.close();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1063_1093_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1063_1093_Open_Text.style.display='none'; Codehighlighter1_1063_1093_Closed_Image.style.display='inline'; Codehighlighter1_1063_1093_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1063_1093_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1063_1093_Closed_Text.style.display='none'; Codehighlighter1_1063_1093_Open_Image.style.display='inline'; Codehighlighter1_1063_1093_Open_Text.style.display='inline';" align="top" />            }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (IOException e) </span><span id="Codehighlighter1_1063_1093_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1063_1093_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />                e.printStackTrace();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1134_1227_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1134_1227_Open_Text.style.display='none'; Codehighlighter1_1134_1227_Closed_Image.style.display='inline'; Codehighlighter1_1134_1227_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1134_1227_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1134_1227_Closed_Text.style.display='none'; Codehighlighter1_1134_1227_Open_Image.style.display='inline'; Codehighlighter1_1134_1227_Open_Text.style.display='inline';" align="top" />        }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (HibernateException e) </span><span id="Codehighlighter1_1134_1227_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1134_1227_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">系统无法初始化,异常退出</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(e);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1306_1312_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1306_1312_Open_Text.style.display='none'; Codehighlighter1_1306_1312_Closed_Image.style.display='inline'; Codehighlighter1_1306_1312_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1306_1312_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1306_1312_Closed_Text.style.display='none'; Codehighlighter1_1306_1312_Open_Image.style.display='inline'; Codehighlighter1_1306_1312_Open_Text.style.display='inline';" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> contextDestroyed(ServletContextEvent contextEvent) </span><span id="Codehighlighter1_1306_1312_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1306_1312_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><br />
感觉有点麻烦，有更简便的办法了么？</p>
<p><span style="color: red">update(2007-5-15):</span><br />
这篇文章大家可以参考一下，和本文有类似之处：<br />
<strong><a href="http://www.javatx.cn/clubPage.jsp?ccStyle=0&amp;tID=1881&amp;ccID=33" target="_blank"><strong> Struts调用Spring服务类的三种方法</strong></a><br />
</strong><br />
引用:</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">3</span><span style="color: #000000">.朋友帮忙型  朋友多了好办事，凡事都自己动手总有一天会活活累死，所有Action为自己需要的Service提供setter，并且在Spring中注入，好累啊。小学生都在减负了，我们也来为Action减减负吧&#8211;提供一个专门<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />查找Serivice的ServiceLocator，负责获取所有的Service，该类为每个Service提供专门的获得方法，如：  </span></p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/12/20/workshop-studio%e9%9c%87%e6%92%bc%e4%bd%a0%e7%9a%84%e5%bc%80%e5%8f%91%e6%95%88%e7%8e%87-bea-world2006-%e5%bd%92%e6%9d%a5%e8%b0%88%e6%84%9f%e5%8f%97%ef%bc%8c%e5%8f%91%e7%89%a2%e9%aa%9a/' rel='bookmark' title='Permanent Link: workshop studio震撼你的开发效率 [bea world2006 归来,谈感受，发牢骚]'>workshop studio震撼你的开发效率 [bea world2006 归来,谈感受，发牢骚]</a></li><li><a href='http://www.foxlog.org/2006/08/08/zt%e5%8f%af%e7%bc%96%e7%a8%8b%e7%9a%84%e7%83%ad%e9%83%a8%e7%bd%b2%e9%97%ae%e9%a2%98/' rel='bookmark' title='Permanent Link: [zt]可编程的热部署问题'>[zt]可编程的热部署问题</a></li><li><a href='http://www.foxlog.org/2006/09/06/%e7%94%a8digester%e8%a7%a3%e6%9e%90xml%e5%88%b0bean/' rel='bookmark' title='Permanent Link: 用Digester解析xml到bean'>用Digester解析xml到bean</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2007/05/14/spring%e4%b8%ad%e7%9a%84service%e4%b9%8b%e9%97%b4%e5%a6%82%e4%bd%95%e8%b0%83%e7%94%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>简单就是美 &#8212; 简化hibernate,简化dao</title>
		<link>http://www.foxlog.org/2007/05/13/%e7%ae%80%e5%8d%95%e5%b0%b1%e6%98%af%e7%be%8e-%e7%ae%80%e5%8c%96hibernate%e7%ae%80%e5%8c%96dao/</link>
		<comments>http://www.foxlog.org/2007/05/13/%e7%ae%80%e5%8d%95%e5%b0%b1%e6%98%af%e7%be%8e-%e7%ae%80%e5%8c%96hibernate%e7%ae%80%e5%8c%96dao/#comments</comments>
		<pubDate>Sun, 13 May 2007 13:48:22 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/16</guid>
		<description><![CDATA[key word : hibernate,dao 一。简化hibernate 首先hibernate是一个优秀的ORM工具(此话鉴定为废话:)) 其次，按照20/80的规律，有80%的问题不需要那20%学习起来比较麻烦的东西。 很多人在用hibernate的时候一定把关系作为精华来学习，比如一对多，多对一，以及多对多，认为只有熟练运用这个才是对hibernate的真正掌握。 说实话,这个想法从技术的角度讲有点道理，问题是很多人对这些始终是一头雾水，反正不要好看，我现在仍然是一头雾水，今天我终于给自己 解放了出来，我回头去看自己的项目，发现N多的时候100%的不要关系(在 hibernate中)也不会出人命，而且效果很好。 现在，每个mapping文件中没有了set,list,map,我相信一定有N多人说我这个不符合ＯＯ什么的，不过大家反过来想，在我的项目组中会有一个明显 的好处就是我将问题简化了， 大家都会做，比如Org与Ｕｓｅｒ的关系，１：Ｎ的关系，我不用考虑这个，直接手工去维护，dao.save(org);user.setOrgId(&#8220;11&#8243;);dao.save(user); 有一段时间我依次问各个项目组，你们的hibernate中用到了关联操作了么，回答清一色的“ＮＯ”，看来大家都在无意识的回避这个陷阱，呵呵， 很合吾意。 二.简化dao 可能是受到appfuse的影响，一个service就有一个dao,现在从实际的角度来看仍然觉得没有太大的必要，当然，如果你是类似测试驱动的想法 那么可能另当别论。现在我更喜欢一个通用的dao全部搞定，确实舒服。 service中的操作全部调用通用dao(getObjects(),saveObject(),updateObject(),removeObject()) public BeanValue saveItem(RequestMap rMap) {         BeanValue value = null;         try {             log.info(&#8220;=====begin to save alexItem object&#8220;);             value = new BeanValue();             AlexItem alexItem = (AlexItem) BeanUtil.convertObject(AlexItem.class, rMap.getMap());             dao.saveObject(alexItem);             log.info(&#8220;=====end to save alexItem object&#8220;);             value.addRequestMap(&#8220;admin&#8220;,alexItem);             value.setForword(&#8220;success&#8220;);         } catch (BaseException e) {            value.addErrorMap(&#8220;errorName&#8220;,e);            value.setForword(&#8220;error&#8220;);         }         return value;     } 愿意听听各位在项目中的做法。 Related posts:谈谈方法中的返回值类型和参数类型


Related posts:<ol><li><a href='http://www.foxlog.org/2007/05/13/%e8%b0%88%e8%b0%88%e6%96%b9%e6%b3%95%e4%b8%ad%e7%9a%84%e8%bf%94%e5%9b%9e%e5%80%bc%e7%b1%bb%e5%9e%8b%e5%92%8c%e5%8f%82%e6%95%b0%e7%b1%bb%e5%9e%8b/' rel='bookmark' title='Permanent Link: 谈谈方法中的返回值类型和参数类型'>谈谈方法中的返回值类型和参数类型</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="postText">key word :  hibernate,dao</p>
<p>一。简化hibernate<br />
首先hibernate是一个优秀的ORM工具(此话鉴定为废话:))<br />
其次，按照20/80的规律，有80%的问题不需要那20%学习起来比较麻烦的东西。</p>
<p>很多人在用hibernate的时候一定把关系作为精华来学习，比如一对多，多对一，以及多对多，认为只有熟练运用这个才是对hibernate的真正掌握。<br />
说实话,这个想法从技术的角度讲有点道理，问题是很多人对这些始终是一头雾水，反正不要好看，我现在仍然是一头雾水，今天我终于给自己<br />
解放了出来，我回头去看自己的项目，发现N多的时候100%的不要关系(在  hibernate中)也不会出人命，而且效果很好。</p>
<p>现在，每个mapping文件中没有了set,list,map,我相信一定有N多人说我这个不符合ＯＯ什么的，不过大家反过来想，在我的项目组中会有一个明显<br />
的好处就是我将问题简化了，<br />
大家都会做，比如Org与Ｕｓｅｒ的关系，１：Ｎ的关系，我不用考虑这个，直接手工去维护，dao.save(org);user.setOrgId(&#8220;11&#8243;);dao.save(user);</p>
<p>有一段时间我依次问各个项目组，你们的hibernate中用到了关联操作了么，回答清一色的“ＮＯ”，看来大家都在无意识的回避这个陷阱，呵呵，<br />
很合吾意。</p>
<p>二.简化dao</p>
<p>可能是受到appfuse的影响，一个service就有一个dao,现在从实际的角度来看仍然觉得没有太大的必要，当然，如果你是类似测试驱动的想法<br />
那么可能另当别论。现在我更喜欢一个通用的dao全部搞定，确实舒服。</p>
<p><span style="color: red">service中的操作全部调用通用dao(getObjects(),saveObject(),updateObject(),removeObject())</span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_43_629_Open_Image" onclick="this.style.display='none'; Codehighlighter1_43_629_Open_Text.style.display='none'; Codehighlighter1_43_629_Closed_Image.style.display='inline'; Codehighlighter1_43_629_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_43_629_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_43_629_Closed_Text.style.display='none'; Codehighlighter1_43_629_Open_Image.style.display='inline'; Codehighlighter1_43_629_Open_Text.style.display='inline';" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> BeanValue saveItem(RequestMap rMap) </span><span id="Codehighlighter1_43_629_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_43_629_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />        BeanValue value </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_89_482_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_482_Open_Text.style.display='none'; Codehighlighter1_89_482_Closed_Image.style.display='inline'; Codehighlighter1_89_482_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_89_482_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_89_482_Closed_Text.style.display='none'; Codehighlighter1_89_482_Open_Image.style.display='inline'; Codehighlighter1_89_482_Open_Text.style.display='inline';" align="top" />        </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span id="Codehighlighter1_89_482_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_89_482_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            log.info(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">=====begin to save alexItem object</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            value </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> BeanValue();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            AlexItem alexItem </span><span style="color: #000000">=</span><span style="color: #000000"> (AlexItem) BeanUtil.convertObject(AlexItem.</span><span style="color: #0000ff">class</span><span style="color: #000000">, rMap.getMap());<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            dao.saveObject(alexItem);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            log.info(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">=====end to save alexItem object</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            value.addRequestMap(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">admin</span><span style="color: #000000">&#8220;</span><span style="color: #000000">,alexItem);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />            value.setForword(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">success</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_508_601_Open_Image" onclick="this.style.display='none'; Codehighlighter1_508_601_Open_Text.style.display='none'; Codehighlighter1_508_601_Closed_Image.style.display='inline'; Codehighlighter1_508_601_Closed_Text.style.display='inline';" align="top" /><img src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_508_601_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_508_601_Closed_Text.style.display='none'; Codehighlighter1_508_601_Open_Image.style.display='inline'; Codehighlighter1_508_601_Open_Text.style.display='inline';" align="top" />        }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (BaseException e) </span><span id="Codehighlighter1_508_601_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_508_601_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />           value.addErrorMap(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">errorName</span><span style="color: #000000">&#8220;</span><span style="color: #000000">,e);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />           value.setForword(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">error</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> value;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><br />
愿意听听各位在项目中的做法。</p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2007/05/13/%e8%b0%88%e8%b0%88%e6%96%b9%e6%b3%95%e4%b8%ad%e7%9a%84%e8%bf%94%e5%9b%9e%e5%80%bc%e7%b1%bb%e5%9e%8b%e5%92%8c%e5%8f%82%e6%95%b0%e7%b1%bb%e5%9e%8b/' rel='bookmark' title='Permanent Link: 谈谈方法中的返回值类型和参数类型'>谈谈方法中的返回值类型和参数类型</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2007/05/13/%e7%ae%80%e5%8d%95%e5%b0%b1%e6%98%af%e7%be%8e-%e7%ae%80%e5%8c%96hibernate%e7%ae%80%e5%8c%96dao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[zt]SPRING数据访问对象(DAO)框架入门</title>
		<link>http://www.foxlog.org/2007/03/30/ztspring%e6%95%b0%e6%8d%ae%e8%ae%bf%e9%97%ae%e5%af%b9%e8%b1%a1dao%e6%a1%86%e6%9e%b6%e5%85%a5%e9%97%a8/</link>
		<comments>http://www.foxlog.org/2007/03/30/ztspring%e6%95%b0%e6%8d%ae%e8%ae%bf%e9%97%ae%e5%af%b9%e8%b1%a1dao%e6%a1%86%e6%9e%b6%e5%85%a5%e9%97%a8/#comments</comments>
		<pubDate>Fri, 30 Mar 2007 13:52:40 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/19</guid>
		<description><![CDATA[key words: spring，dao 转一篇写得很不错的文章，特别简单易懂,赞一个 come from here 摘要 J2EE应用程序中的业务组件通常使用JDBC API访问和更改关系数据库中的持久数据。这经常导致持久性代码与业务逻辑发生混合，这是一种不好的习惯。数据访问对象(DAO)设计模式通过把持久性逻辑分成若干数据访问类来解决这一问题。 本文是一篇关于DAO设计模式的入门文章，突出讲述了它的优点和不足之处。另外，本文还介绍了Spring 2.0 JDBC/DAO框架并示范了它如何妥善地解决传统DAO设计中的缺陷。 传统的DAO设计 数据访问对象(DAO)是一个集成层设计模式，如Core J2EE Design Pattern 图书所归纳。它将持久性存储访问和操作代码封装到一个单独的层中。本文的上下文中所提到的持久存储器是一个RDBMS。 这一模式在业务逻辑层和持久存储层之间引入了一个抽象层，如图1所示。业务对象通过数据访问对象来访问RDBMS（数据源）。抽象层改善了应用程序代码并引入了灵活性。理论上，当数据源改变时，比如更换数据库供应商或是数据库的类型时，仅需改变数据访问对象，从而把对业务对象的影响降到最低。 　　图1. 应用程序结构，包括DAO之前和之后的部分 讲解了DAO设计模式的基础知识，下面将编写一些代码。下面的例子来自于一个公司域模型。简而言之，这家公司有几位员工工作在不同的部门，如销售部、市场部以及人力资源部。为了简单起见，我们将集中讨论一个称作“雇员”的实体。 针对接口编程 DAO设计模式带来的灵活性首先要归功于一个对象设计的最佳实践：针对接口编程(P2I)。这一原则规定实体必须实现一个供调用程序而不是实体自身使用的接口。因此，可以轻松替换成不同的实现而对客户端代码只产生很小的影响。 我们将据此使用findBySalaryRange()行为定义Employee DAO接口，IEmployeeDAO。业务组件将通过这个接口与DAO交互： import java.util.Map; public interface IEmployeeDAO { //SQL String that will be executed public String FIND_BY_SAL_RNG = "SELECT EMP_NO, EMP_NAME, " + "SALARY FROM EMP WHERE SALARY &#62;= ? [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/12/20/workshop-studio%e9%9c%87%e6%92%bc%e4%bd%a0%e7%9a%84%e5%bc%80%e5%8f%91%e6%95%88%e7%8e%87-bea-world2006-%e5%bd%92%e6%9d%a5%e8%b0%88%e6%84%9f%e5%8f%97%ef%bc%8c%e5%8f%91%e7%89%a2%e9%aa%9a/' rel='bookmark' title='Permanent Link: workshop studio震撼你的开发效率 [bea world2006 归来,谈感受，发牢骚]'>workshop studio震撼你的开发效率 [bea world2006 归来,谈感受，发牢骚]</a></li><li><a href='http://www.foxlog.org/2006/08/08/zt%e5%8f%af%e7%bc%96%e7%a8%8b%e7%9a%84%e7%83%ad%e9%83%a8%e7%bd%b2%e9%97%ae%e9%a2%98/' rel='bookmark' title='Permanent Link: [zt]可编程的热部署问题'>[zt]可编程的热部署问题</a></li><li><a href='http://www.foxlog.org/2006/10/09/%e5%85%b3%e4%ba%8efacade%e7%9a%84%e5%ba%94%e7%94%a8/' rel='bookmark' title='Permanent Link: 关于Facade的应用'>关于Facade的应用</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>key words: spring，dao</p>
<p>转一篇写得很不错的文章，特别简单易懂,赞一个</p>
<p>come from <a href="http://dev2dev.bea.com.cn/techdoc/2007/03/java-spring-jdbc-dao.html">here</a></p>
<h3>摘要</h3>
<p>J2EE应用程序中的业务组件通常使用JDBC  API访问和更改关系数据库中的持久数据。这经常导致持久性代码与业务逻辑发生混合，这是一种不好的习惯。数据访问对象(DAO)设计模式通过把持久性逻辑分成若干数据访问类来解决这一问题。</p>
<p>本文是一篇关于DAO设计模式的入门文章，突出讲述了它的优点和不足之处。另外，本文还介绍了Spring 2.0  JDBC/DAO框架并示范了它如何妥善地解决传统DAO设计中的缺陷。</p>
<h3>传统的DAO设计</h3>
<p>数据访问对象(DAO)是一个集成层设计模式，如Core J2EE Design Pattern  图书所归纳。它将持久性存储访问和操作代码封装到一个单独的层中。本文的上下文中所提到的持久存储器是一个RDBMS。</p>
<p>这一模式在业务逻辑层和持久存储层之间引入了一个抽象层，如图1所示。业务对象通过数据访问对象来访问RDBMS（数据源）。抽象层改善了应用程序代码并引入了灵活性。理论上，当数据源改变时，比如更换数据库供应商或是数据库的类型时，仅需改变数据访问对象，从而把对业务对象的影响降到最低。</p>
<p align="center"><img src="http://dev2dev.bea.com.cn/images/image070308001.gif" alt="SPRING数据访问对象(DAO)框架入门图-1" /></p>
<p>　　<em>图1. 应用程序结构，包括DAO之前和之后的部分</em></p>
<p>讲解了DAO设计模式的基础知识，下面将编写一些代码。下面的例子来自于一个公司<a href="http://en.wikipedia.org/wiki/Domain_model" target="_blank">域模型</a>。简而言之，这家公司有几位员工工作在不同的部门，如销售部、市场部以及人力资源部。为了简单起见，我们将集中讨论一个称作“雇员”的实体。</p>
<h3>针对接口编程</h3>
<p>DAO设计模式带来的灵活性首先要归功于一个对象设计的最佳实践：<a href="http://www.artima.com/lejava/articles/designprinciples.html" target="_blank">针对接口编程(P2I)</a>。这一原则规定实体必须实现一个供调用程序而不是实体自身使用的接口。因此，可以轻松替换成不同的实现而对客户端代码只产生很小的影响。</p>
<p>我们将据此使用findBySalaryRange()行为定义Employee  DAO接口，IEmployeeDAO。业务组件将通过这个接口与DAO交互：</p>
<pre class="code">import java.util.Map;
public interface IEmployeeDAO {
  //SQL String that will be executed
  public String FIND_BY_SAL_RNG = "SELECT EMP_NO, EMP_NAME, "
  + "SALARY FROM EMP WHERE SALARY &gt;= ? AND SALARY &lt;= ?";

  //Returns the list of employees who fall into the given salary
  //range. The input parameter is the immutable map object
  //obtained from the HttpServletRequest. This is an early
  //refactoring based on "Introduce Parameter Object"

  public List findBySalaryRange(Map salaryMap);
}</pre>
<h3>提供DAO实现类</h3>
<p>接口已经定义，现在必须提供Employee DAO的具体实现，EmployeeDAOImpl：</p>
<pre class="code">import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import com.bea.dev2dev.to.EmployeeTO;

public class EmployeeDAOImpl implements IEmployeeDAO{

  public List findBySalaryRange(Map salaryMap)
  {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    List empList = new ArrayList();
    //Transfer Object for inter-tier data transfer
    EmployeeTO tempEmpTO = null;
    try{
    //DBUtil - helper classes that retrieve connection from pool
      conn = DBUtil.getConnection();
      pstmt = conn.prepareStatement(FIND_BY_SAL_RNG);
      pstmt.setDouble(1, Double.valueOf( (String)
          salaryMap.get("MIN_SALARY") );
      pstmt.setDouble(2, Double.valueOf( (String)
          salaryMap.get("MIN_SALARY") );
      rs = pstmt.executeQuery();
      int tmpEmpNo = 0;
      String tmpEmpName = "";
      double tmpSalary = 0.0D;
      while (rs.next()){
        tmpEmpNo = rs.getInt("EMP_NO");
        tmpEmpName = rs.getString("EMP_NAME");
        tmpSalary = rs.getDouble("SALARY");
        tempEmpTO = new EmployeeTO(tmpEmpNo,
              tmpEmpName,
              tmpSalary);
        empList.add(tempEmpTO);
      }//end while
    }//end try
    catch (SQLException sqle){
      throw new DBException(sqle);
    }//end catch
    finally{
      try{
        if (rs != null){
          rs.close();
        }
      }
      catch (SQLException sqle){
        throw new DBException(sqle);
      }
      try{
        if (pstmt != null){
          pstmt.close();
        }
      }
      catch (SQLException sqle){
        throw new DBException(sqle);
      }
      try{
        if (conn != null){
          conn.close();
        }
      }
      catch (SQLException sqle){
        throw new DBException(sqle);
      }
    }//end of finally block
    return empList;
  }//end method findBySalaryRange
}</pre>
<p>上面的清单说明了DAO方法的一些要点：</p>
<ul>
<li>它们封装了所有与JDBC API的交互。如果使用像Kodo或者Hibernate的O/R映射方案，则DAO类可以将这些产品的私有API打包。</li>
<li>它们将检索到的数据打包到一个与JDBC API无关的<a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/TransferObject.html" target="_blank">传输对象</a>中，然后将其返回给业务层作进一步处理。</li>
<li>它们实质上是无状态的。唯一的目的是访问并更改业务对象的持久数据。</li>
<li>在这个过程中，它们像SQLException一样捕获任何底层JDBC  API或数据库报告的错误（例如，数据库不可用、错误的SQL句法）。DAO对象再次使用一个与JDBC无关的自定义运行时异常类DBException，通知业务对象这些错误。</li>
<li>它们像Connection和PreparedStatement对象那样，将数据库资源释放回池中，并在使用完ResultSet游标之后，将其所占用的内存释放。</li>
</ul>
<p>因此，DAO层将底层的数据访问API抽象化，为业务层提供了一致的数据访问API。</p>
<h3>构建DAO工厂</h3>
<p>DAO工厂是典型的<a href="http://today.java.net/pub/a/today/2005/03/09/factory.html" target="_blank">工厂设计模式</a>实现，用于为业务对象创建和提供具体的DAO实现。业务对象使用DAO接口，而不用了解实现类的具体情况。DAO工厂带来的<em>依赖反转（dependency  inversion）</em>提供了极大的灵活性。只要DAO接口建立的约定未改变，那么很容易改变DAO实现（例如，从straight  JDBC实现到基于Kodo的O/R映射），同时又不影响客户的业务对象：</p>
<pre class="code">public class DAOFactory {
  private static DAOFactory daoFac;

  static{
    daoFac = new DAOFactory();
  }

  private DAOFactory(){}

  public DAOFactory getInstance(){
    return daoFac;
  }

  public IEmployeeDAO getEmployeeDAO(){
    return new EmployeeDAOImpl();
  }
}</pre>
<h3>与业务组件的协作</h3>
<p>现在该了解DAO怎样适应更复杂的情形。如前几节所述，DAO与业务层组件协作获取和更改持久业务数据。下面的清单展示了业务服务组件及其与DAO层的交互：</p>
<pre class="code">public class EmployeeBusinessServiceImpl implements
                                       IEmployeeBusinessService {

  public List getEmployeesWithinSalaryRange(Map salaryMap){

    IEmployeeDAO empDAO = DAOFactory.getInstance()
                                    .getEmployeeDAO();
    List empList = empDAO.findBySalaryRange(salaryMap);
    return empList;
  }
}</pre>
<p>交互过程十分简洁，完全不依赖于任何持久性接口（包括JDBC）。</p>
<h3>问题</h3>
<p>DAO设计模式也有缺点：</p>
<ul>
<li><strong>代码重复：</strong>从EmployeeDAOImpl清单可以清楚地看到，对于基于JDBC的传统数据库访问，代码重复（如上面的粗体字所示）是一个主要的问题。一遍又一遍地写着同样的代码，明显违背了基本的面向对象设计的代码重用原则。它将对项目成本、时间安排和工作产生明显的副面影响。</li>
<li><strong>耦合：</strong>DAO代码与JDBC接口和核心collection耦合得非常紧密。从每个DAO类的导入声明的数量可以明显地看出这种耦合。</li>
<li><strong>资源耗损：</strong>依据EmployeeDAOImpl类的设计，所有DAO方法必须释放对所获得的连接、声明、结果集等数据库资源的控制。这是危险的主张，因为一个编程新手可能很容易漏掉那些约束。结果造成资源耗尽，导致系统停机。</li>
<li><strong>错误处理：</strong>JDBC  驱动程序通过抛出SQLException来报告所有的错误情况。SQLException是检查到的异常，所以开发人员被迫去处理它，即使不可能从这类导致代码混乱的大多数异常中恢复过来。而且，从SQLException对象获得的错误代码和消息特定于数据库厂商，所以不可能写出可移植的DAO错误发送代码。</li>
<li><strong>脆弱的代码：</strong>在基于JDBC的DAO中，两个常用的任务是设置声明对象的绑定变量和使用结果集检索数据。如果SQL  where子句中的列数目或者位置更改了，就不得不对代码执行更改、测试、重新部署这个严格的循环过程。</li>
</ul>
<p>让我们看看如何能够减少这些问题并保留DAO的大多数优点。</p>
<h3>进入Spring DAO</h3>
<p>先识别代码中发生变化的部分，然后将这一部分代码分离出来或者封装起来，就能解决以上所列出的问题。Spring的设计者们已经完全做到了这一点，他们发布了一个超级简洁、健壮的、高度可伸缩的JDBC框架。固定部分（像检索连接、准备声明对象、执行查询和释放数据库资源）已经被一次性地写好，所以该框架的一部分内容有助于消除在传统的基于JDBC的DAO中出现的缺点。</p>
<p>图2显示的是Spring JDBC框架的主要组成部分。业务服务对象通过适当的接口继续使用DAO实现类。<a href="http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/jdbc/core/support/JdbcDaoSupport.html">JdbcDaoSupport</a>是JDBC数据访问对象的超类。它与特定的数据源相关联。Spring  <a href="http://www.martinfowler.com/articles/injection.html">Inversion of  Control</a> (IOC)容器或<a href="http://static.springframework.org/spring/docs/1.2.x/reference/beans.html#beans-basics">BeanFactory</a>负责获得相应数据源的配置详细信息，并将其与JdbcDaoSupport相关联。这个类最重要的功能就是使子类可以使用<a href="http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/jdbc/core/JdbcTemplate.html">JdbcTemplate</a>对象。</p>
<p align="center"><img src="http://dev2dev.bea.com.cn/images/image070308002.gif" alt="SPRING数据访问对象(DAO)框架入门图-2" /></p>
<p>　　<em>图2. Spring JDBC框架的主要组件</em></p>
<p>JdbcTemplate是Spring  JDBC框架中最重要的类。引用文献中的话：“它简化了JDBC的使用，有助于避免常见的错误。它执行核心JDBC工作流，保留应用代码以提供SQL和提取结果。”这个类通过执行下面的样板任务来帮助分离JDBC  DAO代码的静态部分：</p>
<ul>
<li>从数据源检索连接。</li>
<li>准备合适的声明对象。</li>
<li>执行SQL CRUD操作。</li>
<li>遍历结果集，然后将结果填入标准的collection对象。</li>
<li>处理SQLException异常并将其转换成更加特定于错误的异常层次结构。</li>
</ul>
<h3>利用Spring DAO重新编写</h3>
<p>既然已基本理解了Spring JDBC框架，现在要重新编写已有的代码。下面将逐步讲述如何解决前几节中提到的问题。</p>
<p><strong>第一步：修改DAO实现类</strong>-  现在从JdbcDaoSupport扩展出EmployeeDAOImpl以获得JdbcTemplate。</p>
<pre class="code">import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.core.JdbcTemplate;

public class EmployeeDAOImpl extends JdbcDaoSupport
                                     implements IEmployeeDAO{

  public List findBySalaryRange(Map salaryMap){

    Double dblParams [] = {Double.valueOf((String)
            salaryMap.get("MIN_SALARY"))
              ,Double.valueOf((String)
            salaryMap.get("MAX_SALARY"))
          };
    //The getJdbcTemplate method of JdbcDaoSupport returns an
    //instance of JdbcTemplate initialized with a datasource by the
    //Spring Bean Factory
    JdbcTemplate daoTmplt = this.getJdbcTemplate();
    return daoTmplt.queryForList(FIND_BY_SAL_RNG,dblParams);
  }
}</pre>
<p>在上面的清单中，传入参数映射中的值存储在双字节数组中，顺序与SQL字符串中的位置参数相同。queryForList()方法以包含Map（用列名作为键，一项对应一列）的List（一项对应一行）的方式返回查询结果。稍后我会说明如何返回传输对象列表。</p>
<p>从简化的代码可以明显看出，JdbcTemplate鼓励重用，这大大削减了DAO实现中的代码。JDBC和collection包之间的紧密耦合已经消除。由于JdbcTemplate方法可确保在使用数据库资源后将其按正确的次序释放，所以JDBC的资源耗损不再是一个问题。</p>
<p>另外，使用Spring  DAO时，不必处理异常。JdbcTemplate类会处理SQLException，并根据SQL错误代码或错误状态将其转换成特定于Spring异常的层次结构。例如，试图向主键列插入重复值时，将引发DataIntegrityViolationException。然而，如果无法从这一错误中恢复，就无需处理该异常。因为Spring  DAO的根异常类DataAccessException是运行时异常类，所以可以这样做。值得注意的是Spring  DAO异常独立于数据访问实现。如果实现是由O/R映射解决方案提供，就会抛出同样的异常。</p>
<p><strong>第二步：修改业务服务</strong>-  现在业务服务实现了一个新方法setDao()，Spring容器使用该方法传递DAO实现类的引用。该过程称为“设置方法注入（setter  injection）”，通过第三步中的配置文件告知Spring容器该过程。注意，不再需要使用DAOFactory，因为Spring  BeanFactory提供了这项功能：</p>
<pre class="code">public class EmployeeBusinessServiceImpl
                         implements IEmployeeBusinessService {

  IEmployeeDAO empDAO;

  public List getEmployeesWithinSalaryRange(Map salaryMap){

    List empList = empDAO.findBySalaryRange(salaryMap);
    return empList;
  }
  public void setDao(IEmployeeDAO empDAO){
    this.empDAO = empDAO;
  }
}</pre>
<p>请注意P2I的灵活性；即使极大地改动DAO实现，业务服务实现也只需少量更改。这是由于业务服务现在由Spring容器进行管理。</p>
<p><strong>第三步：配置Bean Factory</strong>- Spring bean  factory需要一个配置文件进行初始化并启动Spring框架。这个配置文件包含所有业务服务和带Spring  bean容器的DAO实现类。除此之外，它还包含用于初始化数据源和JdbcDaoSupport的信息：</p>
<pre class="code">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"&gt;

&lt;beans&gt;
  &lt;!-- Configure Datasource --&gt;
  &lt;bean id="FIREBIRD_DATASOURCE"
    class="org.springframework.jndi.JndiObjectFactoryBean"&gt;
    &lt;property name="jndiEnvironment"&gt;
      &lt;props&gt;
        &lt;prop key="java.naming.factory.initial"&gt;
          weblogic.jndi.WLInitialContextFactory
        &lt;/prop&gt;
        &lt;prop key="java.naming.provider.url"&gt;
          t3://localhost:7001
        &lt;/prop&gt;
      &lt;/props&gt;
    &lt;/property&gt;
    &lt;property name="jndiName"&gt;
      &lt;value&gt;
        jdbc/DBPool
      &lt;/value&gt;
    &lt;/property&gt;
  &lt;/bean&gt;

  &lt;!-- Configure DAO --&gt;
  &lt;bean id="EMP_DAO" class="com.bea.dev2dev.dao.EmployeeDAOImpl"&gt;
    &lt;property name="dataSource"&gt;
      &lt;ref bean="FIREBIRD_DATASOURCE"&gt;&lt;/ref&gt;
    &lt;/property&gt;
  &lt;/bean&gt;

  &lt;!-- Configure Business Service --&gt;
  &lt;bean id="EMP_BUSINESS"
  class="com.bea.dev2dev.sampleapp.business.EmployeeBusinessServiceImpl"&gt;
    &lt;property name="dao"&gt;
      &lt;ref bean="EMP_DAO"&gt;&lt;/ref&gt;
    &lt;/property&gt;
  &lt;/bean&gt;
&lt;/beans&gt;</pre>
<p>这个Spring bean容器通过调用JdbcDaoSupport提供的setDataSource()方法，设置包含DAO实现的数据源对象。</p>
<p><strong>第四步：测试</strong>-  最后是编写JUnit测试类。依照Spring的方式，需要在容器外部进行测试。然而，从第三步中的配置文件可以清楚地看到，我们一直在使用WebLogic  Server连接池。</p>
<pre class="code">package com.bea.dev2dev.business;

import java.util.*;
import junit.framework.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class EmployeeBusinessServiceImplTest extends TestCase {
    private IEmployeeBusinessService empBusiness;
    private Map salaryMap;
    List expResult;

    protected void setUp() throws Exception {
        initSpringFramework();
        initSalaryMap();
        initExpectedResult();
    }
    private void initExpectedResult() {
        expResult = new ArrayList();
        Map tempMap = new HashMap();
        tempMap.put("EMP_NO",new Integer(1));
        tempMap.put("EMP_NAME","John");
        tempMap.put("SALARY",new Double(46.11));
        expResult.add(tempMap);
    }
    private void initSalaryMap() {
        salaryMap = new HashMap();
        salaryMap.put("MIN_SALARY","1");
        salaryMap.put("MAX_SALARY","50");
    }
    private void initSpringFramework() {
      ApplicationContext ac = new FileSystemXmlApplicationContext
		("C:/SpringConfig/Spring-Config.xml");
      empBusiness =
             (IEmployeeBusinessService)ac.getBean("EMP_BUSINESS");
    }
    protected void tearDown() throws Exception {
    }

    /**
     * Test of getEmployeesWithinSalaryRange method,
     * of class
     * com.bea.dev2dev.business.EmployeeBusinessServiceImpl.
     */
    public void testGetEmployeesWithinSalaryRange() {
      List result = empBusiness.getEmployeesWithinSalaryRange
					(salaryMap);
      assertEquals(expResult, result);
    }
}</pre>
<h3>使用绑定变量</h3>
<p>到目前为止，我们搜索了工资介于最低值和最高值之间的雇员。假设在某种情形下，业务用户想要颠倒这一范围。DAO代码很脆弱，将不得不通过更改来满足要求的变化。这个问题在于使用了静态的位置绑定变量（用“?”表示）。Spring  DAO通过支持命名的绑定变量来挽救这个情况。修改的IEmployeeDAO清单引入了命名的绑定变量（用“:&lt;some name&gt;”表示）。注意查询中的变化，如下所示：</p>
<pre class="code">import java.util.Map;
public interface IEmployeeDAO {

  //SQL String that will be executed
  public String FIND_BY_SAL_RNG = "SELECT EMP_NO, EMP_NAME, "
  + "SALARY FROM EMP WHERE SALARY &gt;= :max AND SALARY &lt;= :min";

  //Returns the list of employees falling into the given salary range
  //The input parameter is the immutable map object obtained from
  //the HttpServletRequest. This is an early refactoring based on
  //- "Introduce Parameter Object"

  public List findBySalaryRange(Map salaryMap);
}</pre>
<p>多数JDBC驱动程序仅支持位置绑定变量。所以，Spring  DAO在运行时将这个查询转换成位置绑定、基于变量的查询，并且设置正确的绑定变量。现在，为了完成这些任务，需要使用<a href="http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/jdbc/core/namedparam/NamedParameterJdbcDaoSupport.html" target="_blank">NamedParameterJdbcDaoSupport</a>类和<a href="http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.html" target="_blank">NamedParameterJdbcTemplate</a>类，以代替JdbcDaoSupport和JdbcTemplate。下面就是修改后的DAO实现类：</p>
<pre class="code">import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

public class EmployeeDAOImpl extends NamedParameterJdbcDaoSupport
    implements IEmployeeDAO{

  public List findBySalaryRange(Map salaryMap){

    NamedParameterJdbcTemplate tmplt =
                             this.getNamedParameterJdbcTemplate();
    return tmplt.queryForList(IEmployeeDAO.FIND_BY_SAL_RNG
				,salaryMap);
  }
}</pre>
<p>NamedParameterJdbcDaoSupport的getNamedParameterJdbcTemplate()方法返回一个  NamedParameterJdbcTemplate实例，该实例由数据源句柄进行了预初始化。Spring  Beanfactory执行初始化任务，从配置文件获得所有的详细信息。在执行时，一旦将命名的参数替换成位置占位符，  NamedParameterJdbcTemplate就将操作委托给JdbcTemplate。可见，使用命名的参数使得DAO方法不受底层SQL声明任何更改的影响。</p>
<p>最后，如果数据库不支持自动类型转换，需要如下所示，对JUnit测试类中的initSalaryMap()方法稍做修改。</p>
<pre class="code">private void initSalaryMap() {
        salaryMap = new HashMap();
        salaryMap.put("MIN_SALARY",new Double(1));
        salaryMap.put("MAX_SALARY",new Double(50));
    }</pre>
<h3>Spring DAO回调函数</h3>
<p>至此，已经说明为了解决传统DAO设计中存在的问题，如何封装和概括JdbcTemplate类中JDBC代码的静态部分。现在了解一下有关变量的问题，如设置绑定变量、结果集遍历等。虽然Spring  DAO已经拥有这些问题的一般化解决方案，但在某些基于SQL的情况下，可能仍需要设置绑定变量。</p>
<p>在尝试向Spring DAO转换的过程中，介绍了由于业务服务及其客户机之间的约定遭到破坏而导致的隐蔽运行时错误。这个错误的来源可以追溯到原始的DAO。  dbcTemplate.queryForList()方法不再返回EmployeeTO实例列表。而是返回一个map表（每个map是结果集的一行）。</p>
<p>如您目前所知，JdbcTemplate基于模板方法设计模式，该模式利用JDBC  API定义SQL执行工作流。必须改变这个工作流以修复被破坏的约定。第一个选择是在子类中更改或扩展工作流。您可以遍历  JdbcTemplate.queryForList()返回的列表，用EmployeeTO实例替换map对象。然而，这会导致我们一直竭力避免的静态代码与动态代码的混合。第二个选择是将代码插入JdbcTemplate提供的各种工作流修改钩子（hook）。明智的做法是在一个不同的类中封装传输对象填充代码，然后通过钩子链接它。填充逻辑的任何修改将不会改变DAO。</p>
<p>编写一个类，使其实现在Spring框架特定的接口中定义的方法，就可以实现第二个选择。这些方法称为<em>回调函数</em>，通过JdbcTemplate向框架注册。当发生相应的事件（例如，遍历结果集并填充独立于框架的传输对象）时，框架将调用这些方法。</p>
<h3>第一步：传输对象</h3>
<p>下面是您可能感兴趣的传输对象。注意，以下所示的传输对象是固定的：</p>
<pre class="code">package com.bea.dev2dev.to;

public final class EmployeeTO implements Serializable{

      private int empNo;
      private String empName;
      private double salary;

      /** Creates a new instance of EmployeeTO */
      public EmployeeTO(int empNo,String empName,double salary) {
          this.empNo = empNo;
          this.empName = empName;
          this.salary = salary;
      }
      public String getEmpName() {
          return this.empName;
      }
      public int getEmpNo() {
          return this.empNo;
      }
      public double getSalary() {
          return this.salary;
      }
      public boolean equals(EmployeeTO empTO){
          return empTO.empNo == this.empNo;
      }
}</pre>
<h3>第二步：实现回调接口</h3>
<p>实现RowMapper接口，填充来自结果集的传输对象。下面是一个例子：</p>
<pre class="code">package com.bea.dev2dev.dao.mapper;

import com.bea.dev2dev.to.EmployeeTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;

public class EmployeeTOMapper implements RowMapper{

  public Object mapRow(ResultSet rs, int rowNum)
                                         throws SQLException{
      int empNo = rs.getInt(1);
      String empName = rs.getString(2);
      double salary = rs.getDouble(3);
      EmployeeTO empTo = new EmployeeTO(empNo,empName,salary);
      return empTo;
   }
}</pre>
<p>注意实现类不应该对提供的ResultSet对象调用next()方法。这由框架负责，该类只要从结果集的当前行提取值就行。回调实现抛出的任何SQLException也由Spring框架处理。</p>
<h3>第三步：插入回调接口</h3>
<p>执行SQL查询时，JdbcTemplate利用默认的RowMapper实现产生map列表。现在需要注册自定义回调实现来修改  JdbcTemplate的这一行为。注意现在用的是NamedParameterJdbcTemplate的query()方法，而不是  queryForList()方法：</p>
<pre class="code">public class EmployeeDAOImpl extends NamedParameterJdbcDaoSupport
    implements IEmployeeDAO{

  public List findBySalaryRange(Map salaryMap){

    NamedParameterJdbcTemplate daoTmplt =
          getNamedParameterJdbcTemplate();
    return daoTmplt.query(IEmployeeDAO.FIND_BY_SAL_RNG, salaryMap,
          new EmployeeTOMapper());
  }
}</pre>
<p>Spring  DAO框架对执行查询后返回的结果进行遍历。它在遍历的每一步调用EmployeeTOMapper类实现的mapRow()方法，使用EmployeeTO传输对象填充最终结果的每一行。</p>
<h3>第四步：修改后的JUnit类</h3>
<p>现在要根据返回的传输对象测试这些结果。为此要对测试方法进行修改。</p>
<pre class="code">public class EmployeeBusinessServiceImplTest extends TestCase {

  private IEmployeeBusinessService empBusiness;
  private Map salaryMap;
      List expResult;

      // all methods not shown in the listing remain the
      // same as in the previous example
      private void initExpectedResult() {
          expResult = new ArrayList();
          EmployeeTO to = new EmployeeTO(2,"John",46.11);
          expResult.add(to);
      }

      /**
       * Test of getEmployeesWithinSalaryRange method, of
       * class com.bea.dev2dev.business.
       * EmployeeBusinessServiceImpl
       */
      public void testGetEmployeesWithinSalaryRange() {
          List result = empBusiness.
		getEmployeesWithinSalaryRange(salaryMap);
          assertEquals(expResult, result);
      }

      public void assertEquals(List expResult, List result){
          EmployeeTO expTO = (EmployeeTO) expResult.get(0);
          EmployeeTO actualTO = (EmployeeTO) result.get(0);
          if(!expTO.equals(actualTO)){
               throw new RuntimeException("** Test Failed **");
          }
      }
}</pre>
<h3>优势</h3>
<p>Spring  JDBC框架的优点很清楚。我们获益很多，并将DAO方法简化到只有几行代码。代码不再脆弱，这要感谢该框架对命名的参数绑定变量的“开箱即用”支持，以及在映射程序中将传输对象填充逻辑分离。</p>
<p>Spring JDBC的优点应该促使您向这一框架移植现有的代码。希望本文在这一方面能有所帮助。它会帮助您获得一些<a href="http://www.refactoring.com/">重构</a>工具和知识。例如，如果您没有采用P2I <a href="http://www.refactoring.com/catalog/extractInterface.html">Extract  Interface</a>，那么可以使用重构，从现有的DAO实现类创建接口。除此之外，查看本文的参考资料可以得到更多指导。</p>
<h3>下载</h3>
<p>可以<a href="http://dev2dev.bea.com/2006/10/spring-jdbc-dao.zip" target="_blank">下载</a>本文用到的源代码。</p>
<h3>结束语</h3>
<p>在此篇文章中，我讲述了数据访问对象（DAO）设计模式的基础知识，并从正反两方面进行了讨论。引入Spring  DAO或JDBC框架来克服传统DAO的不足。然后，根据Spring框架提供的“开箱即用”命名参数支持对脆弱的DAO代码进行了改进。最后，回调功能展示了如何在指定点修改框架行为。</p>
<h3>参考资料</h3>
<ul>
<li><a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html" target="_blank">Core J2EE Patterns: Data Access Object</a>（Sun开发人员网络）-  提供了DAO设计模式的详细描述</li>
<li><a href="http://static.springframework.org/spring/docs/2.0.x/reference/jdbc.html" target="_blank">Spring DAO Framework</a> &#8211; 官方Spring DAO文档</li>
<li><a href="http://dev2dev.bea.com/pub/a/2005/09/spring_integration_weblogic_server.html" target="_blank">Spring Integration with WebLogic Server</a> (Dev2Dev) &#8211;  Spring与WebLogic Server集成一览</li>
<li><a href="http://edocs.bea.com/wls/docs81/ConsoleHelp/jdbc_datasources.html" target="_blank">WebLogic 8.1 Datasource Configuration</a>（文档） &#8211;  逐步指导您使用Administration控制台配置数据源</li>
<li><a href="http://www.refactoring.com/" target="_blank">Refactoring</a> &#8211;  重构基础知识讲解和Martin Fowler撰写的<em>Refactoring: Improving the Design of the Existing  Code</em>一书中所有重构详细资料的目录；该站点还包含重构使用的工具列表</li>
</ul>
<p><!--文章其他信息--></p>
<p class="dot001"><img src="http://dev2dev.bea.com.cn/images/_.gif" height="1" width="100%" /></p>
<table border="0" cellpadding="3" cellspacing="0" width="100%">
<tr valign="bottom">
<td colspan="2" height="20"><span class="h2b">作者简介</span></td>
</tr>
<tr>
<td align="center" valign="top" width="0">&nbsp;</td>
<td><a href="http://dev2dev.bea.com/pub/au/3416" target="_blank">Dhrubojyoti  Kayal</a> 是Capgemini Consulting的高级顾问。在利用企业Java技术开发和设计应用程序和产品方面，拥有5年以上的经验。</td>
</tr>
</table>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/12/20/workshop-studio%e9%9c%87%e6%92%bc%e4%bd%a0%e7%9a%84%e5%bc%80%e5%8f%91%e6%95%88%e7%8e%87-bea-world2006-%e5%bd%92%e6%9d%a5%e8%b0%88%e6%84%9f%e5%8f%97%ef%bc%8c%e5%8f%91%e7%89%a2%e9%aa%9a/' rel='bookmark' title='Permanent Link: workshop studio震撼你的开发效率 [bea world2006 归来,谈感受，发牢骚]'>workshop studio震撼你的开发效率 [bea world2006 归来,谈感受，发牢骚]</a></li><li><a href='http://www.foxlog.org/2006/08/08/zt%e5%8f%af%e7%bc%96%e7%a8%8b%e7%9a%84%e7%83%ad%e9%83%a8%e7%bd%b2%e9%97%ae%e9%a2%98/' rel='bookmark' title='Permanent Link: [zt]可编程的热部署问题'>[zt]可编程的热部署问题</a></li><li><a href='http://www.foxlog.org/2006/10/09/%e5%85%b3%e4%ba%8efacade%e7%9a%84%e5%ba%94%e7%94%a8/' rel='bookmark' title='Permanent Link: 关于Facade的应用'>关于Facade的应用</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2007/03/30/ztspring%e6%95%b0%e6%8d%ae%e8%ae%bf%e9%97%ae%e5%af%b9%e8%b1%a1dao%e6%a1%86%e6%9e%b6%e5%85%a5%e9%97%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[zt] Hibernate+Spring 对DAO的处理实列!</title>
		<link>http://www.foxlog.org/2007/01/25/zt-hibernatespring-%e5%af%b9dao%e7%9a%84%e5%a4%84%e7%90%86%e5%ae%9e%e5%88%97/</link>
		<comments>http://www.foxlog.org/2007/01/25/zt-hibernatespring-%e5%af%b9dao%e7%9a%84%e5%a4%84%e7%90%86%e5%ae%9e%e5%88%97/#comments</comments>
		<pubDate>Thu, 25 Jan 2007 14:12:21 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/31</guid>
		<description><![CDATA[key words : hibernate spring dao come from : http://lpacec.javaeye.com/blog/46220    1.  package infoweb.dao;    2.    3. import java.util.List;    4. import java.util.Iterator;    5.    6. import infoweb.pojo.Info;    7.    8. import net.sf.hibernate.HibernateException;    9. import net.sf.hibernate.Query;   10. import net.sf.hibernate.Session;   11.   12. import org.springframework.orm.hibernate.HibernateCallback;   13. import org.springframework.orm.hibernate.support.HibernateDaoSupport;   14.   15. /** *//**   16.  *       Title:   17.  *       Description:   18.  *       Copyright: Copyright (c) 2004   19.  *       Company:   20.  * @author 段洪杰   21.  * @version 1.0   22.  */   23.   24. public class InfoDAOImpl extends HibernateDaoSupport implements IInfoDAO {   25.   /** *//**   26.    * 构造函数   27.    */   28.   public InfoDAOImpl() {   29.     super();   30.   }   31.   32.   /** *//**   33.    * 增加记录   34.    * @param info Info   35.    */   36.   public void setInfo(Info info) throws Exception {   37.     getHibernateTemplate().save(info);   38.   }   39.   40.   /** *//**   41.    * 通过ID取得记录 [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/03/30/%e7%ae%80%e5%8d%95%e7%9a%84%e9%94%99%e8%af%af/' rel='bookmark' title='Permanent Link: 简单的错误'>简单的错误</a></li><li><a href='http://www.foxlog.org/2006/09/28/zt%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e4%b9%8bvisitor-%e8%ae%bf%e9%97%ae%e8%80%85%e6%a8%a1%e5%bc%8f/' rel='bookmark' title='Permanent Link: [zt]设计模式之Visitor 访问者模式'>[zt]设计模式之Visitor 访问者模式</a></li><li><a href='http://www.foxlog.org/2006/10/09/%e5%85%b3%e4%ba%8efacade%e7%9a%84%e5%ba%94%e7%94%a8/' rel='bookmark' title='Permanent Link: 关于Facade的应用'>关于Facade的应用</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>key words : hibernate spring dao</p>
<p>come from : <a href="http://lpacec.javaeye.com/blog/46220">http://lpacec.javaeye.com/blog/46220</a></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><img src="/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">   </span><span style="color: #000000">1</span><span style="color: #000000">.  </span><span style="color: #0000ff">package</span><span style="color: #000000"> infoweb.dao;<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />   </span><span style="color: #000000">2</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />   </span><span style="color: #000000">3</span><span style="color: #000000">. </span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.List;<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />   </span><span style="color: #000000">4</span><span style="color: #000000">. </span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Iterator;<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />   </span><span style="color: #000000">5</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />   </span><span style="color: #000000">6</span><span style="color: #000000">. </span><span style="color: #0000ff">import</span><span style="color: #000000"> infoweb.pojo.Info;<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />   </span><span style="color: #000000">7</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />   </span><span style="color: #000000">8</span><span style="color: #000000">. </span><span style="color: #0000ff">import</span><span style="color: #000000"> net.sf.hibernate.HibernateException;<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />   </span><span style="color: #000000">9</span><span style="color: #000000">. </span><span style="color: #0000ff">import</span><span style="color: #000000"> net.sf.hibernate.Query;<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">10</span><span style="color: #000000">. </span><span style="color: #0000ff">import</span><span style="color: #000000"> net.sf.hibernate.Session;<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">11</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">12</span><span style="color: #000000">. </span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.orm.hibernate.HibernateCallback;<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">13</span><span style="color: #000000">. </span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.orm.hibernate.support.HibernateDaoSupport;<br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">14</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_510_754_Open_Image" onclick="this.style.display='none'; Codehighlighter1_510_754_Open_Text.style.display='none'; Codehighlighter1_510_754_Closed_Image.style.display='inline'; Codehighlighter1_510_754_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_510_754_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_510_754_Closed_Text.style.display='none'; Codehighlighter1_510_754_Open_Image.style.display='inline'; Codehighlighter1_510_754_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">15</span><span style="color: #000000">. </span><span id="Codehighlighter1_510_754_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_510_754_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  16.  *<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />      Title:<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  17.  *<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />      Description:<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  18.  *<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />      Copyright: Copyright (c) 2004<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  19.  *<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />      Company:<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  20.  * </span><span style="color: #808080">@author</span><span style="color: #008000"> 段洪杰<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  21.  * </span><span style="color: #808080">@version</span><span style="color: #008000"> 1.0<br />
<img src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />  22.  </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/None.gif" align="top" />  </span><span style="color: #000000">23</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_853_16079_Open_Image" onclick="this.style.display='none'; Codehighlighter1_853_16079_Open_Text.style.display='none'; Codehighlighter1_853_16079_Closed_Image.style.display='inline'; Codehighlighter1_853_16079_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_853_16079_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_853_16079_Closed_Text.style.display='none'; Codehighlighter1_853_16079_Open_Image.style.display='inline'; Codehighlighter1_853_16079_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">24</span><span style="color: #000000">. </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> InfoDAOImpl </span><span style="color: #0000ff">extends</span><span style="color: #000000"> HibernateDaoSupport </span><span style="color: #0000ff">implements</span><span style="color: #000000"> IInfoDAO </span><span id="Codehighlighter1_853_16079_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_853_16079_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_869_909_Open_Image" onclick="this.style.display='none'; Codehighlighter1_869_909_Open_Text.style.display='none'; Codehighlighter1_869_909_Closed_Image.style.display='inline'; Codehighlighter1_869_909_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_869_909_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_869_909_Closed_Text.style.display='none'; Codehighlighter1_869_909_Open_Image.style.display='inline'; Codehighlighter1_869_909_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">25</span><span style="color: #000000">.   </span><span id="Codehighlighter1_869_909_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_869_909_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  26.    * 构造函数<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  27.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_946_987_Open_Image" onclick="this.style.display='none'; Codehighlighter1_946_987_Open_Text.style.display='none'; Codehighlighter1_946_987_Closed_Image.style.display='inline'; Codehighlighter1_946_987_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_946_987_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_946_987_Closed_Text.style.display='none'; Codehighlighter1_946_987_Open_Image.style.display='inline'; Codehighlighter1_946_987_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">28</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> InfoDAOImpl() </span><span id="Codehighlighter1_946_987_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_946_987_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">29</span><span style="color: #000000">.     </span><span style="color: #0000ff">super</span><span style="color: #000000">();<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  </span><span style="color: #000000">30</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">31</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1015_1088_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1015_1088_Open_Text.style.display='none'; Codehighlighter1_1015_1088_Closed_Image.style.display='inline'; Codehighlighter1_1015_1088_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1015_1088_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1015_1088_Closed_Text.style.display='none'; Codehighlighter1_1015_1088_Open_Image.style.display='inline'; Codehighlighter1_1015_1088_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">32</span><span style="color: #000000">.   </span><span id="Codehighlighter1_1015_1088_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_1015_1088_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  33.    * 增加记录<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  34.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> info Info<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  35.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1152_1219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1152_1219_Open_Text.style.display='none'; Codehighlighter1_1152_1219_Closed_Image.style.display='inline'; Codehighlighter1_1152_1219_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1152_1219_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1152_1219_Closed_Text.style.display='none'; Codehighlighter1_1152_1219_Open_Image.style.display='inline'; Codehighlighter1_1152_1219_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">36</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setInfo(Info info) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_1152_1219_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_1152_1219_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">37</span><span style="color: #000000">.     getHibernateTemplate().save(info);<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  </span><span style="color: #000000">38</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">39</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1247_1353_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1247_1353_Open_Text.style.display='none'; Codehighlighter1_1247_1353_Closed_Image.style.display='inline'; Codehighlighter1_1247_1353_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1247_1353_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1247_1353_Closed_Text.style.display='none'; Codehighlighter1_1247_1353_Open_Image.style.display='inline'; Codehighlighter1_1247_1353_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">40</span><span style="color: #000000">.   </span><span id="Codehighlighter1_1247_1353_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_1247_1353_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  41.    * 通过ID取得记录<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  42.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> id String<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  43.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Info<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  44.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1421_1546_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1421_1546_Open_Text.style.display='none'; Codehighlighter1_1421_1546_Closed_Image.style.display='inline'; Codehighlighter1_1421_1546_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1421_1546_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1421_1546_Closed_Text.style.display='none'; Codehighlighter1_1421_1546_Open_Image.style.display='inline'; Codehighlighter1_1421_1546_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">45</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Info getInfoById(String id) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_1421_1546_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_1421_1546_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">46</span><span style="color: #000000">.     Info info </span><span style="color: #000000">=</span><span style="color: #000000"> (Info) getHibernateTemplate().load(Info.</span><span style="color: #0000ff">class</span><span style="color: #000000">, id);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">47</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> info;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  </span><span style="color: #000000">48</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">49</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1574_1647_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1574_1647_Open_Text.style.display='none'; Codehighlighter1_1574_1647_Closed_Image.style.display='inline'; Codehighlighter1_1574_1647_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1574_1647_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1574_1647_Closed_Text.style.display='none'; Codehighlighter1_1574_1647_Open_Image.style.display='inline'; Codehighlighter1_1574_1647_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">50</span><span style="color: #000000">.   </span><span id="Codehighlighter1_1574_1647_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_1574_1647_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  51.    * 修改记录<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  52.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> Info info<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  53.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1714_1783_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1714_1783_Open_Text.style.display='none'; Codehighlighter1_1714_1783_Closed_Image.style.display='inline'; Codehighlighter1_1714_1783_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1714_1783_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1714_1783_Closed_Text.style.display='none'; Codehighlighter1_1714_1783_Open_Image.style.display='inline'; Codehighlighter1_1714_1783_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">54</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> modifyInfo(Info info) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_1714_1783_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_1714_1783_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">55</span><span style="color: #000000">.     getHibernateTemplate().update(info);<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  </span><span style="color: #000000">56</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">57</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1811_1884_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1811_1884_Open_Text.style.display='none'; Codehighlighter1_1811_1884_Closed_Image.style.display='inline'; Codehighlighter1_1811_1884_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1811_1884_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1811_1884_Closed_Text.style.display='none'; Codehighlighter1_1811_1884_Open_Image.style.display='inline'; Codehighlighter1_1811_1884_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">58</span><span style="color: #000000">.   </span><span id="Codehighlighter1_1811_1884_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_1811_1884_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  59.    * 删除记录<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  60.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> Info info<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  61.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_1951_2020_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1951_2020_Open_Text.style.display='none'; Codehighlighter1_1951_2020_Closed_Image.style.display='inline'; Codehighlighter1_1951_2020_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_1951_2020_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1951_2020_Closed_Text.style.display='none'; Codehighlighter1_1951_2020_Open_Image.style.display='inline'; Codehighlighter1_1951_2020_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">62</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> removeInfo(Info info) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_1951_2020_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_1951_2020_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">63</span><span style="color: #000000">.     getHibernateTemplate().delete(info);<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  </span><span style="color: #000000">64</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">65</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">66</span><span style="color: #000000">.   </span><span style="color: #008000">////////////////////////////////////////////////////////</span><span style="color: #008000">      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">  </span><span style="color: #000000">67</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">  </span><span style="color: #000000">68</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/以下部份不带审核功能                              </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">  </span><span style="color: #000000">69</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">  </span><span style="color: #000000">70</span><span style="color: #000000">.   </span><span style="color: #008000">////////////////////////////////////////////////////////</span><span style="color: #008000">      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">  </span><span style="color: #000000">71</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_2407_2476_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2407_2476_Open_Text.style.display='none'; Codehighlighter1_2407_2476_Closed_Image.style.display='inline'; Codehighlighter1_2407_2476_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_2407_2476_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2407_2476_Closed_Text.style.display='none'; Codehighlighter1_2407_2476_Open_Image.style.display='inline'; Codehighlighter1_2407_2476_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">72</span><span style="color: #000000">.   </span><span id="Codehighlighter1_2407_2476_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_2407_2476_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  73.    * 取记录总数<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  74.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> int<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  75.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_2536_2803_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2536_2803_Open_Text.style.display='none'; Codehighlighter1_2536_2803_Closed_Image.style.display='inline'; Codehighlighter1_2536_2803_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_2536_2803_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2536_2803_Closed_Text.style.display='none'; Codehighlighter1_2536_2803_Open_Image.style.display='inline'; Codehighlighter1_2536_2803_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">76</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> getInfosCount() </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_2536_2803_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_2536_2803_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">77</span><span style="color: #000000">.     </span><span style="color: #0000ff">int</span><span style="color: #000000"> count </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">78</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">select count(*) from Info</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">79</span><span style="color: #000000">.     count </span><span style="color: #000000">=</span><span style="color: #000000"> ((Integer) getHibernateTemplate().iterate(queryString).next()).<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">80</span><span style="color: #000000">.             intValue();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">81</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> count;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  </span><span style="color: #000000">82</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">83</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_2831_2907_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2831_2907_Open_Text.style.display='none'; Codehighlighter1_2831_2907_Closed_Image.style.display='inline'; Codehighlighter1_2831_2907_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_2831_2907_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2831_2907_Closed_Text.style.display='none'; Codehighlighter1_2831_2907_Open_Image.style.display='inline'; Codehighlighter1_2831_2907_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">84</span><span style="color: #000000">.   </span><span id="Codehighlighter1_2831_2907_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_2831_2907_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  85.    * 取所有记录集合<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  86.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Iterator<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  87.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_2970_3268_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2970_3268_Open_Text.style.display='none'; Codehighlighter1_2970_3268_Closed_Image.style.display='inline'; Codehighlighter1_2970_3268_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_2970_3268_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2970_3268_Closed_Text.style.display='none'; Codehighlighter1_2970_3268_Open_Image.style.display='inline'; Codehighlighter1_2970_3268_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">88</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Iterator getAllInfos() </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_2970_3268_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_2970_3268_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">89</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">90</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">91</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().find(queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">92</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">93</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> iterator;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  </span><span style="color: #000000">94</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: #000000">95</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_3296_3418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3296_3418_Open_Text.style.display='none'; Codehighlighter1_3296_3418_Closed_Image.style.display='inline'; Codehighlighter1_3296_3418_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_3296_3418_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_3296_3418_Closed_Text.style.display='none'; Codehighlighter1_3296_3418_Open_Image.style.display='inline'; Codehighlighter1_3296_3418_Open_Text.style.display='inline';" align="top" />  </span><span style="color: #000000">96</span><span style="color: #000000">.   </span><span id="Codehighlighter1_3296_3418_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_3296_3418_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  97.    * 取记录集合<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  98.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Iterator<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" />  99.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> int position, int length<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 100.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_3502_4065_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3502_4065_Open_Text.style.display='none'; Codehighlighter1_3502_4065_Closed_Image.style.display='inline'; Codehighlighter1_3502_4065_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_3502_4065_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_3502_4065_Closed_Text.style.display='none'; Codehighlighter1_3502_4065_Open_Image.style.display='inline'; Codehighlighter1_3502_4065_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">101</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Iterator getInfos(</span><span style="color: #0000ff">int</span><span style="color: #000000"> position, </span><span style="color: #0000ff">int</span><span style="color: #000000"> length) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_3502_4065_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_3502_4065_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">102</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">103</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">104</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">105</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">设置游标的起始点      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">106</span><span style="color: #000000">.     query.setFirstResult(position);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">107</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">设置游标的长度      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">108</span><span style="color: #000000">.     query.setMaxResults(length);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">109</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">110</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">111</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">112</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">113</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> iterator;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">114</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">115</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_4093_4201_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4093_4201_Open_Text.style.display='none'; Codehighlighter1_4093_4201_Closed_Image.style.display='inline'; Codehighlighter1_4093_4201_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_4093_4201_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_4093_4201_Closed_Text.style.display='none'; Codehighlighter1_4093_4201_Open_Image.style.display='inline'; Codehighlighter1_4093_4201_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">116</span><span style="color: #000000">.   </span><span id="Codehighlighter1_4093_4201_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_4093_4201_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 117.    * 取第一条记录<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 118.    * </span><span style="color: #808080">@throws</span><span style="color: #008000"> Exception<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 119.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Station<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 120.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_4261_4816_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4261_4816_Open_Text.style.display='none'; Codehighlighter1_4261_4816_Closed_Image.style.display='inline'; Codehighlighter1_4261_4816_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_4261_4816_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_4261_4816_Closed_Text.style.display='none'; Codehighlighter1_4261_4816_Open_Image.style.display='inline'; Codehighlighter1_4261_4816_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">121</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Info getFirstInfo() </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_4261_4816_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_4261_4816_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">122</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">123</span><span style="color: #000000">.     Info info </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">124</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">select info from Info as info order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">125</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">126</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">127</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">128</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">129</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_4704_4771_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4704_4771_Open_Text.style.display='none'; Codehighlighter1_4704_4771_Closed_Image.style.display='inline'; Codehighlighter1_4704_4771_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_4704_4771_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_4704_4771_Closed_Text.style.display='none'; Codehighlighter1_4704_4771_Open_Image.style.display='inline'; Codehighlighter1_4704_4771_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">130</span><span style="color: #000000">.     </span><span style="color: #0000ff">if</span><span style="color: #000000"> (iterator.hasNext()) </span><span id="Codehighlighter1_4704_4771_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_4704_4771_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">131</span><span style="color: #000000">.       info </span><span style="color: #000000">=</span><span style="color: #000000"> (Info) iterator.next();<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">132</span><span style="color: #000000">.     }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">133</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> info;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">134</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">135</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_4844_4953_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4844_4953_Open_Text.style.display='none'; Codehighlighter1_4844_4953_Closed_Image.style.display='inline'; Codehighlighter1_4844_4953_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_4844_4953_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_4844_4953_Closed_Text.style.display='none'; Codehighlighter1_4844_4953_Open_Image.style.display='inline'; Codehighlighter1_4844_4953_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">136</span><span style="color: #000000">.   </span><span id="Codehighlighter1_4844_4953_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_4844_4953_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 137.    * 取最后一条记录<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 138.    * </span><span style="color: #808080">@throws</span><span style="color: #008000"> Exception<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 139.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Station<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 140.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_5012_5578_Open_Image" onclick="this.style.display='none'; Codehighlighter1_5012_5578_Open_Text.style.display='none'; Codehighlighter1_5012_5578_Closed_Image.style.display='inline'; Codehighlighter1_5012_5578_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_5012_5578_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_5012_5578_Closed_Text.style.display='none'; Codehighlighter1_5012_5578_Open_Image.style.display='inline'; Codehighlighter1_5012_5578_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">141</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Info getLastInfo() </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_5012_5578_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_5012_5578_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">142</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">143</span><span style="color: #000000">.     Info info </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">144</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">select info from Info as info order by info.id asc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">145</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">146</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">147</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">148</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">149</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_5454_5521_Open_Image" onclick="this.style.display='none'; Codehighlighter1_5454_5521_Open_Text.style.display='none'; Codehighlighter1_5454_5521_Closed_Image.style.display='inline'; Codehighlighter1_5454_5521_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_5454_5521_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_5454_5521_Closed_Text.style.display='none'; Codehighlighter1_5454_5521_Open_Image.style.display='inline'; Codehighlighter1_5454_5521_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">150</span><span style="color: #000000">.     </span><span style="color: #0000ff">if</span><span style="color: #000000"> (iterator.hasNext()) </span><span id="Codehighlighter1_5454_5521_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_5454_5521_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">151</span><span style="color: #000000">.       info </span><span style="color: #000000">=</span><span style="color: #000000"> (Info) iterator.next();<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">152</span><span style="color: #000000">.     }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">153</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> info;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">154</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">155</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">156</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">157</span><span style="color: #000000">.   </span><span style="color: #008000">////////////////////////////////////////////////////////</span><span style="color: #008000">      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">158</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">159</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/ 以下部份表中要有特定字段才能正确运行   个人和企业     </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">160</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">161</span><span style="color: #000000">.   </span><span style="color: #008000">////////////////////////////////////////////////////////</span><span style="color: #008000">      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">162</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_5957_6086_Open_Image" onclick="this.style.display='none'; Codehighlighter1_5957_6086_Open_Text.style.display='none'; Codehighlighter1_5957_6086_Closed_Image.style.display='inline'; Codehighlighter1_5957_6086_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_5957_6086_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_5957_6086_Closed_Text.style.display='none'; Codehighlighter1_5957_6086_Open_Image.style.display='inline'; Codehighlighter1_5957_6086_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">163</span><span style="color: #000000">.   </span><span id="Codehighlighter1_5957_6086_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_5957_6086_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 164.    * 取符合条件记录总数, [表中要有 isperson 字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 165.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> int<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 166.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> int isPerson<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 167.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">168</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_6180_6508_Open_Image" onclick="this.style.display='none'; Codehighlighter1_6180_6508_Open_Text.style.display='none'; Codehighlighter1_6180_6508_Closed_Image.style.display='inline'; Codehighlighter1_6180_6508_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_6180_6508_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_6180_6508_Closed_Text.style.display='none'; Codehighlighter1_6180_6508_Open_Image.style.display='inline'; Codehighlighter1_6180_6508_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">169</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> getInfosCountByIsperson(</span><span style="color: #0000ff">int</span><span style="color: #000000"> isPerson) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_6180_6508_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_6180_6508_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">170</span><span style="color: #000000">.     </span><span style="color: #0000ff">int</span><span style="color: #000000"> count </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">171</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">172</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000">select count(*) from Info as info where info.isperson =</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> isPerson;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">173</span><span style="color: #000000">.     count </span><span style="color: #000000">=</span><span style="color: #000000"> ((Integer) getHibernateTemplate().iterate(queryString).next()).<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">174</span><span style="color: #000000">.             intValue();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">175</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> count;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">176</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">177</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_6536_6679_Open_Image" onclick="this.style.display='none'; Codehighlighter1_6536_6679_Open_Text.style.display='none'; Codehighlighter1_6536_6679_Closed_Image.style.display='inline'; Codehighlighter1_6536_6679_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_6536_6679_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_6536_6679_Closed_Text.style.display='none'; Codehighlighter1_6536_6679_Open_Image.style.display='inline'; Codehighlighter1_6536_6679_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">178</span><span style="color: #000000">.   </span><span id="Codehighlighter1_6536_6679_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_6536_6679_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 179.    * 取所有符合条件记录集合, 模糊查询条件.[表中要有 isperson 字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 180.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Iterator<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 181.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> int isPerson<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 182.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">183</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_6776_7180_Open_Image" onclick="this.style.display='none'; Codehighlighter1_6776_7180_Open_Text.style.display='none'; Codehighlighter1_6776_7180_Closed_Image.style.display='inline'; Codehighlighter1_6776_7180_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_6776_7180_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_6776_7180_Closed_Text.style.display='none'; Codehighlighter1_6776_7180_Open_Image.style.display='inline'; Codehighlighter1_6776_7180_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">184</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Iterator getAllInfosByIsperson(</span><span style="color: #0000ff">int</span><span style="color: #000000"> isPerson) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_6776_7180_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_6776_7180_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">185</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">186</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info where info.isperson =</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">187</span><span style="color: #000000">.                          isPerson </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">188</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().find(queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">189</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">190</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">191</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> iterator;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">192</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">193</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_7208_7374_Open_Image" onclick="this.style.display='none'; Codehighlighter1_7208_7374_Open_Text.style.display='none'; Codehighlighter1_7208_7374_Closed_Image.style.display='inline'; Codehighlighter1_7208_7374_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_7208_7374_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_7208_7374_Closed_Text.style.display='none'; Codehighlighter1_7208_7374_Open_Image.style.display='inline'; Codehighlighter1_7208_7374_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">194</span><span style="color: #000000">.   </span><span id="Codehighlighter1_7208_7374_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_7208_7374_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 195.    * 取符合条件记录集合, 模糊查询条件.[表中要有 isperson 字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 196.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Iterator<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 197.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> int isPerson,int position, int length<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 198.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">199</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">200</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Iterator getInfosByIsperson(</span><span style="color: #0000ff">int</span><span style="color: #000000"> isPerson, </span><span style="color: #0000ff">int</span><span style="color: #000000"> position, </span><span style="color: #0000ff">int</span><span style="color: #000000"> length) </span><span style="color: #0000ff">throws</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_7512_8173_Open_Image" onclick="this.style.display='none'; Codehighlighter1_7512_8173_Open_Text.style.display='none'; Codehighlighter1_7512_8173_Closed_Image.style.display='inline'; Codehighlighter1_7512_8173_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_7512_8173_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_7512_8173_Closed_Text.style.display='none'; Codehighlighter1_7512_8173_Open_Image.style.display='inline'; Codehighlighter1_7512_8173_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">201</span><span style="color: #000000">.       Exception </span><span id="Codehighlighter1_7512_8173_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_7512_8173_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">202</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">203</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info where info.isperson =</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">204</span><span style="color: #000000">.                          isPerson </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">205</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">创建查询      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">206</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">207</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">设置游标的起始点      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">208</span><span style="color: #000000">.     query.setFirstResult(position);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">209</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">设置游标的长度      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">210</span><span style="color: #000000">.     query.setMaxResults(length);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">211</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">212</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">213</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">214</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">215</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> iterator;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">216</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">217</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">218</span><span style="color: #000000">.   </span><span style="color: #008000">////////////////////////////////////////////////////////</span><span style="color: #008000">      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">219</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">220</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/ 以下部份表中要有特定字段才能正确运行   查询部份      </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">221</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">222</span><span style="color: #000000">.   </span><span style="color: #008000">//////////////////////////////////////////////////////</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_8539_8671_Open_Image" onclick="this.style.display='none'; Codehighlighter1_8539_8671_Open_Text.style.display='none'; Codehighlighter1_8539_8671_Closed_Image.style.display='inline'; Codehighlighter1_8539_8671_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_8539_8671_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_8539_8671_Closed_Text.style.display='none'; Codehighlighter1_8539_8671_Open_Image.style.display='inline'; Codehighlighter1_8539_8671_Open_Text.style.display='inline';" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">223</span><span style="color: #000000">.   </span><span id="Codehighlighter1_8539_8671_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_8539_8671_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 224.    * 取符合条件记录总数, 模糊查询条件.[表中要有 title 字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 225.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> int<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 226.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> String text<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 227.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_8742_9022_Open_Image" onclick="this.style.display='none'; Codehighlighter1_8742_9022_Open_Text.style.display='none'; Codehighlighter1_8742_9022_Closed_Image.style.display='inline'; Codehighlighter1_8742_9022_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_8742_9022_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_8742_9022_Closed_Text.style.display='none'; Codehighlighter1_8742_9022_Open_Image.style.display='inline'; Codehighlighter1_8742_9022_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">228</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> getInfosCount(String text) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_8742_9022_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_8742_9022_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">229</span><span style="color: #000000">.     </span><span style="color: #0000ff">int</span><span style="color: #000000"> count </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">230</span><span style="color: #000000">.     count </span><span style="color: #000000">=</span><span style="color: #000000"> ((Integer) getHibernateTemplate().iterate(<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">231</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000">select count(*) from Info as info where info.title like &#8217;%</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> text </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">232</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000">%&#8217;</span><span style="color: #000000">&#8220;</span><span style="color: #000000">).next()).intValue();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">233</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> count;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">234</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">235</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_9050_9189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_9050_9189_Open_Text.style.display='none'; Codehighlighter1_9050_9189_Closed_Image.style.display='inline'; Codehighlighter1_9050_9189_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_9050_9189_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_9050_9189_Closed_Text.style.display='none'; Codehighlighter1_9050_9189_Open_Image.style.display='inline'; Codehighlighter1_9050_9189_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">236</span><span style="color: #000000">.   </span><span id="Codehighlighter1_9050_9189_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_9050_9189_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 237.    * 取所有符合条件记录集合, 模糊查询条件.[表中要有 title 字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 238.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Iterator<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 239.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> String text<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 240.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">241</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_9275_9794_Open_Image" onclick="this.style.display='none'; Codehighlighter1_9275_9794_Open_Text.style.display='none'; Codehighlighter1_9275_9794_Closed_Image.style.display='inline'; Codehighlighter1_9275_9794_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_9275_9794_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_9275_9794_Closed_Text.style.display='none'; Codehighlighter1_9275_9794_Open_Image.style.display='inline'; Codehighlighter1_9275_9794_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">242</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Iterator getAllInfos(String text) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_9275_9794_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_9275_9794_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">243</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">244</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">245</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info where info.title like &#8217;%</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> text </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">246</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000">%&#8217; order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">247</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">创建查询      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">248</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">249</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">250</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">251</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">252</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">253</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> iterator;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">254</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">255</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_9822_9984_Open_Image" onclick="this.style.display='none'; Codehighlighter1_9822_9984_Open_Text.style.display='none'; Codehighlighter1_9822_9984_Closed_Image.style.display='inline'; Codehighlighter1_9822_9984_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_9822_9984_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_9822_9984_Closed_Text.style.display='none'; Codehighlighter1_9822_9984_Open_Image.style.display='inline'; Codehighlighter1_9822_9984_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">256</span><span style="color: #000000">.   </span><span id="Codehighlighter1_9822_9984_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_9822_9984_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 257.    * 取符合条件记录集合, 模糊查询条件.[表中要有 title 字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 258.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Iterator<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 259.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> String text,int position, int length<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 260.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">261</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Iterator getInfos(String text, </span><span style="color: #0000ff">int</span><span style="color: #000000"> position, </span><span style="color: #0000ff">int</span><span style="color: #000000"> length) </span><span style="color: #0000ff">throws</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_10099_10776_Open_Image" onclick="this.style.display='none'; Codehighlighter1_10099_10776_Open_Text.style.display='none'; Codehighlighter1_10099_10776_Closed_Image.style.display='inline'; Codehighlighter1_10099_10776_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_10099_10776_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_10099_10776_Closed_Text.style.display='none'; Codehighlighter1_10099_10776_Open_Image.style.display='inline'; Codehighlighter1_10099_10776_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">262</span><span style="color: #000000">.       Exception </span><span id="Codehighlighter1_10099_10776_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_10099_10776_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">263</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">264</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">265</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info where info.title like &#8217;%</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> text </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">266</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000">%&#8217; order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">267</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">268</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">创建查询      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">269</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">270</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">设置游标的起始点      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">271</span><span style="color: #000000">.     query.setFirstResult(position);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">272</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">设置游标的长度      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">273</span><span style="color: #000000">.     query.setMaxResults(length);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">274</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">275</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">276</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">277</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">278</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> iterator;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">279</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">280</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">281</span><span style="color: #000000">.   </span><span style="color: #008000">////////////////////////////////////////////////////////</span><span style="color: #008000">      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">282</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">283</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/ 以下部份表中要有特定字段才能正确运行   注册相关      </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">284</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">285</span><span style="color: #000000">.   </span><span style="color: #008000">////////////////////////////////////////////////////////</span><span style="color: #008000">      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">286</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_11155_11287_Open_Image" onclick="this.style.display='none'; Codehighlighter1_11155_11287_Open_Text.style.display='none'; Codehighlighter1_11155_11287_Closed_Image.style.display='inline'; Codehighlighter1_11155_11287_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_11155_11287_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_11155_11287_Closed_Text.style.display='none'; Codehighlighter1_11155_11287_Open_Image.style.display='inline'; Codehighlighter1_11155_11287_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">287</span><span style="color: #000000">.   </span><span id="Codehighlighter1_11155_11287_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_11155_11287_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 288.    * 取符合条件记录总数.[ 表中要有 registername 字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 289.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> int<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 290.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> String text<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 291.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_11380_11670_Open_Image" onclick="this.style.display='none'; Codehighlighter1_11380_11670_Open_Text.style.display='none'; Codehighlighter1_11380_11670_Closed_Image.style.display='inline'; Codehighlighter1_11380_11670_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_11380_11670_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_11380_11670_Closed_Text.style.display='none'; Codehighlighter1_11380_11670_Open_Image.style.display='inline'; Codehighlighter1_11380_11670_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">292</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> getInfosCountByRegisterName(String registerName) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_11380_11670_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_11380_11670_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">293</span><span style="color: #000000">.     </span><span style="color: #0000ff">int</span><span style="color: #000000"> count </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">294</span><span style="color: #000000">.     count </span><span style="color: #000000">=</span><span style="color: #000000"> ((Integer) getHibernateTemplate().iterate(<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">295</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000">select count(*) from Info as info where info.registername = &#8217;</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">296</span><span style="color: #000000">.         registerName </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">&#8216;</span><span style="color: #000000">&#8220;</span><span style="color: #000000">).next()).intValue();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">297</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> count;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">298</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">299</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_11698_11850_Open_Image" onclick="this.style.display='none'; Codehighlighter1_11698_11850_Open_Text.style.display='none'; Codehighlighter1_11698_11850_Closed_Image.style.display='inline'; Codehighlighter1_11698_11850_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_11698_11850_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_11698_11850_Closed_Text.style.display='none'; Codehighlighter1_11698_11850_Open_Image.style.display='inline'; Codehighlighter1_11698_11850_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">300</span><span style="color: #000000">.   </span><span id="Codehighlighter1_11698_11850_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_11698_11850_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 301.    * 通过注册名取得一条记录,如有多条,只取第一条.[表中要有 registername字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 302.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> registername String<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 303.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Info<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 304.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_11938_12604_Open_Image" onclick="this.style.display='none'; Codehighlighter1_11938_12604_Open_Text.style.display='none'; Codehighlighter1_11938_12604_Closed_Image.style.display='inline'; Codehighlighter1_11938_12604_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_11938_12604_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_11938_12604_Closed_Text.style.display='none'; Codehighlighter1_11938_12604_Open_Image.style.display='inline'; Codehighlighter1_11938_12604_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">305</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Info getInfoByRegisterName(String registerName) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_11938_12604_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_11938_12604_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">306</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">307</span><span style="color: #000000">.     Info info </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">308</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">309</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info where info.registername=&#8217;</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">310</span><span style="color: #000000">.         registerName </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">&#8216; order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">311</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">创建查询      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">312</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">313</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">314</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">315</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">316</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_12492_12559_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12492_12559_Open_Text.style.display='none'; Codehighlighter1_12492_12559_Closed_Image.style.display='inline'; Codehighlighter1_12492_12559_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_12492_12559_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_12492_12559_Closed_Text.style.display='none'; Codehighlighter1_12492_12559_Open_Image.style.display='inline'; Codehighlighter1_12492_12559_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">317</span><span style="color: #000000">.     </span><span style="color: #0000ff">if</span><span style="color: #000000"> (iterator.hasNext()) </span><span id="Codehighlighter1_12492_12559_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_12492_12559_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">318</span><span style="color: #000000">.       info </span><span style="color: #000000">=</span><span style="color: #000000"> (Info) iterator.next();<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">319</span><span style="color: #000000">.     }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">320</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> info;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">321</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">322</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_12632_12779_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12632_12779_Open_Text.style.display='none'; Codehighlighter1_12632_12779_Closed_Image.style.display='inline'; Codehighlighter1_12632_12779_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_12632_12779_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_12632_12779_Closed_Text.style.display='none'; Codehighlighter1_12632_12779_Open_Image.style.display='inline'; Codehighlighter1_12632_12779_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">323</span><span style="color: #000000">.   </span><span id="Codehighlighter1_12632_12779_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_12632_12779_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 324.    * 通过注册名取得所有记录集合.[表中要有 registername字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 325.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> registername String<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 326.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Iterator<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 327.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">328</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Iterator getAllInfosByRegisterName(String registerName) </span><span style="color: #0000ff">throws</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_12893_13420_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12893_13420_Open_Text.style.display='none'; Codehighlighter1_12893_13420_Closed_Image.style.display='inline'; Codehighlighter1_12893_13420_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_12893_13420_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_12893_13420_Closed_Text.style.display='none'; Codehighlighter1_12893_13420_Open_Image.style.display='inline'; Codehighlighter1_12893_13420_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">329</span><span style="color: #000000">.       Exception </span><span id="Codehighlighter1_12893_13420_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_12893_13420_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">330</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">331</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">332</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info where info.registername=&#8217;</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">333</span><span style="color: #000000">.         registerName </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">&#8216; order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">334</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">创建查询      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">335</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">336</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">337</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">338</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">339</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">340</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> iterator;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">341</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">342</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_13448_13593_Open_Image" onclick="this.style.display='none'; Codehighlighter1_13448_13593_Open_Text.style.display='none'; Codehighlighter1_13448_13593_Closed_Image.style.display='inline'; Codehighlighter1_13448_13593_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_13448_13593_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_13448_13593_Closed_Text.style.display='none'; Codehighlighter1_13448_13593_Open_Image.style.display='inline'; Codehighlighter1_13448_13593_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">343</span><span style="color: #000000">.   </span><span id="Codehighlighter1_13448_13593_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_13448_13593_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 344.    * 通过注册名取得记录列表.[表中要有 registername字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 345.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> registername String<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 346.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Iterator<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 347.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">348</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Iterator getInfosByRegisterName(String registerName, </span><span style="color: #0000ff">int</span><span style="color: #000000"> position,<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_13765_14438_Open_Image" onclick="this.style.display='none'; Codehighlighter1_13765_14438_Open_Text.style.display='none'; Codehighlighter1_13765_14438_Closed_Image.style.display='inline'; Codehighlighter1_13765_14438_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_13765_14438_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_13765_14438_Closed_Text.style.display='none'; Codehighlighter1_13765_14438_Open_Image.style.display='inline'; Codehighlighter1_13765_14438_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">349</span><span style="color: #000000">.                                          </span><span style="color: #0000ff">int</span><span style="color: #000000"> length) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_13765_14438_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_13765_14438_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">350</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">351</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">352</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info where info.registername=&#8217;</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">353</span><span style="color: #000000">.         registerName </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">&#8216; order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">354</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">创建查询      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">355</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">356</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">设置游标的起始点      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">357</span><span style="color: #000000">.     query.setFirstResult(position);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">358</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">设置游标的长度      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">359</span><span style="color: #000000">.     query.setMaxResults(length);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">360</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">361</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">362</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">363</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">364</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> iterator;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">365</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">366</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">367</span><span style="color: #000000">.   </span><span style="color: #008000">////////////////////////////////////////////////////////</span><span style="color: #008000">      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">368</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">369</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/ 以下部份表中要有特定字段才能正确运行     树型版块     </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">370</span><span style="color: #000000">.   </span><span style="color: #008000">////</span><span style="color: #008000">/                                                </span><span style="color: #008000">//</span><span style="color: #008000">/      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">371</span><span style="color: #000000">.   </span><span style="color: #008000">////////////////////////////////////////////////////////</span><span style="color: #008000">      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">372</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_14818_14945_Open_Image" onclick="this.style.display='none'; Codehighlighter1_14818_14945_Open_Text.style.display='none'; Codehighlighter1_14818_14945_Closed_Image.style.display='inline'; Codehighlighter1_14818_14945_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_14818_14945_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_14818_14945_Closed_Text.style.display='none'; Codehighlighter1_14818_14945_Open_Image.style.display='inline'; Codehighlighter1_14818_14945_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">373</span><span style="color: #000000">.   </span><span id="Codehighlighter1_14818_14945_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_14818_14945_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 374.    * 取记录总数.[ 表中要有 board_id 字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 375.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> int<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 376.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> String boardId<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 377.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_15026_15330_Open_Image" onclick="this.style.display='none'; Codehighlighter1_15026_15330_Open_Text.style.display='none'; Codehighlighter1_15026_15330_Closed_Image.style.display='inline'; Codehighlighter1_15026_15330_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_15026_15330_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_15026_15330_Closed_Text.style.display='none'; Codehighlighter1_15026_15330_Open_Image.style.display='inline'; Codehighlighter1_15026_15330_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">378</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> getInfosCountByBoard(String boardId) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_15026_15330_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_15026_15330_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">379</span><span style="color: #000000">.     </span><span style="color: #0000ff">int</span><span style="color: #000000"> count </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">380</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">381</span><span style="color: #000000">.     count </span><span style="color: #000000">=</span><span style="color: #000000"> ((Integer) getHibernateTemplate().iterate(<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">382</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000">select count(*) from Info as info where info.boardId = &#8217;</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> boardId </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">383</span><span style="color: #000000">.         </span><span style="color: #000000">&#8220;</span><span style="color: #000000">&#8216;</span><span style="color: #000000">&#8220;</span><span style="color: #000000">).next()).intValue();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">384</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">385</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> count;<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> </span><span style="color: #000000">386</span><span style="color: #000000">.   }</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">387</span><span style="color: #000000">.<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_15358_15496_Open_Image" onclick="this.style.display='none'; Codehighlighter1_15358_15496_Open_Text.style.display='none'; Codehighlighter1_15358_15496_Closed_Image.style.display='inline'; Codehighlighter1_15358_15496_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_15358_15496_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_15358_15496_Closed_Text.style.display='none'; Codehighlighter1_15358_15496_Open_Image.style.display='inline'; Codehighlighter1_15358_15496_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">388</span><span style="color: #000000">.   </span><span id="Codehighlighter1_15358_15496_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff">/** */</span><span id="Codehighlighter1_15358_15496_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 389.    * 通过版块名取得所有记录集合.[表中要有 board_id字段]<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 390.    * </span><span style="color: #808080">@param</span><span style="color: #008000"> BoardId String<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> 391.    * </span><span style="color: #808080">@return</span><span style="color: #008000"> Iterator<br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> 392.    </span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_15580_16079_Open_Image" onclick="this.style.display='none'; Codehighlighter1_15580_16079_Open_Text.style.display='none'; Codehighlighter1_15580_16079_Closed_Image.style.display='inline'; Codehighlighter1_15580_16079_Closed_Text.style.display='inline';" align="top" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_15580_16079_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_15580_16079_Closed_Text.style.display='none'; Codehighlighter1_15580_16079_Open_Image.style.display='inline'; Codehighlighter1_15580_16079_Open_Text.style.display='inline';" align="top" /> </span><span style="color: #000000">393</span><span style="color: #000000">.   </span><span style="color: #0000ff">public</span><span style="color: #000000"> Iterator getAllInfosByBoard(String boardId) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception </span><span id="Codehighlighter1_15580_16079_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff"><img src="/Images/dot.gif" /></span><span id="Codehighlighter1_15580_16079_Open_Text"><span style="color: #000000">{<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">394</span><span style="color: #000000">.     Iterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">395</span><span style="color: #000000">.     String queryString </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> select info from Info as info where info.boardId=&#8217;</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">396</span><span style="color: #000000">.                          boardId </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">&#8216; order by info.id desc</span><span style="color: #000000">&#8220;</span><span style="color: #000000">;<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">397</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">创建查询      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">398</span><span style="color: #000000">.     Query query </span><span style="color: #000000">=</span><span style="color: #000000"> getHibernateTemplate().createQuery(getSession(), queryString);<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">399</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">记录生成      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">400</span><span style="color: #000000">.     List list </span><span style="color: #000000">=</span><span style="color: #000000"> query.list();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">401</span><span style="color: #000000">.     </span><span style="color: #008000">//</span><span style="color: #008000">把查询到的结果放入迭代器      </span><span style="color: #008000"><br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"> </span><span style="color: #000000">402</span><span style="color: #000000">.     iterator </span><span style="color: #000000">=</span><span style="color: #000000"> list.iterator();<br />
<img src="/Images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="color: #000000">403</span><span style="color: #000000">.     </span><span style="color: #0000ff">return</span><span style="color: #000000"> iterator;</span></span></span></p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/03/30/%e7%ae%80%e5%8d%95%e7%9a%84%e9%94%99%e8%af%af/' rel='bookmark' title='Permanent Link: 简单的错误'>简单的错误</a></li><li><a href='http://www.foxlog.org/2006/09/28/zt%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e4%b9%8bvisitor-%e8%ae%bf%e9%97%ae%e8%80%85%e6%a8%a1%e5%bc%8f/' rel='bookmark' title='Permanent Link: [zt]设计模式之Visitor 访问者模式'>[zt]设计模式之Visitor 访问者模式</a></li><li><a href='http://www.foxlog.org/2006/10/09/%e5%85%b3%e4%ba%8efacade%e7%9a%84%e5%ba%94%e7%94%a8/' rel='bookmark' title='Permanent Link: 关于Facade的应用'>关于Facade的应用</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2007/01/25/zt-hibernatespring-%e5%af%b9dao%e7%9a%84%e5%a4%84%e7%90%86%e5%ae%9e%e5%88%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MiddleGen中配置hibernate的many to many属性</title>
		<link>http://www.foxlog.org/2006/12/07/middlegen%e4%b8%ad%e9%85%8d%e7%bd%aehibernate%e7%9a%84many-to-many%e5%b1%9e%e6%80%a7/</link>
		<comments>http://www.foxlog.org/2006/12/07/middlegen%e4%b8%ad%e9%85%8d%e7%bd%aehibernate%e7%9a%84many-to-many%e5%b1%9e%e6%80%a7/#comments</comments>
		<pubDate>Thu, 07 Dec 2006 14:30:15 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/45</guid>
		<description><![CDATA[key words: MiddleGen,hibernate,many to many,多对多 如果你有如下表结构 user(user_id,user_name) role(role_id,role_name) user_role(id,user_id,role_id) 那么默认MiddleGen生成的是两个一对多，但我们更多的情况是用many to many 需要修改middlegen的build.xml文件 Related posts:奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法


Related posts:<ol><li><a href='http://www.foxlog.org/2006/02/17/%e5%a5%87%e6%80%aahibernate-extensions%e7%94%9f%e6%88%90%e7%9a%84pojo%e6%b2%a1%e6%9c%89equals%e5%92%8chashcode%e6%96%b9%e6%b3%95/' rel='bookmark' title='Permanent Link: 奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法'>奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>key words: MiddleGen,hibernate,many to many,多对多  如果你有如下表结构  user(user_id,user_name) role(role_id,role_name)  user_role(id,user_id,role_id)  那么默认MiddleGen生成的是两个一对多，但我们更多的情况是用many to many  需要修改middlegen的build.xml文件  <many2many></p>
<tablea generate="true" name="user"></tablea><jointable name="user_role" generate="false"></p>
<tableb generate="true" name="role"></tableb></jointable>  </many2many></p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/02/17/%e5%a5%87%e6%80%aahibernate-extensions%e7%94%9f%e6%88%90%e7%9a%84pojo%e6%b2%a1%e6%9c%89equals%e5%92%8chashcode%e6%96%b9%e6%b3%95/' rel='bookmark' title='Permanent Link: 奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法'>奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/12/07/middlegen%e4%b8%ad%e9%85%8d%e7%bd%aehibernate%e7%9a%84many-to-many%e5%b1%9e%e6%80%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate的Fetch</title>
		<link>http://www.foxlog.org/2006/12/01/hibernate%e7%9a%84fetch/</link>
		<comments>http://www.foxlog.org/2006/12/01/hibernate%e7%9a%84fetch/#comments</comments>
		<pubDate>Fri, 01 Dec 2006 14:34:10 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/49</guid>
		<description><![CDATA[越来越发现其实掌握 hibernate并不容易，Spring用起来其实简单多了，但是在用hibernate的时候真的是需要一定的时间积累，对一个项目组来说如果采用hibernate最好有一个对hibernate比较清楚的人否则碰到问题就会成为项目的风险。 我想告诉各位的是，掌握hibernate可能比你预期的难多了，当你轻松的告诉我，hibernate很简单的时候该是你自己多反省了. （只有一种情况例外，你是一个牛人） 好了，一个引子废话那么多，其实今天只是想先说一说hibernate里的Fetch的作用. 大家都知道，在hibernate里为了性能考虑，引进了lazy的概念，这里我们以Parent和Child为模型来说明， public class Parent implements Serializable { /** identifier field */ private Long id; /** persistent field */ private List childs; //skip all getter/setter method } public class Child implements Serializable { /** identifier field */ private Long id; /** persistent field */ private net.foxlog.model.Parent parent; //skip all getter/setter method } 在我们查询Parent对象的时候，默认只有Parent的内容，并不包含childs的信息，如果在Parent.hbm.xml里设置lazy=&#8221;false&#8221;的话才同时取出关联的所有childs内容. 问题是我既想要hibernate默认的性能又想要临时的灵活性该怎么办？  这就是fetch的功能。我们可以把fetch与lazy=&#8221;true&#8221;的关系类比为事务当中的编程式事务与声明式事务,不太准确，但是大概是这个意思。 总值，fetch就是在代码这一层给你一个主动抓取得机会. Parent parent = (Parent)hibernateTemplate.execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createQuery( &#8220;from Parent as parent &#8220;+ &#8220; left outer join fetch parent.childs &#8220; + &#8220; where parent.id = :id&#8220; ); q.setParameter(&#8220;id&#8220;,new Long(15)); return (Parent)q.uniqueResult(); } }); Assert.assertTrue(parent.getChilds().size() &#62; 0); 你可以在lazy=&#8221;true&#8221;的情况下把fetch去掉，就会报异常. 当然，如果lazy=&#8221;false&#8221;就不需要fetch了 有一个问题,使用Fetch会有重复记录的现象发生,我们可以理解为Fetch实际上不是为Parent服务的,而是为Child服务的.所以直接取Parent会有不匹配的问题. 参考一下下面的这篇文章 Hibernate集合初始化 ====================================================================== update:以上有些结论错误，实际上在hibernate3.2.1版本下测试，可以不出现重复记录， public void testNPlusOne() throws Exception{ List list = (List)hibernateTemplate.execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createQuery( &#8220;select distinct p from net.foxlog.model.Parent p inner join fetch p.childs&#8220; ); return q.list(); } }); [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/11/07/hibernate%e7%9a%84load%e9%94%99%e8%af%af%ef%bc%8c%e4%bd%a0%e7%a2%b0%e5%88%b0%e8%bf%87%e8%bf%99%e6%a0%b7%e7%9a%84%e9%97%ae%e9%a2%98%e4%b9%88/' rel='bookmark' title='Permanent Link: Hibernate的load错误，你碰到过这样的问题么?'>Hibernate的load错误，你碰到过这样的问题么?</a></li><li><a href='http://www.foxlog.org/2006/02/24/middlegen%e6%80%aa%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84hbmxml%e6%96%87%e4%bb%b6%e7%9a%84%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%92%8c%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b1%bb%e5%9e%8b%e4%b8%8d/' rel='bookmark' title='Permanent Link: MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致'>MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致</a></li><li><a href='http://www.foxlog.org/2006/07/27/oracle%e8%a1%a8%e8%bf%9e%e6%8e%a5/' rel='bookmark' title='Permanent Link: oracle表连接'>oracle表连接</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>越来越发现其实掌握  hibernate并不容易，Spring用起来其实简单多了，但是在用hibernate的时候真的是需要一定的时间积累，对一个项目组来说如果采用hibernate最好有一个对hibernate比较清楚的人否则碰到问题就会成为项目的风险。<br />
我想告诉各位的是，掌握hibernate可能比你预期的难多了，当你轻松的告诉我，hibernate很简单的时候该是你自己多反省了.  （只有一种情况例外，你是一个牛人）</p>
<p>好了，一个引子废话那么多，其实今天只是想先说一说hibernate里的Fetch的作用.</p>
<p>大家都知道，在hibernate里为了性能考虑，引进了lazy的概念，这里我们以Parent和Child为模型来说明，</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Parent </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Serializable {</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"> identifier field </span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Long id;</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"> persistent field </span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">private</span><span style="color: #000000"> List childs;</p>
<p></span><span style="color: #008000">//</span><span style="color: #008000">skip all getter/setter method</span><span style="color: #008000"><br />
</span><span style="color: #000000"></p>
<p>}</p>
<p></span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Child </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Serializable {</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"> identifier field </span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Long id;</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"> persistent field </span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">private</span><span style="color: #000000"> net.foxlog.model.Parent parent;</p>
<p>//skip all  getter/setter  method</p>
<p>}</span><br />
在我们查询Parent对象的时候，默认只有Parent的内容，并不包含childs的信息，如果在Parent.hbm.xml里设置lazy=&#8221;false&#8221;的话才同时取出关联的所有childs内容.</p>
<p>问题是我既想要hibernate默认的性能又想要临时的灵活性该怎么办？   这就是fetch的功能。我们可以把fetch与lazy=&#8221;true&#8221;的关系类比为事务当中的编程式事务与声明式事务,不太准确，但是大概是这个意思。</p>
<p>总值，fetch就是在代码这一层给你一个主动抓取得机会.</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000">Parent parent </span><span style="color: #000000">=</span><span style="color: #000000"> (Parent)hibernateTemplate.execute(</span><span style="color: #0000ff">new</span><span style="color: #000000"> HibernateCallback() {<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Object doInHibernate(Session session) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> HibernateException, SQLException {<br />
Query q </span><span style="color: #000000">=</span><span style="color: #000000"> session.createQuery(<br />
</span><span style="color: #000000">&#8220;</span><span style="color: #000000">from Parent as parent </span><span style="color: #000000">&#8220;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> left outer join fetch parent.childs </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"><br />
</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> where parent.id = :id</span><span style="color: #000000">&#8220;</span><span style="color: #000000"><br />
);<br />
q.setParameter(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">id</span><span style="color: #000000">&#8220;</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000"> Long(</span><span style="color: #000000">15</span><span style="color: #000000">));<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000"> (Parent)q.uniqueResult();<br />
}</p>
<p>});</p>
<p>Assert.assertTrue(parent.getChilds().size() </span><span style="color: #000000">&gt;</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">);</span></p>
<p>你可以在lazy=&#8221;true&#8221;的情况下把fetch去掉，就会报异常.  当然，如果lazy=&#8221;false&#8221;就不需要fetch了</p>
<p>有一个问题,使用Fetch会有重复记录的现象发生,我们可以理解为Fetch实际上不是为Parent服务的,而是为Child服务的.所以直接取Parent会有不匹配的问题.</p>
<p><span style="color: #000000"></p>
<p>参考一下下面的这篇文章<br />
<a href="http://waterye.blogdriver.com/waterye/395708.html" target="_blank">Hibernate集合初始化</a></p>
<p>======================================================================</p>
<p>update:以上有些结论错误，实际上在hibernate3.2.1版本下测试，可以不出现重复记录，</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> testNPlusOne() </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception{<br />
List list </span><span style="color: #000000">=</span><span style="color: #000000"> (List)hibernateTemplate.execute(</span><span style="color: #0000ff">new</span><span style="color: #000000"> HibernateCallback() {<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Object doInHibernate(Session session) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> HibernateException, SQLException {<br />
Query q </span><span style="color: #000000">=</span><span style="color: #000000"> session.createQuery(<br />
</span><span style="color: #000000">&#8220;</span><span style="color: #000000">select distinct p from net.foxlog.model.Parent p inner join fetch p.childs</span><span style="color: #000000">&#8220;</span><span style="color: #000000"><br />
);<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000"> q.list();<br />
}</p>
<p>});</p>
<p></span><span style="color: #008000">//</span><span style="color: #008000">((Parent)(list.get(0))).getChilds();</span><span style="color: #008000"><br />
</span><span style="color: #000000">        System.out.println(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">list size = </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> list.size());<br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000"> 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">list.size();i</span><span style="color: #000000">++</span><span style="color: #000000">){<br />
Parent p </span><span style="color: #000000">=</span><span style="color: #000000"> (Parent)list.get(i);<br />
System.out.println(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">===parent = </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> p);<br />
System.out.println(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">===parent&#8217;s child&#8217;s length = </span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> p.getChilds().size());<br />
}</p>
<p>}</span></p>
<p>打印结果如下:</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000">Hibernate: select distinct parent0_.id as id2_0_, childs1_.id as id0_1_, childs1_.parent_id as parent2_0_1_, childs1_.parent_id as parent2_0__, childs1_.id as id0__ from parent parent0_ inner join child childs1_ on parent0_.id</span><span style="color: #000000">=</span><span style="color: #000000">childs1_.parent_id<br />
list size </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">3</span><span style="color: #000000"><br />
</span><span style="color: #000000">===</span><span style="color: #000000">parent </span><span style="color: #000000">=</span><span style="color: #000000"> net.foxlog.model.Parent@1401d28[id</span><span style="color: #000000">=</span><span style="color: #000000">14</span><span style="color: #000000">]<br />
</span><span style="color: #000000">===</span><span style="color: #000000">parent</span><span style="color: #000000">&#8216;</span><span style="color: #000000">s child</span><span style="color: #000000">&#8216;</span><span style="color: #000000">s length </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000"><br />
</span><span style="color: #000000">===</span><span style="color: #000000">parent </span><span style="color: #000000">=</span><span style="color: #000000"> net.foxlog.model.Parent@14e0e90[id</span><span style="color: #000000">=</span><span style="color: #000000">15</span><span style="color: #000000">]<br />
</span><span style="color: #000000">===</span><span style="color: #000000">parent</span><span style="color: #000000">&#8216;</span><span style="color: #000000">s child</span><span style="color: #000000">&#8216;</span><span style="color: #000000">s length </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">2</span><span style="color: #000000"><br />
</span><span style="color: #000000">===</span><span style="color: #000000">parent </span><span style="color: #000000">=</span><span style="color: #000000"> net.foxlog.model.Parent@62610b[id</span><span style="color: #000000">=</span><span style="color: #000000">17</span><span style="color: #000000">]<br />
</span><span style="color: #000000">===</span><span style="color: #000000">parent</span><span style="color: #000000">&#8216;</span><span style="color: #000000">s child</span><span style="color: #000000">&#8216;</span><span style="color: #000000">s length </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">3</span><span style="color: #000000"><br />
</span><br />
另外，如果用open session in  view模式的话一般不用fetch,但首先推荐fetch,如果非用的话因为有N+1的现象，所以可以结合batch模式来改善下性能.</span></p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/11/07/hibernate%e7%9a%84load%e9%94%99%e8%af%af%ef%bc%8c%e4%bd%a0%e7%a2%b0%e5%88%b0%e8%bf%87%e8%bf%99%e6%a0%b7%e7%9a%84%e9%97%ae%e9%a2%98%e4%b9%88/' rel='bookmark' title='Permanent Link: Hibernate的load错误，你碰到过这样的问题么?'>Hibernate的load错误，你碰到过这样的问题么?</a></li><li><a href='http://www.foxlog.org/2006/02/24/middlegen%e6%80%aa%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84hbmxml%e6%96%87%e4%bb%b6%e7%9a%84%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%92%8c%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b1%bb%e5%9e%8b%e4%b8%8d/' rel='bookmark' title='Permanent Link: MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致'>MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致</a></li><li><a href='http://www.foxlog.org/2006/07/27/oracle%e8%a1%a8%e8%bf%9e%e6%8e%a5/' rel='bookmark' title='Permanent Link: oracle表连接'>oracle表连接</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/12/01/hibernate%e7%9a%84fetch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[zt]hibernate复合主键</title>
		<link>http://www.foxlog.org/2006/11/09/zthibernate%e5%a4%8d%e5%90%88%e4%b8%bb%e9%94%ae/</link>
		<comments>http://www.foxlog.org/2006/11/09/zthibernate%e5%a4%8d%e5%90%88%e4%b8%bb%e9%94%ae/#comments</comments>
		<pubDate>Thu, 09 Nov 2006 14:36:15 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/51</guid>
		<description><![CDATA[key words:hibernate,复合主键，composite-id 基于业务需求，您会需要使用两个字段来作复合主键，例如在User数据表中，您也许会使用&#8220;name&#8221;与&#8220;phone&#8221;两个字段来定义复合主键。 假设您这么建立User表格： CREATE TABLE user ( name VARCHAR(100) NOT NULL, phone VARCHAR(50) NOT NULL, age INT, PRIMARY KEY(name, phone) ); 在表格中，&#8220;name&#8221;与&#8220;age&#8221;被定义为复合主键，在映像时，您可以让User类别直接带有&#8220;name&#8221;与&#8220;age&#8221;这两个属性，而Hibernate要求复合主键类别要实作Serializable接口，并定义equals()与hashCode()方法： User.java package onlyfun.caterpillar; import java.io.Serializable; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; // 复合主键类的对应类别必须实作Serializable接口 public class User implements Serializable { private String name; private String phone; private Integer age; public User() { } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } // 必须重新定义equals()与hashCode() public boolean equals(Object obj) { if(obj == this) { return true; } if(!(obj instanceof User)) { return false; } User user = (User) obj; return new EqualsBuilder() .append(this.name, user.getName()) .append(this.phone, user.getPhone()) .isEquals(); } [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/11/07/hibernate%e7%9a%84load%e9%94%99%e8%af%af%ef%bc%8c%e4%bd%a0%e7%a2%b0%e5%88%b0%e8%bf%87%e8%bf%99%e6%a0%b7%e7%9a%84%e9%97%ae%e9%a2%98%e4%b9%88/' rel='bookmark' title='Permanent Link: Hibernate的load错误，你碰到过这样的问题么?'>Hibernate的load错误，你碰到过这样的问题么?</a></li><li><a href='http://www.foxlog.org/2006/02/24/middlegen%e6%80%aa%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84hbmxml%e6%96%87%e4%bb%b6%e7%9a%84%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%92%8c%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b1%bb%e5%9e%8b%e4%b8%8d/' rel='bookmark' title='Permanent Link: MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致'>MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致</a></li><li><a href='http://www.foxlog.org/2006/08/19/%e5%85%b3%e4%ba%8ejava%e4%b8%8ejavascript%e7%9a%84%e4%ba%92%e7%9b%b8%e8%ae%bf%e9%97%ae/' rel='bookmark' title='Permanent Link: 关于java与javaScript的互相访问'>关于java与javaScript的互相访问</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="postText">key words:hibernate,复合主键，composite-id</p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">基于业务需求，您会需要使用两个字段来作复合主键，例如在<span lang="EN-US">User</span>数据表中，您也许会使用<span lang="EN-US">&#8220;name&#8221;</span>与<span lang="EN-US">&#8220;phone&#8221;</span>两个字段来定义复合主键。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">假设您这么建立<span lang="EN-US">User</span>表格：<span lang="EN-US"><o:p></o:p></span></span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">CREATE</span><span style="color: #000000"> </span><span style="color: #0000ff">TABLE</span><span style="color: #000000"> </span><span style="color: #ff00ff">user</span><span style="color: #000000"> (</p>
<p>name </span><span style="font-weight: bold; color: #000000">VARCHAR</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">100</span><span style="color: #000000">) </span><span style="color: #808080">NOT</span><span style="color: #000000"> </span><span style="color: #0000ff">NULL</span><span style="color: #000000">,</p>
<p>phone </span><span style="font-weight: bold; color: #000000">VARCHAR</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">50</span><span style="color: #000000">) </span><span style="color: #808080">NOT</span><span style="color: #000000"> </span><span style="color: #0000ff">NULL</span><span style="color: #000000">,</p>
<p>age </span><span style="font-weight: bold; color: #000000">INT</span><span style="color: #000000">,</p>
<p></span><span style="color: #0000ff">PRIMARY</span><span style="color: #000000"> </span><span style="color: #0000ff">KEY</span><span style="color: #000000">(name, phone)</p>
<p>);<br />
</span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">在表格中，<span lang="EN-US">&#8220;name&#8221;</span>与<span lang="EN-US">&#8220;age&#8221;</span>被定义为复合主键，在映像时，您可以让<span lang="EN-US">User</span>类别直接带有<span lang="EN-US">&#8220;name&#8221;</span>与<span lang="EN-US">&#8220;age&#8221;</span>这两个属性，而<span lang="EN-US">Hibernate</span>要求复合主键类别要实作<span lang="EN-US">Serializable</span>接口，并定义<span lang="EN-US">equals()</span>与<span lang="EN-US">hashCode()</span>方法：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US">User.java</span></strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">package</span><span style="color: #000000"> onlyfun.caterpillar;</p>
<p></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.io.Serializable;</p>
<p></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.commons.lang.builder.EqualsBuilder;</p>
<p></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.commons.lang.builder.HashCodeBuilder;</p>
<p></span><span style="color: #008000">//</span><span style="color: #008000"> 复合主键类的对应类别必须实作Serializable接口</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> User </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Serializable {</p>
<p></span><span style="color: #0000ff">private</span><span style="color: #000000"> String name;</p>
<p></span><span style="color: #0000ff">private</span><span style="color: #000000"> String phone;</p>
<p></span><span style="color: #0000ff">private</span><span style="color: #000000"> Integer age;</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> User() {</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> Integer getAge() {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> age;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setAge(Integer age) {</p>
<p></span><span style="color: #0000ff">this</span><span style="color: #000000">.age </span><span style="color: #000000">=</span><span style="color: #000000"> age;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> String getName() {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> name;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setName(String name) {</p>
<p></span><span style="color: #0000ff">this</span><span style="color: #000000">.name </span><span style="color: #000000">=</span><span style="color: #000000"> name;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> String getPhone() {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> phone;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setPhone(String phone) {</p>
<p></span><span style="color: #0000ff">this</span><span style="color: #000000">.phone </span><span style="color: #000000">=</span><span style="color: #000000"> phone;</p>
<p>}</p>
<p></span><span style="color: #008000">//</span><span style="color: #008000"> 必须重新定义equals()与hashCode()</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">boolean</span><span style="color: #000000"> equals(Object obj) {</p>
<p></span><span style="color: #0000ff">if</span><span style="color: #000000">(obj </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #0000ff">this</span><span style="color: #000000">) {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;</p>
<p>}</p>
<p></span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">(obj </span><span style="color: #0000ff">instanceof</span><span style="color: #000000"> User)) {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;</p>
<p>}</p>
<p>User user </span><span style="color: #000000">=</span><span style="color: #000000"> (User) obj;</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> EqualsBuilder()</p>
<p>.append(</span><span style="color: #0000ff">this</span><span style="color: #000000">.name, user.getName())</p>
<p>.append(</span><span style="color: #0000ff">this</span><span style="color: #000000">.phone, user.getPhone())</p>
<p>.isEquals();</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> hashCode() {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashCodeBuilder()</p>
<p>.append(</span><span style="color: #0000ff">this</span><span style="color: #000000">.name)</p>
<p>.append(</span><span style="color: #0000ff">this</span><span style="color: #000000">.phone)</p>
<p>.toHashCode();</p>
<p>}</p>
<p>}<br />
</span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体" lang="EN-US">equals()</span><span style="font-size: 12pt; font-family: 宋体">与<span lang="EN-US">hashCode()</span>方法被用作两笔不同数据的识别依据；接着您可以使用<span lang="EN-US">&lt;composite-id&gt;</span>在映射文件中定义复合主键与对象的属性对应：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US">User.hbm.xml</span></strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE hibernate-mapping</p>
<p>PUBLIC &#8221;-//Hibernate/Hibernate Mapping DTD 3.0//EN&#8221;</p>
<p>&#8220;http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">hibernate-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;onlyfun.caterpillar.User&#8221;</span><span style="color: #ff0000"> table</span><span style="color: #0000ff">=&#8221;user&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">composite-id</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key-property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000"></p>
<p>column</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000"></p>
<p>type</span><span style="color: #0000ff">=&#8221;java.lang.String&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key-property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;phone&#8221;</span><span style="color: #ff0000"></p>
<p>column</span><span style="color: #0000ff">=&#8221;phone&#8221;</span><span style="color: #ff0000"></p>
<p>type</span><span style="color: #0000ff">=&#8221;java.lang.String&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">composite-id</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;age&#8221;</span><span style="color: #ff0000"> column</span><span style="color: #0000ff">=&#8221;age&#8221;</span><span style="color: #ff0000"> type</span><span style="color: #0000ff">=&#8221;java.lang.Integer&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">hibernate-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">在储存数据方面，复合主键的储存没什么区别，现在的问题在于如何依据复合主键来查询数据，例如使用<span lang="EN-US">load()</span>方法，您可以创建一个<span lang="EN-US">User</span>实例，并设定复合主键对应的属性，接着再透过<span lang="EN-US">load()</span>查询对应的数据，例如：<span lang="EN-US"><o:p></o:p></span></span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000">User user </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> User();</p>
<p>user.setName(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">bush</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);</p>
<p>user.setPhone(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">0970123456</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);</p>
<p>Session session </span><span style="color: #000000">=</span><span style="color: #000000"> sessionFactory.openSession();</p>
<p></span><span style="color: #008000">//</span><span style="color: #008000"> 以实例设定复合主键并加载对应的数据</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
user </span><span style="color: #000000">=</span><span style="color: #000000"> (User) session.load(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">, user);</p>
<p>System.out.println(user.getAge() </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">\t</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"></p>
<p>user.getName() </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">\t</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"></p>
<p>user.getPhone());</p>
<p>session.close();</p>
<p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">可以将主键的信息独立为一个类别，例如：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US">UserPK.java</span></strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">package</span><span style="color: #000000"> onlyfun.caterpillar;</p>
<p></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.io.Serializable;</p>
<p></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.commons.lang.builder.EqualsBuilder;</p>
<p></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.apache.commons.lang.builder.HashCodeBuilder;</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> UserPK </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Serializable {</p>
<p></span><span style="color: #0000ff">private</span><span style="color: #000000"> String name;</p>
<p></span><span style="color: #0000ff">private</span><span style="color: #000000"> String phone;</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> String getName() {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> name;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setName(String name) {</p>
<p></span><span style="color: #0000ff">this</span><span style="color: #000000">.name </span><span style="color: #000000">=</span><span style="color: #000000"> name;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> String getPhone() {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> phone;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setPhone(String phone) {</p>
<p></span><span style="color: #0000ff">this</span><span style="color: #000000">.phone </span><span style="color: #000000">=</span><span style="color: #000000"> phone;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">boolean</span><span style="color: #000000"> equals(Object obj) {</p>
<p></span><span style="color: #0000ff">if</span><span style="color: #000000">(obj </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #0000ff">this</span><span style="color: #000000">) {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;</p>
<p>}</p>
<p></span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">(obj </span><span style="color: #0000ff">instanceof</span><span style="color: #000000"> User)) {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;</p>
<p>}</p>
<p>UserPK pk </span><span style="color: #000000">=</span><span style="color: #000000"> (UserPK) obj;</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> EqualsBuilder()</p>
<p>.append(</span><span style="color: #0000ff">this</span><span style="color: #000000">.name, pk.getName())</p>
<p>.append(</span><span style="color: #0000ff">this</span><span style="color: #000000">.phone, pk.getPhone())</p>
<p>.isEquals();</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> hashCode() {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashCodeBuilder()</p>
<p>.append(</span><span style="color: #0000ff">this</span><span style="color: #000000">.name)</p>
<p>.append(</span><span style="color: #0000ff">this</span><span style="color: #000000">.phone)</p>
<p>.toHashCode();</p>
<p>}</p>
<p>}<br />
</span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">现在<span lang="EN-US">User</span>类别的主键信息被分离出来了，例如：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US">User.java</span></strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">package</span><span style="color: #000000"> onlyfun.caterpillar;</p>
<p></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.io.Serializable;</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> User </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Serializable {</p>
<p></span><span style="color: #0000ff">private</span><span style="color: #000000"> UserPK userPK; </span><span style="color: #008000">//</span><span style="color: #008000"> 主键</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Integer age;</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> User() {</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> UserPK getUserPK() {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> userPK;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setUserPK(UserPK userPK) {</p>
<p></span><span style="color: #0000ff">this</span><span style="color: #000000">.userPK </span><span style="color: #000000">=</span><span style="color: #000000"> userPK;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> Integer getAge() {</p>
<p></span><span style="color: #0000ff">return</span><span style="color: #000000"> age;</p>
<p>}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setAge(Integer age) {</p>
<p></span><span style="color: #0000ff">this</span><span style="color: #000000">.age </span><span style="color: #000000">=</span><span style="color: #000000"> age;</p>
<p>}</p>
<p>}<br />
</span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">在映像文件方面，需要指定主键类的信息，例如：<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US">User.hbm.xml</span></strong><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE hibernate-mapping</p>
<p>PUBLIC &#8221;-//Hibernate/Hibernate Mapping DTD 3.0//EN&#8221;</p>
<p>&#8220;http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">hibernate-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;onlyfun.caterpillar.User&#8221;</span><span style="color: #ff0000"> table</span><span style="color: #0000ff">=&#8221;user&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">composite-id </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;userPK&#8221;</span><span style="color: #ff0000"></p>
<p>class</span><span style="color: #0000ff">=&#8221;onlyfun.caterpillar.UserPK&#8221;</span><span style="color: #ff0000"></p>
<p>unsaved-value</span><span style="color: #0000ff">=&#8221;any&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key-property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000"></p>
<p>column</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000"></p>
<p>type</span><span style="color: #0000ff">=&#8221;java.lang.String&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key-property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;phone&#8221;</span><span style="color: #ff0000"></p>
<p>column</span><span style="color: #0000ff">=&#8221;phone&#8221;</span><span style="color: #ff0000"></p>
<p>type</span><span style="color: #0000ff">=&#8221;java.lang.String&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">composite-id</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;age&#8221;</span><span style="color: #ff0000"> column</span><span style="color: #0000ff">=&#8221;age&#8221;</span><span style="color: #ff0000"> type</span><span style="color: #0000ff">=&#8221;java.lang.Integer&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">hibernate-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">在查询数据时，必须指定主键信息，例如：<span lang="EN-US"><o:p></o:p></span></span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000">UserPK pk </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> UserPK();</p>
<p>pk.setName(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">bush</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);</p>
<p>pk.setPhone(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">0970123456</span><span style="color: #000000">&#8220;</span><span style="color: #000000">);</p>
<p>Session session </span><span style="color: #000000">=</span><span style="color: #000000"> sessionFactory.openSession();</p>
<p></span><span style="color: #008000">//</span><span style="color: #008000"> 以主键类实例设定复合主键并加载对应的数据</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
User user </span><span style="color: #000000">=</span><span style="color: #000000"> (User) session.load(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">, pk);</p>
<p>System.out.println(user.getAge() </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">\t</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"></p>
<p>user.getUserPK().getName() </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">&#8220;</span><span style="color: #000000">\t</span><span style="color: #000000">&#8220;</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"></p>
<p>user.getUserPK().getPhone());</p>
<p>session.close();</p>
<p></span></p>
<p>=================================================<br />
再参考robbin的一篇文章<br />
<a href="http://www.javaeye.com/topic/8287" target="_blank"><span style="font-weight: bold; font-size: 10pt; color: #006699">一个简单的复合主键的做关联类的例子</span></a></p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/11/07/hibernate%e7%9a%84load%e9%94%99%e8%af%af%ef%bc%8c%e4%bd%a0%e7%a2%b0%e5%88%b0%e8%bf%87%e8%bf%99%e6%a0%b7%e7%9a%84%e9%97%ae%e9%a2%98%e4%b9%88/' rel='bookmark' title='Permanent Link: Hibernate的load错误，你碰到过这样的问题么?'>Hibernate的load错误，你碰到过这样的问题么?</a></li><li><a href='http://www.foxlog.org/2006/02/24/middlegen%e6%80%aa%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84hbmxml%e6%96%87%e4%bb%b6%e7%9a%84%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%92%8c%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b1%bb%e5%9e%8b%e4%b8%8d/' rel='bookmark' title='Permanent Link: MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致'>MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致</a></li><li><a href='http://www.foxlog.org/2006/08/19/%e5%85%b3%e4%ba%8ejava%e4%b8%8ejavascript%e7%9a%84%e4%ba%92%e7%9b%b8%e8%ae%bf%e9%97%ae/' rel='bookmark' title='Permanent Link: 关于java与javaScript的互相访问'>关于java与javaScript的互相访问</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/11/09/zthibernate%e5%a4%8d%e5%90%88%e4%b8%bb%e9%94%ae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用通配符解决mappingResources的繁琐配置</title>
		<link>http://www.foxlog.org/2006/11/09/%e7%94%a8%e9%80%9a%e9%85%8d%e7%ac%a6%e8%a7%a3%e5%86%b3mappingresources%e7%9a%84%e7%b9%81%e7%90%90%e9%85%8d%e7%bd%ae/</link>
		<comments>http://www.foxlog.org/2006/11/09/%e7%94%a8%e9%80%9a%e9%85%8d%e7%ac%a6%e8%a7%a3%e5%86%b3mappingresources%e7%9a%84%e7%b9%81%e7%90%90%e9%85%8d%e7%bd%ae/#comments</comments>
		<pubDate>Thu, 09 Nov 2006 14:35:16 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/50</guid>
		<description><![CDATA[key words:mappingResources,通配符,mappingDirectoryLocations 平时写mapping的文件需要一个一个的放到配置文件里，比如    1. &#60;property name=&#8221;mappingResources&#8221;&#62; 2.             &#60;list&#62; 3.                 &#60;value&#62;net/foxlog/model/Classes.hbm.xml&#60;/value&#62; 4.                 &#60;value&#62;net/foxlog/model/Parent.hbm.xml&#60;/value&#62; 5.                 &#60;value&#62;net/foxlog/model/Child.hbm.xml&#60;/value&#62; 6.                 &#60;value&#62;net/foxlog/model/User.hbm.xml&#60;/value&#62; 7.             &#60;/list&#62; 8.         &#60;/property&#62;   可以用更一步到位的方法:    1. &#60;property name=&#8221;mappingDirectoryLocations&#8221;&#62; 2.             &#60;list&#62; 3.                 &#60;value&#62;classpath*:/org/springside/bookstore/commons/model/hbm&#60;/value&#62; 4.             &#60;/list&#62; 5.         &#60;/property&#62;   Related posts:[zt]关于commons loggingDAO模式演变Hibernate的Fetch


Related posts:<ol><li><a href='http://www.foxlog.org/2006/12/18/zt%e5%85%b3%e4%ba%8ecommons-logging/' rel='bookmark' title='Permanent Link: [zt]关于commons logging'>[zt]关于commons logging</a></li><li><a href='http://www.foxlog.org/2006/09/21/dao%e6%a8%a1%e5%bc%8f%e6%bc%94%e5%8f%98/' rel='bookmark' title='Permanent Link: DAO模式演变'>DAO模式演变</a></li><li><a href='http://www.foxlog.org/2006/12/01/hibernate%e7%9a%84fetch/' rel='bookmark' title='Permanent Link: Hibernate的Fetch'>Hibernate的Fetch</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="postText">key words:mappingResources,通配符,<span><span class="attribute-value">mappingDirectoryLocations</p>
<p>平时写mapping的文件需要一个一个的放到配置文件里，比如</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000">   1. </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;mappingResources&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
2.             </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
3.                 </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">net/foxlog/model/Classes.hbm.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
4.                 </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">net/foxlog/model/Parent.hbm.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
5.                 </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">net/foxlog/model/Child.hbm.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
6.                 </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">net/foxlog/model/User.hbm.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
7.             </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
8.         </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">  </span></p>
<p>可以用更一步到位的方法:</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000">   1. </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;mappingDirectoryLocations&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
2.             </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
3.                 </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">classpath*:/org/springside/bookstore/commons/model/hbm</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
4.             </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
5.         </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">  </span><br />
</span></span></p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/12/18/zt%e5%85%b3%e4%ba%8ecommons-logging/' rel='bookmark' title='Permanent Link: [zt]关于commons logging'>[zt]关于commons logging</a></li><li><a href='http://www.foxlog.org/2006/09/21/dao%e6%a8%a1%e5%bc%8f%e6%bc%94%e5%8f%98/' rel='bookmark' title='Permanent Link: DAO模式演变'>DAO模式演变</a></li><li><a href='http://www.foxlog.org/2006/12/01/hibernate%e7%9a%84fetch/' rel='bookmark' title='Permanent Link: Hibernate的Fetch'>Hibernate的Fetch</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/11/09/%e7%94%a8%e9%80%9a%e9%85%8d%e7%ac%a6%e8%a7%a3%e5%86%b3mappingresources%e7%9a%84%e7%b9%81%e7%90%90%e9%85%8d%e7%bd%ae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate的load错误，你碰到过这样的问题么?</title>
		<link>http://www.foxlog.org/2006/11/07/hibernate%e7%9a%84load%e9%94%99%e8%af%af%ef%bc%8c%e4%bd%a0%e7%a2%b0%e5%88%b0%e8%bf%87%e8%bf%99%e6%a0%b7%e7%9a%84%e9%97%ae%e9%a2%98%e4%b9%88/</link>
		<comments>http://www.foxlog.org/2006/11/07/hibernate%e7%9a%84load%e9%94%99%e8%af%af%ef%bc%8c%e4%bd%a0%e7%a2%b0%e5%88%b0%e8%bf%87%e8%bf%99%e6%a0%b7%e7%9a%84%e9%97%ae%e9%a2%98%e4%b9%88/#comments</comments>
		<pubDate>Tue, 07 Nov 2006 14:39:06 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/53</guid>
		<description><![CDATA[key words:hibernate,load,session.get,session.load() public class Parent implements Serializable { /** identifier field */ private Long id; /** persistent field */ private List childs; /** full constructor */ public Parent(Long id, List childs) { this.id = id; this.childs = childs; } /** default constructor */ public Parent() { } /** *            @hibernate.id *             generator-class=&#8221;assigned&#8221; *             type=&#8221;java.lang.Long&#8221; *             column=&#8221;id&#8221; * */ public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } /** *            @hibernate.set *             lazy=&#8221;true&#8221; *             inverse=&#8221;true&#8221; *             cascade=&#8221;none&#8221; *            @hibernate.collection-key *             column=&#8221;parent_id&#8221; *            @hibernate.collection-one-to-many *             class=&#8221;net.foxlog.model.Child&#8221; * */ public List getChilds() { return this.childs; } public void setChilds(List childs) { this.childs = childs; } public String toString() { return new ToStringBuilder(this) .append(&#8220;id&#8220;, getId()) .toString(); } public boolean equals(Object other) { if ( !(other instanceof Parent) ) return false; Parent castOther = (Parent) other; return new EqualsBuilder() .append(this.getId(), castOther.getId()) [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/12/01/hibernate%e7%9a%84fetch/' rel='bookmark' title='Permanent Link: Hibernate的Fetch'>Hibernate的Fetch</a></li><li><a href='http://www.foxlog.org/2006/11/09/zthibernate%e5%a4%8d%e5%90%88%e4%b8%bb%e9%94%ae/' rel='bookmark' title='Permanent Link: [zt]hibernate复合主键'>[zt]hibernate复合主键</a></li><li><a href='http://www.foxlog.org/2006/09/28/zt%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e4%b9%8bvisitor-%e8%ae%bf%e9%97%ae%e8%80%85%e6%a8%a1%e5%bc%8f/' rel='bookmark' title='Permanent Link: [zt]设计模式之Visitor 访问者模式'>[zt]设计模式之Visitor 访问者模式</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>key words:hibernate,load,session.get,session.load()</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Parent </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Serializable {</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"> identifier field </span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">private</span><span style="color: #000000"> Long id;</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"> persistent field </span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">private</span><span style="color: #000000"> List childs;</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"> full constructor </span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Parent(Long id, List childs) {<br />
</span><span style="color: #0000ff">this</span><span style="color: #000000">.id </span><span style="color: #000000">=</span><span style="color: #000000"> id;<br />
</span><span style="color: #0000ff">this</span><span style="color: #000000">.childs </span><span style="color: #000000">=</span><span style="color: #000000"> childs;<br />
}</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"> default constructor </span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Parent() {<br />
}</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"><br />
*            @hibernate.id<br />
*             generator-class=&#8221;assigned&#8221;<br />
*             type=&#8221;java.lang.Long&#8221;<br />
*             column=&#8221;id&#8221;<br />
*<br />
</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> Long getId() {<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">this</span><span style="color: #000000">.id;<br />
}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setId(Long id) {<br />
</span><span style="color: #0000ff">this</span><span style="color: #000000">.id </span><span style="color: #000000">=</span><span style="color: #000000"> id;<br />
}</p>
<p></span><span style="color: #008000">/**</span><span style="color: #008000"><br />
*            @hibernate.set<br />
*             lazy=&#8221;true&#8221;<br />
*             inverse=&#8221;true&#8221;<br />
*             cascade=&#8221;none&#8221;<br />
*            @hibernate.collection-key<br />
*             column=&#8221;parent_id&#8221;<br />
*            @hibernate.collection-one-to-many<br />
*             class=&#8221;net.foxlog.model.Child&#8221;<br />
*<br />
</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> List getChilds() {<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">this</span><span style="color: #000000">.childs;<br />
}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> setChilds(List childs) {<br />
</span><span style="color: #0000ff">this</span><span style="color: #000000">.childs </span><span style="color: #000000">=</span><span style="color: #000000"> childs;<br />
}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> String toString() {<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ToStringBuilder(</span><span style="color: #0000ff">this</span><span style="color: #000000">)<br />
.append(</span><span style="color: #000000">&#8220;</span><span style="color: #000000">id</span><span style="color: #000000">&#8220;</span><span style="color: #000000">, getId())<br />
.toString();<br />
}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">boolean</span><span style="color: #000000"> equals(Object other) {<br />
</span><span style="color: #0000ff">if</span><span style="color: #000000"> ( </span><span style="color: #000000">!</span><span style="color: #000000">(other </span><span style="color: #0000ff">instanceof</span><span style="color: #000000"> Parent) ) </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
Parent castOther </span><span style="color: #000000">=</span><span style="color: #000000"> (Parent) other;<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> EqualsBuilder()<br />
.append(</span><span style="color: #0000ff">this</span><span style="color: #000000">.getId(), castOther.getId())<br />
.isEquals();<br />
}</p>
<p></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> hashCode() {<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashCodeBuilder()<br />
.append(getId())<br />
.toHashCode();<br />
}</p>
<p>}<br />
</span></p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000">Parent parent </span><span style="color: #000000">=</span><span style="color: #000000"> (Parent)session.load(Parent.</span><span style="color: #0000ff">class</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000">  Integer(</span><span style="color: #000000">7</span><span style="color: #000000">));</span><br />
运行提示出错，&#8221;can&#8217;t get  Entity..&#8221;</p>
<p>知道是什么低级错误么?  其实很弱智的东西，但是不注意还就会出现，呵呵，答案如下:</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><img src="/Images/OutliningIndicators/ContractedBlock.gif" id="Code_Closed_Image_192733" style="display: none" onclick="this.style.display='none'; Code_Closed_Text_192733.style.display='none'; Code_Open_Image_192733.style.display='inline'; Code_Open_Text_192733.style.display='inline';" align="top" height="16" width="11" /><img src="/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Code_Open_Image_192733" style="display: inline" onclick="this.style.display='none'; Code_Open_Text_192733.style.display='none'; Code_Closed_Image_192733.style.display='inline'; Code_Closed_Text_192733.style.display='inline';" align="top" height="16" width="11" /><span id="Code_Closed_Text_192733" style="border: 1px solid #808080; display: none; background-color: #ffffff"></span><span id="Code_Open_Text_192733" style="display: inline"><br />
<!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000">Parent parent </span><span style="color: #000000">=</span><span style="color: #000000"> (Parent)session.load(Parent.</span><span style="color: #0000ff">class</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000"> Long(</span><span style="color: #000000">7</span><span style="color: #000000">))</span></span></p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/12/01/hibernate%e7%9a%84fetch/' rel='bookmark' title='Permanent Link: Hibernate的Fetch'>Hibernate的Fetch</a></li><li><a href='http://www.foxlog.org/2006/11/09/zthibernate%e5%a4%8d%e5%90%88%e4%b8%bb%e9%94%ae/' rel='bookmark' title='Permanent Link: [zt]hibernate复合主键'>[zt]hibernate复合主键</a></li><li><a href='http://www.foxlog.org/2006/09/28/zt%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e4%b9%8bvisitor-%e8%ae%bf%e9%97%ae%e8%80%85%e6%a8%a1%e5%bc%8f/' rel='bookmark' title='Permanent Link: [zt]设计模式之Visitor 访问者模式'>[zt]设计模式之Visitor 访问者模式</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/11/07/hibernate%e7%9a%84load%e9%94%99%e8%af%af%ef%bc%8c%e4%bd%a0%e7%a2%b0%e5%88%b0%e8%bf%87%e8%bf%99%e6%a0%b7%e7%9a%84%e9%97%ae%e9%a2%98%e4%b9%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring的listener启动异常</title>
		<link>http://www.foxlog.org/2006/10/23/spring%e7%9a%84listener%e5%90%af%e5%8a%a8%e5%bc%82%e5%b8%b8/</link>
		<comments>http://www.foxlog.org/2006/10/23/spring%e7%9a%84listener%e5%90%af%e5%8a%a8%e5%bc%82%e5%b8%b8/#comments</comments>
		<pubDate>Mon, 23 Oct 2006 14:45:44 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/60</guid>
		<description><![CDATA[碰到一个奇怪的问题,Spring在启动的时候得listener提示启动失败，打开log也没有任何信息，最后把log4j打开 : &#60;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243; ?&#62; &#60;!DOCTYPE log4j:configuration SYSTEM &#8221;log4j.dtd&#8221;&#62; &#60;log4j:configuration xmlns:log4j=&#8221;http://jakarta.apache.org/log4j/&#8221;&#62; &#60;appender name=&#8221;CONSOLE&#8221; class=&#8221;org.apache.log4j.ConsoleAppender&#8221;&#62; &#60;layout class=&#8221;org.apache.log4j.PatternLayout&#8221;&#62; &#60;param name=&#8221;ConversionPattern&#8221; value=&#8221;%p - %C{1}.%M(%L) &#124; %m%n&#8221;/&#62; &#60;/layout&#62; &#60;/appender&#62; &#60;logger name=&#8221;org.apache&#8221;&#62; &#60;level value=&#8221;WARN&#8221;/&#62; &#60;/logger&#62; &#60;logger name=&#8221;net.sf.hibernate&#8221;&#62; &#60;level value=&#8221;WARN&#8221;/&#62; &#60;/logger&#62; &#60;logger name=&#8221;org.springframework&#8221;&#62; &#60;level value=&#8221;DEBUG&#8221;/&#62; &#60;/logger&#62; &#60;!&#8211; &#60;logger name=&#8221;org.appfuse&#8221;&#62; &#60;level value=&#8221;DEBUG&#8221;/&#62; &#60;/logger&#62; &#8211;&#62; &#60;root&#62; &#60;level value=&#8221;DEBUG&#8221;/&#62; &#60;appender-ref ref=&#8221;CONSOLE&#8221;/&#62; &#60;/root&#62; &#60;/log4j:configuration&#62; 提示说applicationContext.xml的编码有问题，最后改为UTF-8解决 Related posts:log4j配置[zt]关于commons logging


Related posts:<ol><li><a href='http://www.foxlog.org/2006/02/16/log4j%e9%85%8d%e7%bd%ae/' rel='bookmark' title='Permanent Link: log4j配置'>log4j配置</a></li><li><a href='http://www.foxlog.org/2006/12/18/zt%e5%85%b3%e4%ba%8ecommons-logging/' rel='bookmark' title='Permanent Link: [zt]关于commons logging'>[zt]关于commons logging</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="postText">碰到一个奇怪的问题,Spring在启动的时候得listener提示启动失败，打开log也没有任何信息，最后把log4j打开  :</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243; </span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE log4j:configuration SYSTEM &#8221;log4j.dtd&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">log4j:configuration </span><span style="color: #ff0000">xmlns:log4j</span><span style="color: #0000ff">=&#8221;http://jakarta.apache.org/log4j/&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">appender </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;CONSOLE&#8221;</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">=&#8221;org.apache.log4j.ConsoleAppender&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">layout </span><span style="color: #ff0000">class</span><span style="color: #0000ff">=&#8221;org.apache.log4j.PatternLayout&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;ConversionPattern&#8221;</span><span style="color: #ff0000"><br />
value</span><span style="color: #0000ff">=&#8221;%p - %C{1}.%M(%L) | %m%n&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">layout</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">appender</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">logger </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;org.apache&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">level </span><span style="color: #ff0000">value</span><span style="color: #0000ff">=&#8221;WARN&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">logger</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">logger </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;net.sf.hibernate&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">level </span><span style="color: #ff0000">value</span><span style="color: #0000ff">=&#8221;WARN&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">logger</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">logger </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;org.springframework&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">level </span><span style="color: #ff0000">value</span><span style="color: #0000ff">=&#8221;DEBUG&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">logger</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"><br />
&lt;logger name=&#8221;org.appfuse&#8221;&gt;<br />
&lt;level value=&#8221;DEBUG&#8221;/&gt;<br />
&lt;/logger&gt;<br />
</span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">root</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">level </span><span style="color: #ff0000">value</span><span style="color: #0000ff">=&#8221;DEBUG&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">appender-ref </span><span style="color: #ff0000">ref</span><span style="color: #0000ff">=&#8221;CONSOLE&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">root</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">log4j:configuration</span><span style="color: #0000ff">&gt;</span><br />
提示说applicationContext.xml的编码有问题，最后改为UTF-8解决</p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/02/16/log4j%e9%85%8d%e7%bd%ae/' rel='bookmark' title='Permanent Link: log4j配置'>log4j配置</a></li><li><a href='http://www.foxlog.org/2006/12/18/zt%e5%85%b3%e4%ba%8ecommons-logging/' rel='bookmark' title='Permanent Link: [zt]关于commons logging'>[zt]关于commons logging</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/10/23/spring%e7%9a%84listener%e5%90%af%e5%8a%a8%e5%bc%82%e5%b8%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[zt]hibernate二级缓存攻略</title>
		<link>http://www.foxlog.org/2006/10/23/zthibernate%e4%ba%8c%e7%ba%a7%e7%bc%93%e5%ad%98%e6%94%bb%e7%95%a5/</link>
		<comments>http://www.foxlog.org/2006/10/23/zthibernate%e4%ba%8c%e7%ba%a7%e7%bc%93%e5%ad%98%e6%94%bb%e7%95%a5/#comments</comments>
		<pubDate>Mon, 23 Oct 2006 14:44:55 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/59</guid>
		<description><![CDATA[转自 javaEye 很多人对二级缓存都不太了解，或者是有错误的认识，我一直想写一篇文章介绍一下hibernate的二级缓存的，今天终于忍不住了。 我的经验主要来自hibernate2.1版本，基本原理和3.0、3.1是一样的，请原谅我的顽固不化。 hibernate的session提供了一级缓存，每个session，对同一个id进行两次load，不会发送两条sql给数据库，但是session关闭的时候，一级缓存就失效了。 二级缓存是SessionFactory级别的全局缓存，它底下可以使用不同的缓存类库，比如ehcache、oscache等，需要设置hibernate.cache.provider_class，我们这里用ehcache，在2.1中就是 hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider 如果使用查询缓存，加上 hibernate.cache.use_query_cache=true 缓存可以简单的看成一个Map，通过key在缓存里面找value。 Class的缓存 对于一条记录，也就是一个PO来说，是根据ID来找的，缓存的key就是ID，value是POJO。无论list，load还是 iterate，只要读出一个对象，都会填充缓存。但是list不会使用缓存，而iterate会先取数据库select id出来，然后一个id一个id的load，如果在缓存里面有，就从缓存取，没有的话就去数据库load。假设是读写缓存，需要设置： &#60;cache usage=&#8221;read-write&#8221;/&#62; 如果你使用的二级缓存实现是ehcache的话，需要配置ehcache.xml &#60;cache name=&#8221;com.xxx.pojo.Foo&#8221; maxElementsInMemory=&#8221;500&#8243; eternal=&#8221;false&#8221; timeToLiveSeconds=&#8221;7200&#8243; timeToIdleSeconds=&#8221;3600&#8243; overflowToDisk=&#8221;true&#8221; /&#62; 其中eternal表示缓存是不是永远不超时，timeToLiveSeconds是缓存中每个元素（这里也就是一个POJO）的超时时间，如果eternal=&#8221;false&#8221;，超过指定的时间，这个元素就被移走了。timeToIdleSeconds是发呆时间，是可选的。当往缓存里面put 的元素超过500个时，如果overflowToDisk=&#8221;true&#8221;，就会把缓存中的部分数据保存在硬盘上的临时文件里面。 每个需要缓存的class都要这样配置。如果你没有配置，hibernate会在启动的时候警告你，然后使用defaultCache的配置，这样多个class会共享一个配置。 当某个ID通过hibernate修改时，hibernate会知道，于是移除缓存。 这样大家可能会想，同样的查询条件，第一次先list，第二次再iterate，就可以使用到缓存了。实际上这是很难的，因为你无法判断什么时候是第一次，而且每次查询的条件通常是不一样的，假如数据库里面有100条记录，id从1到100，第一次list的时候出了前50个id，第二次 iterate的时候却查询到30至70号id，那么30-50是从缓存里面取的，51到70是从数据库取的，共发送1+20条sql。所以我一直认为 iterate没有什么用，总是会有1+N的问题。 （题外话：有说法说大型查询用list会把整个结果集装入内存，很慢，而iterate只select id比较好，但是大型查询总是要分页查的，谁也不会真的把整个结果集装进来，假如一页20条的话，iterate共需要执行21条语句，list虽然选择若干字段，比iterate第一条select id语句慢一些，但只有一条语句，不装入整个结果集hibernate还会根据数据库方言做优化，比如使用mysql的limit，整体看来应该还是 list快。） 如果想要对list或者iterate查询的结果缓存，就要用到查询缓存了 查询缓存 首先需要配置hibernate.cache.use_query_cache=true 如果用ehcache，配置ehcache.xml，注意hibernate3.0以后不是net.sf的包名了 &#60;cache name=&#8221;net.sf.hibernate.cache.StandardQueryCache&#8221; maxElementsInMemory=&#8221;50&#8243; eternal=&#8221;false&#8221; timeToIdleSeconds=&#8221;3600&#8243; timeToLiveSeconds=&#8221;7200&#8243; overflowToDisk=&#8221;true&#8221;/&#62; &#60;cache name=&#8221;net.sf.hibernate.cache.UpdateTimestampsCache&#8221; maxElementsInMemory=&#8221;5000&#8243; eternal=&#8221;true&#8221; overflowToDisk=&#8221;true&#8221;/&#62; 然后 query.setCacheable(true);//激活查询缓存 query.setCacheRegion(&#8220;myCacheRegion&#8221;);//指定要使用的cacheRegion，可选 [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/09/18/zt%e5%85%b3%e4%ba%8ecookie%e8%b7%a8%e5%9f%9f%e6%93%8d%e4%bd%9c%e9%81%87%e5%88%b0%e7%9a%84%e9%97%ae%e9%a2%98%e5%8f%8a%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95/' rel='bookmark' title='Permanent Link: [zt]关于Cookie跨域操作遇到的问题及解决方法'>[zt]关于Cookie跨域操作遇到的问题及解决方法</a></li><li><a href='http://www.foxlog.org/2006/12/07/middlegen%e4%b8%ad%e9%85%8d%e7%bd%aehibernate%e7%9a%84many-to-many%e5%b1%9e%e6%80%a7/' rel='bookmark' title='Permanent Link: MiddleGen中配置hibernate的many to many属性'>MiddleGen中配置hibernate的many to many属性</a></li><li><a href='http://www.foxlog.org/2006/02/16/log4j%e9%85%8d%e7%bd%ae/' rel='bookmark' title='Permanent Link: log4j配置'>log4j配置</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="postText">转自 <a href="http://www.javaeye.com/topic/18904">javaEye</a><br />
很多人对二级缓存都不太了解，或者是有错误的认识，我一直想写一篇文章介绍一下hibernate的二级缓存的，今天终于忍不住了。<br />
我的经验主要来自hibernate2.1版本，基本原理和3.0、3.1是一样的，请原谅我的顽固不化。</p>
<p>hibernate的session提供了一级缓存，每个session，对同一个id进行两次load，不会发送两条sql给数据库，但是session关闭的时候，一级缓存就失效了。</p>
<p>二级缓存是SessionFactory级别的全局缓存，它底下可以使用不同的缓存类库，比如ehcache、oscache等，需要设置hibernate.cache.provider_class，我们这里用ehcache，在2.1中就是<br />
hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider<br />
如果使用查询缓存，加上<br />
hibernate.cache.use_query_cache=true</p>
<p>缓存可以简单的看成一个Map，通过key在缓存里面找value。</p>
<p><strong>Class的缓存</strong><br />
对于一条记录，也就是一个PO来说，是根据ID来找的，缓存的key就是ID，value是POJO。无论list，load还是  iterate，只要读出一个对象，都会填充缓存。但是list不会使用缓存，而iterate会先取数据库select  id出来，然后一个id一个id的load，如果在缓存里面有，就从缓存取，没有的话就去数据库load。假设是读写缓存，需要设置：<br />
&lt;cache  usage=&#8221;read-write&#8221;/&gt;<br />
如果你使用的二级缓存实现是ehcache的话，需要配置ehcache.xml<br />
&lt;cache  name=&#8221;com.xxx.pojo.Foo&#8221; maxElementsInMemory=&#8221;500&#8243; eternal=&#8221;false&#8221;  timeToLiveSeconds=&#8221;7200&#8243; timeToIdleSeconds=&#8221;3600&#8243; overflowToDisk=&#8221;true&#8221; /&gt;<br />
其中eternal表示缓存是不是永远不超时，timeToLiveSeconds是缓存中每个元素（这里也就是一个POJO）的超时时间，如果eternal=&#8221;false&#8221;，超过指定的时间，这个元素就被移走了。timeToIdleSeconds是发呆时间，是可选的。当往缓存里面put  的元素超过500个时，如果overflowToDisk=&#8221;true&#8221;，就会把缓存中的部分数据保存在硬盘上的临时文件里面。<br />
每个需要缓存的class都要这样配置。如果你没有配置，hibernate会在启动的时候警告你，然后使用defaultCache的配置，这样多个class会共享一个配置。<br />
当某个ID通过hibernate修改时，hibernate会知道，于是移除缓存。<br />
这样大家可能会想，同样的查询条件，第一次先list，第二次再iterate，就可以使用到缓存了。实际上这是很难的，因为你无法判断什么时候是第一次，而且每次查询的条件通常是不一样的，假如数据库里面有100条记录，id从1到100，第一次list的时候出了前50个id，第二次  iterate的时候却查询到30至70号id，那么30-50是从缓存里面取的，51到70是从数据库取的，共发送1+20条sql。所以我一直认为  iterate没有什么用，总是会有1+N的问题。<br />
（题外话：有说法说大型查询用list会把整个结果集装入内存，很慢，而iterate只select  id比较好，但是大型查询总是要分页查的，谁也不会真的把整个结果集装进来，假如一页20条的话，iterate共需要执行21条语句，list虽然选择若干字段，比iterate第一条select  id语句慢一些，但只有一条语句，不装入整个结果集hibernate还会根据数据库方言做优化，比如使用mysql的limit，整体看来应该还是 list快。）<br />
如果想要对list或者iterate查询的结果缓存，就要用到查询缓存了</p>
<p><strong>查询缓存</strong><br />
首先需要配置hibernate.cache.use_query_cache=true<br />
如果用ehcache，配置ehcache.xml，注意hibernate3.0以后不是net.sf的包名了<br />
&lt;cache  name=&#8221;net.sf.hibernate.cache.StandardQueryCache&#8221;<br />
maxElementsInMemory=&#8221;50&#8243;  eternal=&#8221;false&#8221; timeToIdleSeconds=&#8221;3600&#8243;<br />
timeToLiveSeconds=&#8221;7200&#8243;  overflowToDisk=&#8221;true&#8221;/&gt;<br />
&lt;cache  name=&#8221;net.sf.hibernate.cache.UpdateTimestampsCache&#8221;<br />
maxElementsInMemory=&#8221;5000&#8243; eternal=&#8221;true&#8221; overflowToDisk=&#8221;true&#8221;/&gt;<br />
然后<br />
query.setCacheable(true);//激活查询缓存<br />
query.setCacheRegion(&#8220;myCacheRegion&#8221;);//指定要使用的cacheRegion，可选<br />
第二行指定要使用的cacheRegion是myCacheRegion，即你可以给每个查询缓存做一个单独的配置，使用setCacheRegion来做这个指定，需要在ehcache.xml里面配置它：<br />
&lt;cache name=&#8221;myCacheRegion&#8221; maxElementsInMemory=&#8221;10&#8243; eternal=&#8221;false&#8221;  timeToIdleSeconds=&#8221;3600&#8243; timeToLiveSeconds=&#8221;7200&#8243; overflowToDisk=&#8221;true&#8221; /&gt;<br />
如果省略第二行，不设置cacheRegion的话，那么会使用上面提到的标准查询缓存的配置，也就是net.sf.hibernate.cache.StandardQueryCache</p>
<p>对于查询缓存来说，缓存的key是根据hql生成的sql，再加上参数，分页等信息（可以通过日志输出看到，不过它的输出不是很可读，最好改一下它的代码）。<br />
比如hql：<br />
from Cat c where c.name like ?<br />
生成大致如下的sql：<br />
select * from  cat c where c.name like ?<br />
参数是&#8221;tiger%&#8221;，那么查询缓存的key*大约*是这样的字符串（我是凭记忆写的，并不精确，不过看了也该明白了）：<br />
select * from  cat c where c.name like ? , parameter:tiger%<br />
这样，保证了同样的查询、同样的参数等条件下具有一样的key。<br />
现在说说缓存的value，如果是list方式的话，value在这里并不是整个结果集，而是查询出来的这一串ID。也就是说，不管是list方法还是iterate方法，第一次查询的时候，它们的查询方式很它们平时的方式是一样的，list执行一条sql，iterate执行1+N条，多出来的行为是它们填充了缓存。但是到同样条件第二次查询的时候，就都和iterate的行为一样了，根据缓存的key去缓存里面查到了value，value是一串id，然后在到class的缓存里面去一个一个的load出来。这样做是为了节约内存。<br />
可以看出来，查询缓存需要打开相关类的class缓存。list和iterate方法第一次执行的时候，都是既填充查询缓存又填充class缓存的。<br />
<strong>这里还有一个很容易被忽视的重要问题，即打开查询缓存以后，即使是list方法也可能遇到1+N的问题！</strong>相同条件第一次list的时候，因为查询缓存中找不到，不管class缓存是否存在数据，总是发送一条sql语句到数据库获取全部数据，然后填充查询缓存和class缓存。但是第二次执行的时候，问题就来了，如果你的class缓存的超时时间比较短，现在class缓存都超时了，但是查询缓存还在，那么list方法在获取id串以后，将会一个一个去数据库load！因此，class缓存的超时时间一定不能短于查询缓存设置的超时时间！如果还设置了发呆时间的话，保证class缓存的发呆时间也大于查询的缓存的生存时间。这里还有其他情况，比如class缓存被程序强制evict了，这种情况就请自己注意了。</p>
<p>另外，如果hql查询包含select字句，那么查询缓存里面的value就是整个结果集了。</p>
<p>当hibernate更新数据库的时候，它怎么知道更新哪些查询缓存呢？<br />
hibernate在一个地方维护每个表的最后更新时间，其实也就是放在上面net.sf.hibernate.cache.UpdateTimestampsCache所指定的缓存配置里面。<br />
当通过hibernate更新的时候，hibernate会知道这次更新影响了哪些表。然后它更新这些表的最后更新时间。每个缓存都有一个生成时间和这个缓存所查询的表，当hibernate查询一个缓存是否存在的时候，如果缓存存在，它还要取出缓存的生成时间和这个缓存所查询的表，然后去查找这些表的最后更新时间，如果有一个表在生成时间后更新过了，那么这个缓存是无效的。<br />
可以看出，只要更新过一个表，那么凡是涉及到这个表的查询缓存就失效了，因此查询缓存的命中率可能会比较低。</p>
<p><strong>Collection缓存</strong><br />
需要在hbm的collection里面设置<br />
&lt;cache  usage=&#8221;read-write&#8221;/&gt;<br />
假如class是Cat，collection叫children，那么ehcache里面配置<br />
&lt;cache name=&#8221;com.xxx.pojo.Cat.children&#8221;<br />
maxElementsInMemory=&#8221;20&#8243;  eternal=&#8221;false&#8221; timeToIdleSeconds=&#8221;3600&#8243; timeToLiveSeconds=&#8221;7200&#8243;<br />
overflowToDisk=&#8221;true&#8221; /&gt;<br />
Collection的缓存和前面查询缓存的list一样，也是只保持一串id，但它不会因为这个表更新过就失效，一个collection缓存仅在这个collection里面的元素有增删时才失效。<br />
这样有一个问题，如果你的collection是根据某个字段排序的，当其中一个元素更新了该字段时，导致顺序改变时，collection缓存里面的顺序没有做更新。</p>
<p><strong>缓存策略</strong><br />
只读缓存（read-only）：没有什么好说的<br />
读/写缓存（read-write）:程序可能要的更新数据<br />
不严格的读/写缓存（nonstrict-read-write）：需要更新数据，但是两个事务更新同一条记录的可能性很小，性能比读写缓存好<br />
事务缓存（transactional）：缓存支持事务，发生异常的时候，缓存也能够回滚，只支持jta环境，这个我没有怎么研究过</p>
<p>读写缓存和不严格读写缓存在实现上的区别在于，读写缓存更新缓存的时候会把缓存里面的数据换成一个锁，其他事务如果去取相应的缓存数据，发现被锁住了，然后就直接取数据库查询。<br />
在hibernate2.1的ehcache实现中，如果锁住部分缓存的事务发生了异常，那么缓存会一直被锁住，直到60秒后超时。<br />
不严格读写缓存不锁定缓存中的数据。</p>
<p><strong>使用二级缓存的前置条件</strong><br />
你的hibernate程序对数据库有独占的写访问权，其他的进程更新了数据库，hibernate是不可能知道的。你操作数据库必需直接通过  hibernate，如果你调用存储过程，或者自己使用jdbc更新数据库，hibernate也是不知道的。hibernate3.0的大批量更新和删除是不更新二级缓存的，但是据说3.1已经解决了这个问题。<br />
这个限制相当的棘手，有时候hibernate做批量更新、删除很慢，但是你却不能自己写jdbc来优化，很郁闷吧。<br />
SessionFactory也提供了移除缓存的方法，你一定要自己写一些JDBC的话，可以调用这些方法移除缓存，这些方法是：<br />
void  evict(Class persistentClass)<br />
Evict all entries from the second-level cache.<br />
void evict(Class persistentClass, Serializable id)<br />
Evict an entry from  the second-level cache.<br />
void evictCollection(String roleName)<br />
Evict all  entries from the second-level cache.<br />
void evictCollection(String roleName,  Serializable id)<br />
Evict an entry from the second-level cache.<br />
void  evictQueries()<br />
Evict any query result sets cached in the default query cache  region.<br />
void evictQueries(String cacheRegion)<br />
Evict any query result  sets cached in the named query cache region.<br />
不过我不建议这样做，因为这样很难维护。比如你现在用JDBC批量更新了某个表，有3个查询缓存会用到这个表，用evictQueries (String  cacheRegion)移除了3个查询缓存，然后用evict(Class  persistentClass)移除了class缓存，看上去好像完整了。不过哪天你添加了一个相关查询缓存，可能会忘记更新这里的移除代码。如果你的  jdbc代码到处都是，在你添加一个查询缓存的时候，还知道其他什么地方也要做相应的改动吗？</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p><strong>总结：</strong><br />
不要想当然的以为缓存一定能提高性能，仅仅在你能够驾驭它并且条件合适的情况下才是这样的。hibernate的二级缓存限制还是比较多的，不方便用jdbc可能会大大的降低更新性能。在不了解原理的情况下乱用，可能会有1+N的问题。不当的使用还可能导致读出脏数据。<br />
如果受不了hibernate的诸多限制，那么还是自己在应用程序的层面上做缓存吧。<br />
在越高的层面上做缓存，效果就会越好。就好像尽管磁盘有缓存，数据库还是要实现自己的缓存，尽管数据库有缓存，咱们的应用程序还是要做缓存。因为底层的缓存它并不知道高层要用这些数据干什么，只能做的比较通用，而高层可以有针对性的实现缓存，所以在更高的级别上做缓存，效果也要好些吧。</p>
<p>终于写完了，好累……</p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/09/18/zt%e5%85%b3%e4%ba%8ecookie%e8%b7%a8%e5%9f%9f%e6%93%8d%e4%bd%9c%e9%81%87%e5%88%b0%e7%9a%84%e9%97%ae%e9%a2%98%e5%8f%8a%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95/' rel='bookmark' title='Permanent Link: [zt]关于Cookie跨域操作遇到的问题及解决方法'>[zt]关于Cookie跨域操作遇到的问题及解决方法</a></li><li><a href='http://www.foxlog.org/2006/12/07/middlegen%e4%b8%ad%e9%85%8d%e7%bd%aehibernate%e7%9a%84many-to-many%e5%b1%9e%e6%80%a7/' rel='bookmark' title='Permanent Link: MiddleGen中配置hibernate的many to many属性'>MiddleGen中配置hibernate的many to many属性</a></li><li><a href='http://www.foxlog.org/2006/02/16/log4j%e9%85%8d%e7%bd%ae/' rel='bookmark' title='Permanent Link: log4j配置'>log4j配置</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/10/23/zthibernate%e4%ba%8c%e7%ba%a7%e7%bc%93%e5%ad%98%e6%94%bb%e7%95%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在jsp中获得 Spring的上下文</title>
		<link>http://www.foxlog.org/2006/10/23/%e5%9c%a8jsp%e4%b8%ad%e8%8e%b7%e5%be%97-spring%e7%9a%84%e4%b8%8a%e4%b8%8b%e6%96%87/</link>
		<comments>http://www.foxlog.org/2006/10/23/%e5%9c%a8jsp%e4%b8%ad%e8%8e%b7%e5%be%97-spring%e7%9a%84%e4%b8%8a%e4%b8%8b%e6%96%87/#comments</comments>
		<pubDate>Mon, 23 Oct 2006 14:42:24 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/56</guid>
		<description><![CDATA[在Struts或别的框架中集成Spring的时候，Spring向我们提供了获得context的方法 getApplicationContext,那在jsp中如何获得呢? ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext (this.getServletConfig().getServletContext()); 建议在项目中开发的时候提供一个singleton对外公布统一的applicationContext,毕竟不是每个人都一定能获得web环境或servlet. Related posts:Spring中的service之间如何调用


Related posts:<ol><li><a href='http://www.foxlog.org/2007/05/14/spring%e4%b8%ad%e7%9a%84service%e4%b9%8b%e9%97%b4%e5%a6%82%e4%bd%95%e8%b0%83%e7%94%a8/' rel='bookmark' title='Permanent Link: Spring中的service之间如何调用'>Spring中的service之间如何调用</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="postText">在Struts或别的框架中集成Spring的时候，Spring向我们提供了获得context的方法  getApplicationContext,那在jsp中如何获得呢?</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #000000">ApplicationContext ctx </span><span style="color: #000000">=</span><span style="color: #000000"> WebApplicationContextUtils.getRequiredWebApplicationContext<br />
(</span><span style="color: #0000ff">this</span><span style="color: #000000">.getServletConfig().getServletContext());</span><br />
建议在项目中开发的时候提供一个singleton对外公布统一的applicationContext,毕竟不是每个人都一定能获得web环境或servlet.</p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2007/05/14/spring%e4%b8%ad%e7%9a%84service%e4%b9%8b%e9%97%b4%e5%a6%82%e4%bd%95%e8%b0%83%e7%94%a8/' rel='bookmark' title='Permanent Link: Spring中的service之间如何调用'>Spring中的service之间如何调用</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/10/23/%e5%9c%a8jsp%e4%b8%ad%e8%8e%b7%e5%be%97-spring%e7%9a%84%e4%b8%8a%e4%b8%8b%e6%96%87/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[zt]JdbcTemplate使用指南</title>
		<link>http://www.foxlog.org/2006/10/16/ztjdbctemplate%e4%bd%bf%e7%94%a8%e6%8c%87%e5%8d%97/</link>
		<comments>http://www.foxlog.org/2006/10/16/ztjdbctemplate%e4%bd%bf%e7%94%a8%e6%8c%87%e5%8d%97/#comments</comments>
		<pubDate>Mon, 16 Oct 2006 14:48:12 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/62</guid>
		<description><![CDATA[key words:Spring,jdbcTemplate 注：因为Spring是以后的一个趋势，Hibernate的集成已经很好了，对于单独的jdbc的操作用DBUtils感觉已经没有什么必要，不如全部转到Spring的jdbc支持，从成本来考虑似乎更合适。 本文转自 这里 前言： 本文指在介绍 Spring 框架中的 JdbcTemplate 类的使用方法，涉及基本的 Spring 反转控制的使用方法和 JDBC 的基本概念。目标是使读者能够对 JdbcTemplate 快速地掌握和使用。          准备： 1. Spring 的基本概念        Spring 框架核心的思想就是建立一个 Java 对象的大工厂，用户只要给工厂一个指令，工厂就能将用户需要的对象根据配置文件组装好返还给用户。用户需要做的许多工作则可以写成简单的配置文件。        2. 丑陋的 JDBC 代码 Connection con= null; PreparedStatement pStmt=null; ResultSet rs = null; try{                       con = ods.getConnection();             String sql = &#8220;select * from admin&#8221;; [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/10/09/%e5%85%b3%e4%ba%8efacade%e7%9a%84%e5%ba%94%e7%94%a8/' rel='bookmark' title='Permanent Link: 关于Facade的应用'>关于Facade的应用</a></li><li><a href='http://www.foxlog.org/2007/03/30/ztspring%e6%95%b0%e6%8d%ae%e8%ae%bf%e9%97%ae%e5%af%b9%e8%b1%a1dao%e6%a1%86%e6%9e%b6%e5%85%a5%e9%97%a8/' rel='bookmark' title='Permanent Link: [zt]SPRING数据访问对象(DAO)框架入门'>[zt]SPRING数据访问对象(DAO)框架入门</a></li><li><a href='http://www.foxlog.org/2006/08/31/ztjdbmonitor%e5%85%a8%e6%94%bb%e7%95%a5/' rel='bookmark' title='Permanent Link: [zt]JDBMonitor全攻略'>[zt]JDBMonitor全攻略</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="postText">
<p class="MsoNormal" style="text-indent: 21pt"><strong><span style="font-size: 14pt; font-family: 宋体">key words:Spring,jdbcTemplate</span>  </strong></p>
<p class="MsoNormal" style="text-indent: 21pt"><strong><span style="font-size: 14pt; font-family: 宋体">注：因为Spring是以后的一个趋势，Hibernate的集成已经很好了，对于单独的jdbc的操作用DBUtils感觉已经没有什么必要，不如全部转到Spring的jdbc支持，从成本来考虑似乎更合适。</span>  </strong></p>
<p class="MsoNormal" style="text-indent: 21pt"><strong><span style="font-size: 14pt; font-family: 宋体">本文转自 <a href="http://blog.csdn.net/nomads/archive/2006/05/05/709551.aspx">这里</a></span>  </strong></p>
<p class="MsoNormal" style="text-indent: 21pt"><strong><span style="font-size: 14pt; font-family: 宋体"><br />
</span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt"><strong><span style="font-size: 14pt; font-family: 宋体">前言：</span> </strong><strong><span style="font-size: 14pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-family: 宋体">本文指在介绍</span> <span lang="EN-US">Spring</span> <span style="font-family: 宋体">框架中的</span> <span lang="EN-US">JdbcTemplate</span> <span style="font-family: 宋体">类的使用方法，涉及基本的</span> <span lang="EN-US">Spring</span> <span style="font-family: 宋体">反转控制的使用方法和</span> <span lang="EN-US">JDBC</span> <span style="font-family: 宋体">的基本概念。目标是使读者能够对</span> <span lang="EN-US">JdbcTemplate</span> <span style="font-family: 宋体">快速地掌握和使用。</span>  <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span></span><strong><span style="font-size: 14pt; font-family: 宋体">准备：</span> </strong><strong><span style="font-size: 14pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US">1. Spring</span>  <span style="font-family: 宋体">的基本概念</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span>Spring</span> <span style="font-family: 宋体">框架核心的思想就是建立一个</span> <span lang="EN-US">Java</span> <span style="font-family: 宋体">对象的大工厂，用户只要给工厂一个指令，工厂就能将用户需要的对象根据配置文件组装好返还给用户。用户需要做的许多工作则可以写成简单的配置文件。</span>  <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span>2. </span><span style="font-family: 宋体">丑陋的</span> <span lang="EN-US">JDBC</span> <span style="font-family: 宋体">代码</span> <span lang="EN-US"><o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 32.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 333pt" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">Connection con=  null;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">PreparedStatement  pStmt=null;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">ResultSet rs =  null;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">try{<span>            </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>con = ods.getConnection();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>String sql = &#8220;select * from admin&#8221;;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>pStmt=con.prepareStatement(sql);<span>             </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>rs=pStmt.executeQuery();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>while(rs.next())<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>{<span>            </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">catch(Exception ex)  {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt"><span style="font-size: 9pt" lang="EN-US">try{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>          </span>con.rollback();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span>}catch(SQLException sqlex){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>           </span>sqlex.printStackTrace(System.out);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>      </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>      </span>ex.printStackTrace(); <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">}finally{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>    </span>try{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>rs.close();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>pStmt.close();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>con.close();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>    </span>}catch(Exception e){e.printStackTrace();}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p>  </span></p>
</td>
</tr>
</table>
<p class="MsoNormal"><strong><span lang="EN-US"><o:p> </o:p> </span></strong></p>
<p class="MsoNormal"><strong><span lang="EN-US"><span>        </span></span></strong><span style="font-family: 宋体">以上是常见的</span> <span lang="EN-US">JDBC</span> <span style="font-family: 宋体">代码，简单的</span> <span lang="EN-US">select</span> <span style="font-family: 宋体">语句也需要冗长的出错处理，并且每个函数都不断地重复同样的代码。</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span>3. JdbcTemplate</span>  <span style="font-family: 宋体">的作用</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span>JdbcTemplate</span>  <span style="font-family: 宋体">正是为了减少上述繁琐的代码而设计出来的。它是对</span> <span lang="EN-US">JDBC</span> <span style="font-family: 宋体">的一种封装，抽象我们常用的一些方法。</span>  <span lang="EN-US">Simple and Stupid</span> <span style="font-family: 宋体">就是它的目标。下面是完成了刚才</span> <span lang="EN-US">JDBC</span>  <span style="font-family: 宋体">代码同样功能的</span> <span lang="EN-US">JdbcTemplate</span> <span style="font-family: 宋体">的代码：</span> <span lang="EN-US"><o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 32.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 333pt" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">String sql = &#8220;select  * from admin&#8221;; <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">jdbcTemplate.query(sql,new RowCallbackHandler()  {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>          </span>public void processRow(ResultSet rs) throws SQLException {<span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>                 </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>} );<o:p></o:p></span></p>
</td>
</tr>
</table>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span></span><strong><span style="font-size: 14pt; font-family: 宋体">环境搭建：</span> </strong><strong><span style="font-size: 14pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt"><span lang="EN-US">1. </span><span style="font-family: 宋体">数据库的配置</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span></span><span style="font-family: 宋体">本文使用</span> <span lang="EN-US">Oracle</span> <span style="font-family: 宋体">数据库，新建表</span> <span lang="EN-US">admin</span> <span style="font-family: 宋体">：</span> <span lang="EN-US"><o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 32.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 333pt" valign="top" width="444">
<p class="MsoNormal"><strong><span style="font-size: 8pt; color: black; font-family: 'Courier New'" lang="EN-US">create</span>  </strong><span style="font-size: 8pt; color: black; font-family: 'Courier New'" lang="EN-US"><strong>table</strong>  admin (<br />
<span>        </span><strong>ID</strong><strong>number</strong>(</span> <span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New'" lang="EN-US">10</span>  <span style="font-size: 8pt; color: black; font-family: 'Courier New'" lang="EN-US">)  <strong>primary</strong><strong>key</strong>,<br />
<span>        </span><strong>NAME</strong><strong>varchar2</strong>(</span> <span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New'" lang="EN-US">64</span>  <span style="font-size: 8pt; color: black; font-family: 'Courier New'" lang="EN-US">),<br />
<span>        </span><strong>PASSWORD</strong><strong>varchar2</strong>(</span> <span style="font-size: 8pt; color: #0000f0; font-family: 'Courier New'" lang="EN-US">64</span>  <span style="font-size: 8pt; color: black; font-family: 'Courier New'" lang="EN-US">)<br />
)</span></td>
</tr>
</table>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span>2. Spring</span> <span style="font-family: 宋体">配置</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span>JdbcTemplate</span>  <span style="font-family: 宋体">的使用需要有</span> <span lang="EN-US">DataSource</span>  <span style="font-family: 宋体">的支持，所以在配置文件中，我们首先要配置一个</span> <span lang="EN-US">OracleDataSource</span> <span style="font-family: 宋体">，然后在将这个</span>  <span lang="EN-US">DataSource</span> <span style="font-family: 宋体">配置到</span>  <span lang="EN-US">JdbcTemplate</span> <span style="font-family: 宋体">里。接着将</span>  <span lang="EN-US">JdbcTemplate</span> <span style="font-family: 宋体">配置进</span>  <span lang="EN-US">DAO</span> <span style="font-family: 宋体">层，最后将</span> <span lang="EN-US">DAO</span> <span style="font-family: 宋体">配置进</span> <span lang="EN-US">Model</span> <span style="font-family: 宋体">层。简要的关系如下：</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>      <img src="http://blog.csdn.net/images/blog_csdn_net/nomads/screen2.gif" /></span>  </span><span lang="EN-US"><v:group id="_x0000_s1026" style="width: 234pt; height: 171.6pt" coordsize="4680,3432" coordorigin="2232,10957" editas="canvas"><o:lock aspectratio="t" v:ext="edit"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"><v:f eqn="sum @0 1 0"><v:f eqn="sum 0 0 @1"><v:f eqn="prod @2 1 2"><v:f eqn="prod @3 21600 pixelWidth"><v:f eqn="prod @3 21600 pixelHeight"><v:f eqn="sum @0 0 1"><v:f eqn="prod @6 1 2"><v:f eqn="prod @7 21600 pixelWidth"><v:f eqn="sum @8 21600 0"><v:f eqn="prod @7 21600 pixelHeight"><v:f eqn="sum @10 21600 0"></v:f><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"><o:lock aspectratio="t" v:ext="edit"></o:lock><v:shape id="_x0000_s1027" style="left: 2232px; width: 4680px; position: absolute; top: 10957px; height: 3432px" o:preferrelative="f" type="#_x0000_t75"><v:fill o:detectmouseclick="t"><v:path o:connecttype="none" o:extrusionok="t"><o:lock v:ext="edit" text="t"></o:lock><v:rect id="_x0000_s1028" style="left: 2232px; width: 4680px; position: absolute; top: 10957px; height: 3432px"><v:textbox> </v:textbox></v:rect></v:path></v:fill></v:shape></v:path></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:formulas></v:stroke></v:shapetype></o:lock></v:group></p>
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体">模型层</span><span style="font-size: 12pt" lang="EN-US"> :  User<o:p></o:p></span></p>
</td>
</tr>
</table>
<p><v:rect id="_x0000_s1029" style="left: 3132px; width: 3780px; position: absolute; top: 12049px; height: 2340px" fillcolor="#ddd"><v:textbox> </v:textbox></v:rect></p>
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td>
<p class="MsoNormal"><span style="font-family: 宋体">数据访问层：</span><span lang="EN-US">UserDAO</span></p>
</td>
</tr>
</table>
<p><v:rect id="_x0000_s1030" style="left: 4213px; width: 2699px; position: absolute; top: 12831px; height: 1558px" fillcolor="silver"><v:textbox> </v:textbox></v:rect></p>
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td>
<p class="MsoNormal"><span lang="EN-US">JdbcTemplate</span></p>
</td>
</tr>
</table>
<p><v:rect id="_x0000_s1031" style="left: 4932px; width: 1980px; position: absolute; top: 13453px; height: 936px" fillcolor="#b2b2b2"><v:textbox> </v:textbox></v:rect></p>
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td>
<p class="MsoNormal"><span lang="EN-US">OracleDataSource</span></p>
</td>
</tr>
</table>
<p><w:wrap type="none"><w:anchorlock></w:anchorlock>&lt;!&#8211;[if !vml]&#8211;&gt;  &lt;!&#8211;[endif]&#8211;&gt; </w:wrap></span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 14.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 396pt" valign="top" width="528">
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US">&lt;?xml version=&#8221;1.0&#8243;  encoding=&#8221;UTF-8&#8243;?&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US">&lt;!DOCTYPE beans PUBLIC  &#8220;-//SPRING//DTD BEAN//EN&#8221;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>     </span>&#8220;http://www.springframework.org/dtd/spring-beans.dtd&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US">&lt;beans&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>    </span>&lt;bean  id=&#8221;dataSource&#8221; class=&#8221;oracle.jdbc.pool.OracleDataSource&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>         </span>&lt;property name=&#8221;URL&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>             </span>&lt;value&gt;jdbc:oracle:thin:root/123@localhost:1521/XE&lt;/value&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>         </span>&lt;/property&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>     </span>&lt;/bean&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>    </span>&lt;bean  id=&#8221;jdbcTemplate&#8221; <o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 21pt; text-indent: 21pt"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US">class=&#8221;org.springframework.jdbc.core.JdbcTemplate&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>         </span>&lt;property name=&#8221;dataSource&#8221;&gt;&lt;ref  bean=&#8221;dataSource&#8221;/&gt;&lt;/property&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>     </span>&lt;/bean&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>    </span>&lt;bean  id=&#8221;userDAO&#8221; class=&#8221;DAO.Imp.UserDAOImp&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>         </span>&lt;property name=&#8221;jdbcTemplate&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 63pt; text-indent: 21pt"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US">&lt;ref bean=&#8221;jdbcTemplate&#8221;  /&gt;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 40.5pt"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US">&lt;/property&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>     </span>&lt;/bean&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>    </span>&lt;bean  id=&#8221;user&#8221; class=&#8221;Model.User&#8221;&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>         </span>&lt;property name=&#8221;dao&#8221;&gt;&lt;ref  bean=&#8221;userDAO&#8221;/&gt;&lt;/property&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US"><span>     </span>&lt;/bean&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt; font-family: 'Courier New'" lang="EN-US">&lt;/beans&gt;<o:p></o:p></span></p>
</td>
</tr>
</table>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>       </span>3. </span><span style="font-family: 宋体">环境配置，</span> <span></span><span style="font-family: 宋体">如图：</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><strong><span lang="EN-US"><span>      <img src="http://blog.csdn.net/images/blog_csdn_net/nomads/screen.gif" /></span>  <v:shapeid="_x0000_i1026" style="width: 225.75pt; height: 229.5pt" type="#_x0000_t75"><v:imagedata o:title="screen"></v:imagedata>&lt;!&#8211;[if !vml]&#8211;&gt; &lt;!&#8211;[endif]&#8211;&gt; </v:shapeid="_x0000_i1026"></span></strong><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt"><strong><span style="font-size: 14pt" lang="EN-US"><o:p> </o:p> </span></strong></p>
<p class="MsoNormal" style="text-indent: 21pt"><strong><span style="font-size: 14pt; font-family: 宋体">使用方法：</span> </strong><strong><span style="font-size: 14pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin-left: 39pt; text-indent: -18pt">&lt;!&#8211;[if  !supportLists]&#8211;&gt; <span lang="EN-US"><span>1.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal">        </span></span></span>&lt;!&#8211;[endif]&#8211;&gt; <span style="font-family: 宋体">查找</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 39pt"><span style="font-family: 宋体">多行查询：</span> <span lang="EN-US"><o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 50.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 375.7pt" valign="top" width="501">
<p class="MsoNormal"><span style="font-size: 9pt; color: #993300" lang="EN-US">class UserRowMapper implements  RowMapper</span> <span style="font-size: 9pt" lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>         </span><span style="color: #993300">public Object mapRow(ResultSet rs,int  index) throws SQLException<o:p></o:p></span> </span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>         </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>User u = new User();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>u.setId(rs.getString(&#8220;ID&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>u.setName(rs.getString(&#8220;Name&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>u.setPassword(rs.getString(&#8220;Password&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>             </span>return u;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>         </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">public List  select(String where)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>         </span>List list;<span>        </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>         </span>String sql = &#8220;select * from admin &#8220;+where;<span>         </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>         </span>list =<span style="color: #993300"> jdbcTemplate.query(sql,new  RowMapperResultReader(new UserRowMapper()));</span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>         </span>return list;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p>  </span></p>
</td>
</tr>
</table>
<p class="MsoNormal" style="margin-left: 39pt"><span lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal" style="margin-left: 39pt; text-align: left" align="left"><span lang="EN-US">List</span> <span style="font-family: 宋体">最终返回的是满足条件的</span> <span lang="EN-US">User</span> <span style="font-family: 宋体">队列。</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 39pt; text-align: left" align="left"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal" style="margin-left: 39pt; text-align: left" align="left"><span style="font-family: 宋体">单行查询：</span> <span lang="EN-US"><o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 50.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 360pt" valign="top" width="480">
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">public User  selectById(String id){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span></span>String sql = &#8220;select * from admin where  id=?&#8221;;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span></span>final User u = new User();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span></span>final Object[] params = new Object[] {id};<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span></span><span style="color: #993300">jdbcTemplate.query(sql,  params, new RowCallbackHandler()</span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span>                    </span>public void <span style="color: #993300">processRow(ResultSet rs) throws SQLException</span>  {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span>                              </span>u.setId(rs.getString(&#8220;ID&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span>                              </span>u.setName(rs.getString(&#8220;NAME&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span>                              </span>u.setPassword(rs.getString(&#8220;PASSWORD&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span>                    </span>}<span>     </span><span>                  </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span></span>});<span>    </span><span>       </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span><span></span>return u;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left" align="left"><span lang="EN-US"><o:p> </o:p> </span></p>
</td>
</tr>
</table>
<p class="MsoNormal" style="margin-left: 39pt; text-align: left" align="left"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal" style="margin-left: 39pt; text-align: left" align="left"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal" style="margin-left: 39pt; text-indent: -18pt">&lt;!&#8211;[if  !supportLists]&#8211;&gt; <span lang="EN-US"><span>2.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal">        </span></span></span>&lt;!&#8211;[endif]&#8211;&gt; <span style="font-family: 宋体">插入</span> <span lang="EN-US"><o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 41.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 384.7pt" valign="top" width="513">
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">public void  insert(User u)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>      </span>String sql = &#8220;insert into admin (ID,NAME,PASSWORD) values  (admin_id_seq.nextval,?,?)&#8221;;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>      </span>Object[] params = new Object[] {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>                            </span><span>         </span><span>            </span>u.getName(),<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>                            </span><span>         </span><span>            </span>u.getPassword() };<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>      </span>jdbcTemplate.update(sql,params);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span> </span>}<o:p></o:p></span></p>
</td>
</tr>
</table>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: 21pt"><span style="font-size: 9pt" lang="EN-US">admin_id_seq.nextval</span> <span style="font-size: 9pt; font-family: 宋体">为</span> <span style="font-size: 9pt" lang="EN-US">Oracle</span> <span style="font-size: 9pt; font-family: 宋体">设置好的序列，问号“</span> <span style="font-size: 9pt" lang="EN-US">?</span> <span style="font-size: 9pt; font-family: 宋体">”被</span> <span style="font-size: 9pt" lang="EN-US">params</span> <span style="font-size: 9pt; font-family: 宋体">里的数据依次替代，最终执行</span> <span style="font-size: 9pt" lang="EN-US">sql</span> <span style="font-size: 9pt; font-family: 宋体">。</span> <span style="font-size: 9pt" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: 21pt"><span style="font-size: 9pt" lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal" style="margin-left: 39pt; text-indent: -18pt">&lt;!&#8211;[if  !supportLists]&#8211;&gt; <span lang="EN-US"><span>3.<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal">        </span></span></span>&lt;!&#8211;[endif]&#8211;&gt; <span style="font-family: 宋体">修改</span> <span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 39pt"><span style="font-family: 宋体">非常简单：</span> <span lang="EN-US"><o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 426.1pt" valign="top" width="568">
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US">public void  update(String how)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 18pt"><span style="font-size: 9pt" lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 18pt"><span style="font-size: 9pt" lang="EN-US"><span>         </span>jdbcTemplate.update(how);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 9pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
</td>
</tr>
</table>
<p class="MsoNormal" style="margin-left: 39pt"><span lang="EN-US"><o:p> </o:p>  </span><strong><span style="font-size: 14pt" lang="EN-US"><o:p><br />
</o:p></span></strong></p>
<p class="MsoNormal" style="margin-left: 39pt"><strong><span style="font-size: 14pt" lang="EN-US"><o:p><br />
</o:p></span></strong></p>
<p class="MsoNormal" style="margin-left: 8.9pt"><strong><span style="font-size: 14pt; font-family: 宋体">源代码：</span> </strong><strong><span style="font-size: 14pt" lang="EN-US"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin-left: 8.9pt; text-indent: 12.1pt"><span style="font-family: 宋体" lang="EN-US">User.class: <o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 50.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 333pt" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">package  Model;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  java.util.List;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  DAO.UserDAO;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">/**<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*<span>  </span>Model</span> <span style="font-size: 7.5pt; font-family: 宋体">层</span> <span style="font-size: 7.5pt" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  @author </span><span style="font-size: 7.5pt; font-family: 宋体">李嘉陵</span> <span style="font-size: 7.5pt" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  @since 2006-4-30 12:10:30<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  @version <st1:chmetcnv unitname="a" sourcevalue=".1" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">0.10a</st1:chmetcnv><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>**/<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">public class User  {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>private String name;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>private String id;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>private String password;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>private UserDAO dao;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public User()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public User(String name, String password)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span>this.name = name;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span>this.password = password;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void setDao(UserDAO dao)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>this.dao = dao;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public String getId() {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>return id;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void setId(String id) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>this.id = id;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public String getName() {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>return name;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void setName(String name) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>this.name = name;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public String getPassword() {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>return password;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void setPassword(String password) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>this.password = password;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void getInfo(String id)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>List list = dao.select(&#8220;where id=&#8221;+id);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>User u = (User) list.get(0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>this.id=id;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>this.name = u.getName();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>this.password = u.getPassword();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void insert()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>dao.insert(this);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void update(String how)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>dao.update(how);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void update()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>dao.update(&#8220;update admin set name=&#8217;&#8221;+name+&#8221;&#8216;, password=&#8217;&#8221;+password+&#8221;&#8216;  where id=&#8221;+id);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public List selectWithTemp(String where)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>return dao.select(where);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void selectWithTemp()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>dao.selectWithTemp();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public User selectById(String id)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span>return dao.selectById(id);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>   </span><span>  </span> <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void insertUsers(List users)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span>dao.insertUsers(users);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">}<o:p></o:p></span></p>
</td>
</tr>
</table>
<p class="MsoNormal"><span style="font-family: 宋体" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-family: 宋体" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-family: 宋体" lang="EN-US">UserDAO.class  :<o:p></o:p></span></p>
<p align="center">
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 467px; border-collapse: collapse; height: 740px" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 338.2pt" valign="top" width="451">
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">package  DAO;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  java.util.List;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  Model.User;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">/**<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  DAO</span> <span style="font-size: 7.5pt; font-family: 宋体">层接口</span> <span style="font-size: 7.5pt" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  @author </span><span style="font-size: 7.5pt; font-family: 宋体">李嘉陵</span> <span style="font-size: 7.5pt" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  @since 2006-4-30 8:40:56<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  @version <st1:chmetcnv unitname="a" sourcevalue=".1" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">0.10a</st1:chmetcnv><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>**/<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">public interface  UserDAO {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void select();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void test();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void selectWithTemp();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public List select(String where);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void update(String how);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void insert(User u);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public User selectById(String id);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public int[] insertUsers(final List users);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">}</span> <span lang="EN-US"><o:p></o:p></span></p>
</td>
</tr>
</table>
<p class="MsoNormal"><span style="font-family: 宋体" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-family: 宋体" lang="EN-US">UserDAOImp.class:<o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 41.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 342pt" valign="top" width="456">
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">package  DAO.Imp;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  java.sql.PreparedStatement;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  java.sql.ResultSet;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  java.sql.SQLException;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  java.util.List;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  org.springframework.jdbc.core.BatchPreparedStatementSetter;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  org.springframework.jdbc.core.JdbcTemplate;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  org.springframework.jdbc.core.RowCallbackHandler;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  org.springframework.jdbc.core.RowMapper;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  org.springframework.jdbc.core.RowMapperResultReader;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  DAO.UserDAO;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">import  Model.User;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">/**<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*<span>  </span>DAO</span> <span style="font-size: 7.5pt; font-family: 宋体">层的实现</span> <span style="font-size: 7.5pt" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  @author </span><span style="font-size: 7.5pt; font-family: 宋体">李嘉陵</span> <span style="font-size: 7.5pt" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  @since 2006-4-30 8:41:26<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>*  @version <st1:chmetcnv unitname="a" sourcevalue=".1" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">0.10a</st1:chmetcnv><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span> </span>**/<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">public class  UserDAOImp implements UserDAO{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>private JdbcTemplate jdbcTemplate;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void setJdbcTemplate(JdbcTemplate jdbcTemplate)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>this.jdbcTemplate = jdbcTemplate;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>class UserRowMapper implements RowMapper<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>public Object mapRow(ResultSet rs,int index) throws  SQLException<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>             </span>User u = new User();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>             </span>u.setId(rs.getString(&#8220;ID&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>             </span>u.setName(rs.getString(&#8220;Name&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>             </span>u.setPassword(rs.getString(&#8220;Password&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>             </span>return u;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void selectWithTemp()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>String sql = &#8220;select * from admin&#8221;;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>               </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>jdbcTemplate.query(sql,new RowCallbackHandler() {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>                </span>public void  processRow(ResultSet rs) throws SQLException {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>                 </span><span></span>System.out.println(&#8220;ID: &#8220;+rs.getString(&#8220;ID&#8221;)+&#8221;<span>    </span>Name: &#8220;+rs.getString(&#8220;name&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>                </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>             </span>} );<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public List select(String where)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>List list;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>String sql = &#8220;select * from admin &#8220;+where;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>list = jdbcTemplate.query(sql,new RowMapperResultReader(new  UserRowMapper()));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>return list;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public User selectById(String id)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span>String sql = &#8220;select * from admin where  id=?&#8221;;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span>final User u = new User();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span>final Object[] params = new Object[]  {id};<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span>jdbcTemplate.query(sql,params, new  RowCallbackHandler(){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>                     </span>public void processRow(ResultSet rs)  throws SQLException {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>                                </span>u.setId(rs.getString(&#8220;ID&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>                                </span>u.setName(rs.getString(&#8220;NAME&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>                                </span>u.setPassword(rs.getString(&#8220;PASSWORD&#8221;));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>                     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>    </span><span>    </span>});<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><span>   </span>return u;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void update(String how)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>String sql = how;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>jdbcTemplate.update(sql);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public void insert(User u)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>String sql = &#8220;insert into admin (ID,NAME,PASSWORD) values  (admin_id_seq.nextval,?,?)&#8221;;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>Object[] params = new Object[] {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>                            </span><span>         </span><span>               </span>u.getName(),<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>          </span><span>                   </span><span>        </span><span>                </span>u.getPassword()};<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>jdbcTemplate.update(sql,params);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>    </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">}</span> <span style="font-family: 宋体" lang="EN-US"><o:p></o:p></span></p>
</td>
</tr>
</table>
<p class="MsoNormal" style="text-align: center" align="center"><span style="font-family: 宋体" lang="EN-US"><o:p> </o:p> </span></p>
<p class="MsoNormal"><span style="font-family: 宋体" lang="EN-US"><o:p> </o:p>  </span></p>
<p class="MsoNormal"><span style="font-family: 宋体" lang="EN-US">UserAction.class:<o:p></o:p></span></p>
<table class="MsoTableGrid" style="border: medium none ; background: #f3f3f3 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 41.4pt; border-collapse: collapse" border="1" cellpadding="0" cellspacing="0">
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 333pt" valign="top" width="444">
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">//</span> <span style="font-size: 7.5pt; font-family: 宋体">测试类</span> <span style="font-size: 7.5pt" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">public class  UserAction {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>public static void main(String[] args)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>Resource resource=new ClassPathResource(&#8220;beans.xml&#8221;);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>BeanFactory factory = new XmlBeanFactory(resource);<span>         </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span>User user = (User) factory.getBean(&#8220;user&#8221;);<span>     </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>         </span><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>        </span><span> </span>user.selectWithTemp();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US"><span>     </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 7.5pt" lang="EN-US">}<o:p></o:p></span></p>
</td>
</tr>
</table>
<p class="MsoNormal"><span style="font-family: 宋体" lang="EN-US"><o:p> </o:p>  </span></p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/10/09/%e5%85%b3%e4%ba%8efacade%e7%9a%84%e5%ba%94%e7%94%a8/' rel='bookmark' title='Permanent Link: 关于Facade的应用'>关于Facade的应用</a></li><li><a href='http://www.foxlog.org/2007/03/30/ztspring%e6%95%b0%e6%8d%ae%e8%ae%bf%e9%97%ae%e5%af%b9%e8%b1%a1dao%e6%a1%86%e6%9e%b6%e5%85%a5%e9%97%a8/' rel='bookmark' title='Permanent Link: [zt]SPRING数据访问对象(DAO)框架入门'>[zt]SPRING数据访问对象(DAO)框架入门</a></li><li><a href='http://www.foxlog.org/2006/08/31/ztjdbmonitor%e5%85%a8%e6%94%bb%e7%95%a5/' rel='bookmark' title='Permanent Link: [zt]JDBMonitor全攻略'>[zt]JDBMonitor全攻略</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/10/16/ztjdbctemplate%e4%bd%bf%e7%94%a8%e6%8c%87%e5%8d%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致</title>
		<link>http://www.foxlog.org/2006/02/24/middlegen%e6%80%aa%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84hbmxml%e6%96%87%e4%bb%b6%e7%9a%84%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%92%8c%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b1%bb%e5%9e%8b%e4%b8%8d/</link>
		<comments>http://www.foxlog.org/2006/02/24/middlegen%e6%80%aa%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84hbmxml%e6%96%87%e4%bb%b6%e7%9a%84%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%92%8c%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b1%bb%e5%9e%8b%e4%b8%8d/#comments</comments>
		<pubDate>Fri, 24 Feb 2006 06:32:18 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/130</guid>
		<description><![CDATA[keyword:MySql字段,Hibernate session,MiddleGen 一.MySql字段敏感 这几天怪问题真是不少,这不刚建的一个数据库的表用MiddleGen批量生成hbm.xml文件居然和数据库的数据类型不一致. MySql建表语句如下: drop table if exists book; /*==============================================================*/ /* Table: book                                                  */ /*==============================================================*/ create table book ( id                             int                            not null, name                           varchar(100), author                         varchar(100), date                           date, price                          int, primary key (id) ) comment=&#8220;Book table&#8221; type = InnoDB; 生成的hbm.xml文件如下: &#60;?xml version=&#8221;1.0&#8243;?&#62; &#60;!DOCTYPE hibernate-mapping PUBLIC &#8220;-//Hibernate/Hibernate Mapping DTD 2.0//EN&#8221; &#8220;http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd&#8221; &#62; &#60;hibernate-mapping&#62; &#60;!&#8211; Created by the Middlegen Hibernate plugin 2.1 http://boss.bekk.no/boss/middlegen/ http://www.hibernate.org/ &#8211;&#62; &#60;class name=&#8221;net.foxlog.prj.Book&#8221; table=&#8221;book&#8221; &#62; &#60;meta attribute=&#8221;class-description&#8221; inherit=&#8221;false&#8221;&#62; @hibernate.class table=&#8221;book&#8221; &#60;/meta&#62; &#60;id name=&#8221;id&#8221; type=&#8221;java.lang.Long&#8221; column=&#8221;id&#8221; &#62; &#60;meta attribute=&#8221;field-description&#8221;&#62; @hibernate.id generator-class=&#8221;assigned&#8221; type=&#8221;java.lang.Long&#8221; column=&#8221;id&#8221; &#60;/meta&#62; &#60;generator class=&#8221;assigned&#8221; /&#62; &#60;/id&#62; &#60;property name=&#8221;name&#8221; [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/11/09/zthibernate%e5%a4%8d%e5%90%88%e4%b8%bb%e9%94%ae/' rel='bookmark' title='Permanent Link: [zt]hibernate复合主键'>[zt]hibernate复合主键</a></li><li><a href='http://www.foxlog.org/2006/02/17/%e5%a5%87%e6%80%aahibernate-extensions%e7%94%9f%e6%88%90%e7%9a%84pojo%e6%b2%a1%e6%9c%89equals%e5%92%8chashcode%e6%96%b9%e6%b3%95/' rel='bookmark' title='Permanent Link: 奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法'>奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法</a></li><li><a href='http://www.foxlog.org/2006/11/07/hibernate%e7%9a%84load%e9%94%99%e8%af%af%ef%bc%8c%e4%bd%a0%e7%a2%b0%e5%88%b0%e8%bf%87%e8%bf%99%e6%a0%b7%e7%9a%84%e9%97%ae%e9%a2%98%e4%b9%88/' rel='bookmark' title='Permanent Link: Hibernate的load错误，你碰到过这样的问题么?'>Hibernate的load错误，你碰到过这样的问题么?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>keyword:MySql字段,Hibernate  session,MiddleGen</p>
<p>一.MySql字段敏感</p>
<p>这几天怪问题真是不少,这不刚建的一个数据库的表用MiddleGen批量生成hbm.xml文件居然和数据库的数据类型不一致.<br />
MySql建表语句如下:</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">drop</span><span style="color: #000000"> </span><span style="color: #0000ff">table</span><span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> </span><span style="color: #808080">exists</span><span style="color: #000000"> book;</p>
<p></span><span style="color: #008080">/*</span><span style="color: #008080">==============================================================</span><span style="color: #008080">*/</span><span style="color: #000000"><br />
</span><span style="color: #008080">/*</span><span style="color: #008080"> Table: book                                                  </span><span style="color: #008080">*/</span><span style="color: #000000"><br />
</span><span style="color: #008080">/*</span><span style="color: #008080">==============================================================</span><span style="color: #008080">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000"> </span><span style="color: #0000ff">table</span><span style="color: #000000"> book<br />
(<br />
id                             </span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">                            </span><span style="color: #808080">not</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">,<br />
name                           </span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">100</span><span style="color: #000000">),<br />
author                         </span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">100</span><span style="color: #000000">),<br />
date                           date,<br />
price                          </span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">,<br />
</span><span style="color: #0000ff">primary</span><span style="color: #000000"> </span><span style="color: #0000ff">key</span><span style="color: #000000"> (id)<br />
)<br />
comment</span><span style="color: #808080">=</span><span style="color: #000000">&#8220;Book  table&#8221;<br />
type </span><span style="color: #808080">=</span><span style="color: #000000"> InnoDB;</span><br />
生成的hbm.xml文件如下:</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml version=&#8221;1.0&#8243;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE hibernate-mapping PUBLIC<br />
&#8220;-//Hibernate/Hibernate Mapping DTD 2.0//EN&#8221;<br />
&#8220;http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd&#8221; </span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">hibernate-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"><br />
Created by the Middlegen Hibernate plugin 2.1</p>
<p>http://boss.bekk.no/boss/middlegen/</p>
<p>http://www.hibernate.org/</p>
<p></span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;net.foxlog.prj.Book&#8221;</span><span style="color: #ff0000"><br />
table</span><span style="color: #0000ff">=&#8221;book&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">=&#8221;class-description&#8221;</span><span style="color: #ff0000"> inherit</span><span style="color: #0000ff">=&#8221;false&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
@hibernate.class<br />
table=&#8221;book&#8221;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">meta</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">id<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;id&#8221;</span><span style="color: #ff0000"><br />
type</span><span style="color: #0000ff">=&#8221;java.lang.Long&#8221;</span><span style="color: #ff0000"><br />
column</span><span style="color: #0000ff">=&#8221;id&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">=&#8221;field-description&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
@hibernate.id<br />
generator-class=&#8221;assigned&#8221;<br />
type=&#8221;java.lang.Long&#8221;<br />
column=&#8221;id&#8221;</p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">meta</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">generator </span><span style="color: #ff0000">class</span><span style="color: #0000ff">=&#8221;assigned&#8221;</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">id</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000"><br />
type</span><span style="color: #0000ff">=&#8221;java.lang.String&#8221;</span><span style="color: #ff0000"><br />
column</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000"><br />
length</span><span style="color: #0000ff">=&#8221;100&#8243;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">=&#8221;field-description&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
@hibernate.property<br />
column=&#8221;name&#8221;<br />
length=&#8221;100&#8243;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">meta</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;author&#8221;</span><span style="color: #ff0000"><br />
type</span><span style="color: #0000ff">=&#8221;java.lang.String&#8221;</span><span style="color: #ff0000"><br />
column</span><span style="color: #0000ff">=&#8221;author&#8221;</span><span style="color: #ff0000"><br />
length</span><span style="color: #0000ff">=&#8221;100&#8243;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">=&#8221;field-description&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
@hibernate.property<br />
column=&#8221;author&#8221;<br />
length=&#8221;100&#8243;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">meta</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;date&#8221;</span><span style="color: #ff0000"><br />
type</span><span style="color: #0000ff">=&#8221;java.sql.Date&#8221;</span><span style="color: #ff0000"><br />
column</span><span style="color: #0000ff">=&#8221;date&#8221;</span><span style="color: #ff0000"><br />
length</span><span style="color: #0000ff">=&#8221;10&#8243;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">=&#8221;field-description&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
@hibernate.property<br />
column=&#8221;date&#8221;<br />
length=&#8221;10&#8243;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">meta</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;price&#8221;</span><span style="color: #ff0000"><br />
type</span><span style="color: #0000ff">=&#8221;java.lang.String&#8221;</span><span style="color: #ff0000"><br />
column</span><span style="color: #0000ff">=&#8221;price&#8221;</span><span style="color: #ff0000"><br />
length</span><span style="color: #0000ff">=&#8221;10&#8243;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">=&#8221;field-description&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
@hibernate.property<br />
column=&#8221;price&#8221;<br />
length=&#8221;10&#8243;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">meta</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Associations </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">hibernate-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><br />
注意到没有,id的类型变成了Long型了,而price居然变成了String了,晕啊.</p>
<p>各位碰到过这个问题么?</p>
<p>最后还是找到问题所在了,实际上是建表有问题,问题就出在字段的名称上,把id改为ID,price改为PRICE就没问题了!   MySql对id和price敏感?  不得而知,目前看来好像是这样.只是提醒我以后建表养成一个习惯,都用大写的就没问题了.<br />
没想到一次测试中随便建的一个表发现了这么个有趣的事情   <img src='http://www.foxlog.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>二.Hibernate的session关闭问题<br />
用hibernate的工具类获得session有没有碰到过session is  closed的错误提示?  我又幸运的碰到这个问题了,呵呵,我怎么有那么多问题啊,晕了,我看来是问题先生了,我的一个同事上次也跟我说过这个事情,后来他没有正面解决这个,绕过去了,他用Spring去替自己解决了,呵呵,也够狠的.不过问题实际上是获得session的时候需要增加一个判断.  即 session.isOpen() == false;</p>
<p>DBUtil.java代码如下:</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #008000">/**</span><span style="color: #008000"><br />
* 返回一个可用的数据库Session连接<br />
* </span><span style="color: #808080">@return</span><span style="color: #008000"> Hibernate中对数据库的Session连接<br />
* </span><span style="color: #808080">@throws</span><span style="color: #008000"> HibernateException<br />
</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> Session currentSession() </span><span style="color: #0000ff">throws</span><span style="color: #000000"> HibernateException<br />
{<br />
Session s </span><span style="color: #000000">=</span><span style="color: #000000"> (Session) session.get();<br />
</span><span style="color: #008000">//</span><span style="color: #008000"> Open a new Session, if this Thread has none yet</span><span style="color: #008000"><br />
</span><span style="color: #000000">        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #0000ff">null</span><span style="color: #000000">==</span><span style="color: #000000">s </span><span style="color: #000000">||</span><span style="color: #000000"> s.isOpen()</span><span style="color: #000000">==</span><span style="color: #0000ff">false</span><span style="color: #000000">)//<font color="#ff0000">注意这里</font><br />
{<br />
s </span><span style="color: #000000">=</span><span style="color: #000000"> sessionFactory.openSession();<br />
session.set(s);<br />
}<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000"> s;<br />
}</span></p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/11/09/zthibernate%e5%a4%8d%e5%90%88%e4%b8%bb%e9%94%ae/' rel='bookmark' title='Permanent Link: [zt]hibernate复合主键'>[zt]hibernate复合主键</a></li><li><a href='http://www.foxlog.org/2006/02/17/%e5%a5%87%e6%80%aahibernate-extensions%e7%94%9f%e6%88%90%e7%9a%84pojo%e6%b2%a1%e6%9c%89equals%e5%92%8chashcode%e6%96%b9%e6%b3%95/' rel='bookmark' title='Permanent Link: 奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法'>奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法</a></li><li><a href='http://www.foxlog.org/2006/11/07/hibernate%e7%9a%84load%e9%94%99%e8%af%af%ef%bc%8c%e4%bd%a0%e7%a2%b0%e5%88%b0%e8%bf%87%e8%bf%99%e6%a0%b7%e7%9a%84%e9%97%ae%e9%a2%98%e4%b9%88/' rel='bookmark' title='Permanent Link: Hibernate的load错误，你碰到过这样的问题么?'>Hibernate的load错误，你碰到过这样的问题么?</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/02/24/middlegen%e6%80%aa%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84hbmxml%e6%96%87%e4%bb%b6%e7%9a%84%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%92%8c%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b1%bb%e5%9e%8b%e4%b8%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>奇怪,hibernate-extensions生成的POJO没有equals和hashCode方法</title>
		<link>http://www.foxlog.org/2006/02/17/%e5%a5%87%e6%80%aahibernate-extensions%e7%94%9f%e6%88%90%e7%9a%84pojo%e6%b2%a1%e6%9c%89equals%e5%92%8chashcode%e6%96%b9%e6%b3%95/</link>
		<comments>http://www.foxlog.org/2006/02/17/%e5%a5%87%e6%80%aahibernate-extensions%e7%94%9f%e6%88%90%e7%9a%84pojo%e6%b2%a1%e6%9c%89equals%e5%92%8chashcode%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Fri, 17 Feb 2006 06:33:58 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://www.foxlog.org/archives/131</guid>
		<description><![CDATA[到网上搜索了半天都说什么要在hbm.xml文件里写什么implements equals,但是心想如果都在这个里面手工写那还有什么方便之处啊. 原因终于找到,原来是高版本不行,我用的是2.1.2,而2.0.2则没问题,确切的说把hibernate-tools.jar换为2.0.2的即可 附配置说明: 不需要记复杂的命令,只要一次配置好Middlegen-Hibernate-r5目录下的build.xml文件即可,以后则需要运行 ant 和 ant hbm2java即可 注:前者生成数据库对应的所有hbm.xml文件,后者生成hbm.xml对应的所有POJO build.xml配置如下: &#60;?xml version=&#8221;1.0&#8243;?&#62; &#60;!&#8211; This is a testing platform for the middlegen hibernate plugin. It is a stripped down version of the samples application. At the moment it is only concerned with the generation of the mapping documents so that various tests etc can be done on the generated package. David Channon The DOCTYPE declaration declares the location of product-specific parts of the Ant build file. You can change the values of these declarations to point to other available files. This gives you an opportunity to choose what database. Note that this syntax has nothing to do with Ant or Middlegen. This is the standard way defined by w3c to dynamically include external files in an XML document. Any decent XML parser will do the include transparently. Try to open this file in Internet Explorer and see for yourself. &#8211;&#62; &#60;!DOCTYPE project [ &#60;!ENTITY database SYSTEM "file:./config/database/mysql.xml"&#62; ]&#62; &#60;project name=&#8221;Middlegen Hibernate&#8221; default=&#8221;all&#8221; basedir=&#8221;.&#8221;&#62; &#60;!&#8211; project name=&#8221;Middlegen Hibernate&#8221; default=&#8221;all&#8221; basedir=&#8221;.&#8221; &#8211;&#62; &#60;property file=&#8221;${basedir}/build.properties&#8221;/&#62; &#60;property name=&#8221;name&#8221; value=&#8221;bona&#8221;/&#62; &#60;property name=&#8221;myPackage&#8221; value=&#8221;cn.com.chinagc.cpms.model.po&#8221;/&#62; &#60;!&#8211; This was added because we were several people (in a course) deploying to same app server&#62; &#60;property environment=&#8221;env&#8221;/&#62; &#60;property name=&#8221;unique.name&#8221;                    value=&#8221;${name}.${env.COMPUTERNAME}&#8221;/&#8211;&#62; &#60;property name=&#8221;gui&#8221;                            value=&#8221;false&#8221;/&#62; &#60;property name=&#8221;unique.name&#8221;                    value=&#8221;${name}&#8221;/&#62; &#60;property name=&#8221;appxml.src.file&#8221;                value=&#8221;${basedir}/src/application.xml&#8221;/&#62; &#60;property name=&#8221;lib.dir&#8221;                        value=&#8221;${basedir}/lib&#8221;/&#62; &#60;property name=&#8221;src.dir&#8221;                        value=&#8221;${basedir}/src&#8221;/&#62; &#60;property name=&#8221;java.src.dir&#8221;                   value=&#8221;${src.dir}/java&#8221;/&#62; &#60;property name=&#8221;web.src.dir&#8221;                    value=&#8221;${src.dir}/web&#8221;/&#62; &#60;property name=&#8221;build.dir&#8221;                      value=&#8221;${basedir}/build&#8221;/&#62; &#60;property name=&#8221;build.java.dir&#8221;                 value=&#8221;${build.dir}/java&#8221;/&#62; &#60;property name=&#8221;build.gen-src.dir&#8221;              value=&#8221;${build.dir}/gen-src&#8221;/&#62; &#60;property name=&#8221;build.classes.dir&#8221;              value=&#8221;${build.dir}/classes&#8221;/&#62; &#38;database; &#60;!&#8211; define the datasource.jndi.name in case the imported ejb file doesn&#8217;t &#8211;&#62; &#60;property name=&#8221;datasource.jndi.name&#8221;           value=&#8221;${name}/datasource&#8221;/&#62; &#60;path id=&#8221;lib.class.path&#8221;&#62; &#60;pathelement path=&#8221;${database.driver.classpath}&#8221;/&#62; &#60;fileset dir=&#8221;${lib.dir}&#8221;&#62; [...]


Related posts:<ol><li><a href='http://www.foxlog.org/2006/03/16/intellij-idea-live-templates-for-hibernate-xdoclet-tags/' rel='bookmark' title='Permanent Link: IntelliJ IDEA Live Templates for Hibernate XDoclet-tags'>IntelliJ IDEA Live Templates for Hibernate XDoclet-tags</a></li><li><a href='http://www.foxlog.org/2006/02/24/middlegen%e6%80%aa%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84hbmxml%e6%96%87%e4%bb%b6%e7%9a%84%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%92%8c%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b1%bb%e5%9e%8b%e4%b8%8d/' rel='bookmark' title='Permanent Link: MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致'>MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致</a></li><li><a href='http://www.foxlog.org/2006/12/07/middlegen%e4%b8%ad%e9%85%8d%e7%bd%aehibernate%e7%9a%84many-to-many%e5%b1%9e%e6%80%a7/' rel='bookmark' title='Permanent Link: MiddleGen中配置hibernate的many to many属性'>MiddleGen中配置hibernate的many to many属性</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p class="postText">到网上搜索了半天都说什么要在hbm.xml文件里写什么implements  equals,但是心想如果都在这个里面手工写那还有什么方便之处啊.</p>
<p>原因终于找到,原来是高版本不行,我用的是2.1.2,而2.0.2则没问题,确切的说把hibernate-tools.jar换为2.0.2的即可</p>
<p>附配置说明:<br />
不需要记复杂的命令,只要一次配置好Middlegen-Hibernate-r5目录下的build.xml文件即可,以后则需要运行<br />
ant<br />
和<br />
ant hbm2java即可<br />
<font color="#ff0000">注:前者生成数据库对应的所有hbm.xml文件,后者生成hbm.xml对应的所有POJO</font></p>
<p>build.xml配置如下:</p>
<p style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee"><!--</p>
<p>Code highlighting produced by Actipro CodeHighlighter (freeware)</p>
<p>http://www.CodeHighlighter.com/</p>
<p>--><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml version=&#8221;1.0&#8243;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"><br />
This is a testing platform for the middlegen hibernate plugin. It is a stripped<br />
down version of the samples application. At the moment it is only concerned<br />
with the generation of the mapping documents so that various tests etc can be<br />
done on the generated package.</p>
<p>David Channon</p>
<p>The DOCTYPE declaration declares the location of product-specific parts of the<br />
Ant build file. You can change the values of these declarations to point to<br />
other available files. This gives you an opportunity to choose what database.</p>
<p>Note that this syntax has nothing to do with Ant or Middlegen. This<br />
is the standard way defined by w3c to dynamically include external<br />
files in an XML document. Any decent XML parser will do the include<br />
transparently. Try to open this file in Internet Explorer and see<br />
for yourself.<br />
</span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE project [<br />
&lt;!ENTITY database SYSTEM "file:./config/database/mysql.xml"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
]&gt;</p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">project </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;Middlegen Hibernate&#8221;</span><span style="color: #ff0000"> default</span><span style="color: #0000ff">=&#8221;all&#8221;</span><span style="color: #ff0000"> basedir</span><span style="color: #0000ff">=&#8221;.&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> project name=&#8221;Middlegen Hibernate&#8221; default=&#8221;all&#8221; basedir=&#8221;.&#8221; </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">file</span><span style="color: #0000ff">=&#8221;${basedir}/build.properties&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;name&#8221;</span><span style="color: #ff0000"> value</span><span style="color: #0000ff">=&#8221;bona&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;myPackage&#8221;</span><span style="color: #ff0000"> value</span><span style="color: #0000ff">=&#8221;cn.com.chinagc.cpms.model.po&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> This was added because we were several people (in a course) deploying to same app server&gt;<br />
&lt;property environment=&#8221;env&#8221;/&gt;<br />
&lt;property name=&#8221;unique.name&#8221;                    value=&#8221;${name}.${env.COMPUTERNAME}&#8221;/</span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;gui&#8221;</span><span style="color: #ff0000">                            value</span><span style="color: #0000ff">=&#8221;false&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;unique.name&#8221;</span><span style="color: #ff0000">                    value</span><span style="color: #0000ff">=&#8221;${name}&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;appxml.src.file&#8221;</span><span style="color: #ff0000">                value</span><span style="color: #0000ff">=&#8221;${basedir}/src/application.xml&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;lib.dir&#8221;</span><span style="color: #ff0000">                        value</span><span style="color: #0000ff">=&#8221;${basedir}/lib&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;src.dir&#8221;</span><span style="color: #ff0000">                        value</span><span style="color: #0000ff">=&#8221;${basedir}/src&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;java.src.dir&#8221;</span><span style="color: #ff0000">                   value</span><span style="color: #0000ff">=&#8221;${src.dir}/java&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;web.src.dir&#8221;</span><span style="color: #ff0000">                    value</span><span style="color: #0000ff">=&#8221;${src.dir}/web&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;build.dir&#8221;</span><span style="color: #ff0000">                      value</span><span style="color: #0000ff">=&#8221;${basedir}/build&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;build.java.dir&#8221;</span><span style="color: #ff0000">                 value</span><span style="color: #0000ff">=&#8221;${build.dir}/java&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;build.gen-src.dir&#8221;</span><span style="color: #ff0000">              value</span><span style="color: #0000ff">=&#8221;${build.dir}/gen-src&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;build.classes.dir&#8221;</span><span style="color: #ff0000">              value</span><span style="color: #0000ff">=&#8221;${build.dir}/classes&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #ff0000">&amp;database;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> define the datasource.jndi.name in case the imported ejb file doesn&#8217;t </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;datasource.jndi.name&#8221;</span><span style="color: #ff0000">           value</span><span style="color: #0000ff">=&#8221;${name}/datasource&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">path </span><span style="color: #ff0000">id</span><span style="color: #0000ff">=&#8221;lib.class.path&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">pathelement </span><span style="color: #ff0000">path</span><span style="color: #0000ff">=&#8221;${database.driver.classpath}&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset </span><span style="color: #ff0000">dir</span><span style="color: #0000ff">=&#8221;${lib.dir}&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;*.jar&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> The middlegen jars </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000">fileset dir=&#8221;${basedir}/..&#8221;</span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset </span><span style="color: #ff0000">dir</span><span style="color: #0000ff">=&#8221;${basedir}/middlegen-lib&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;*.jar&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">path</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;init&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">available </span><span style="color: #ff0000">property</span><span style="color: #0000ff">=&#8221;xdoclet1.2+&#8221;</span><span style="color: #ff0000"> classname</span><span style="color: #0000ff">=&#8221;xdoclet.modules.hibernate.HibernateDocletTask&#8221;</span><span style="color: #ff0000"> classpathref</span><span style="color: #0000ff">=&#8221;lib.class.path&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Fails if XDoclet 1.2.x is not on classpath                          </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;fail-if-no-xdoclet-1.2&#8243;</span><span style="color: #ff0000"> unless</span><span style="color: #0000ff">=&#8221;xdoclet1.2+&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fail</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
You must download several jar files before you can build Middlegen.<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fail</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Create tables                                                       </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;create-tables&#8221;</span><span style="color: #ff0000"><br />
depends</span><span style="color: #0000ff">=&#8221;init,fail-if-no-xdoclet-1.2,check-driver-present,panic-if-driver-not-present&#8221;</span><span style="color: #ff0000"><br />
description</span><span style="color: #0000ff">=&#8221;Create tables&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">echo</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Creating tables using URL ${database.url}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">echo</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">sql<br />
</span><span style="color: #ff0000">classpath</span><span style="color: #0000ff">=&#8221;${database.driver.classpath}&#8221;</span><span style="color: #ff0000"><br />
driver</span><span style="color: #0000ff">=&#8221;${database.driver}&#8221;</span><span style="color: #ff0000"><br />
url</span><span style="color: #0000ff">=&#8221;${database.url}&#8221;</span><span style="color: #ff0000"><br />
userid</span><span style="color: #0000ff">=&#8221;${database.userid}&#8221;</span><span style="color: #ff0000"><br />
password</span><span style="color: #0000ff">=&#8221;${database.password}&#8221;</span><span style="color: #ff0000"><br />
src</span><span style="color: #0000ff">=&#8221;${database.script.file}&#8221;</span><span style="color: #ff0000"><br />
print</span><span style="color: #0000ff">=&#8221;true&#8221;</span><span style="color: #ff0000"><br />
output</span><span style="color: #0000ff">=&#8221;result.txt&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;check-driver-present&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">available </span><span style="color: #ff0000">file</span><span style="color: #0000ff">=&#8221;${database.driver.file}&#8221;</span><span style="color: #ff0000"> type</span><span style="color: #0000ff">=&#8221;file&#8221;</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">=&#8221;driver.present&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;panic-if-driver-not-present&#8221;</span><span style="color: #ff0000"> unless</span><span style="color: #0000ff">=&#8221;driver.present&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fail</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
The JDBC driver you have specified by including one of the files in ${basedir}/config/database<br />
doesn&#8217;t exist. You have to download this driver separately and put it in ${database.driver.file}<br />
Please make sure you&#8217;re using a version that is equal or superior to the one we looked for.<br />
If you name the driver jar file differently, please update the database.driver.file property<br />
in the ${basedir}/config/database/xxx.xml file accordingly.<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fail</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Run Middlegen                                                       </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;middlegen&#8221;</span><span style="color: #ff0000"><br />
description</span><span style="color: #0000ff">=&#8221;Run Middlegen&#8221;</span><span style="color: #ff0000"><br />
unless</span><span style="color: #0000ff">=&#8221;middlegen.skip&#8221;</span><span style="color: #ff0000"><br />
depends</span><span style="color: #0000ff">=&#8221;init,fail-if-no-xdoclet-1.2,check-driver-present,panic-if-driver-not-present&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir </span><span style="color: #ff0000">dir</span><span style="color: #0000ff">=&#8221;${build.gen-src.dir}&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">echo </span><span style="color: #ff0000">message</span><span style="color: #0000ff">=&#8221;Class path = ${basedir}&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taskdef<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;middlegen&#8221;</span><span style="color: #ff0000"><br />
classname</span><span style="color: #0000ff">=&#8221;middlegen.MiddlegenTask&#8221;</span><span style="color: #ff0000"><br />
classpathref</span><span style="color: #0000ff">=&#8221;lib.class.path&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">middlegen<br />
</span><span style="color: #ff0000">appname</span><span style="color: #0000ff">=&#8221;${name}&#8221;</span><span style="color: #ff0000"><br />
prefsdir</span><span style="color: #0000ff">=&#8221;${src.dir}&#8221;</span><span style="color: #ff0000"><br />
gui</span><span style="color: #0000ff">=&#8221;${gui}&#8221;</span><span style="color: #ff0000"><br />
databaseurl</span><span style="color: #0000ff">=&#8221;${database.url}&#8221;</span><span style="color: #ff0000"><br />
initialContextFactory</span><span style="color: #0000ff">=&#8221;${java.naming.factory.initial}&#8221;</span><span style="color: #ff0000"><br />
providerURL</span><span style="color: #0000ff">=&#8221;${java.naming.provider.url}&#8221;</span><span style="color: #ff0000"><br />
datasourceJNDIName</span><span style="color: #0000ff">=&#8221;${datasource.jndi.name}&#8221;</span><span style="color: #ff0000"><br />
driver</span><span style="color: #0000ff">=&#8221;${database.driver}&#8221;</span><span style="color: #ff0000"><br />
username</span><span style="color: #0000ff">=&#8221;${database.userid}&#8221;</span><span style="color: #ff0000"><br />
password</span><span style="color: #0000ff">=&#8221;${database.password}&#8221;</span><span style="color: #ff0000"><br />
schema</span><span style="color: #0000ff">=&#8221;${database.schema}&#8221;</span><span style="color: #ff0000"><br />
catalog</span><span style="color: #0000ff">=&#8221;${database.catalog}&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"><br />
We can specify what tables we want Data generated for.<br />
If none are specified, Data will be generated for all tables.<br />
Comment out the &lt;table&gt; elements if you want to generate for all tables.<br />
Also note that table names are CASE SENSITIVE for certain databases,<br />
so on e.g. Oracle you should specify table names in upper case.<br />
</span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000">table generate=&#8221;true&#8221; name=&#8221;flights&#8221; pktable=&#8221;flights_pk&#8221;/&gt;<br />
&lt;table name=&#8221;reservations&#8221;/</span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"><br />
If you want m:n relations, they must be specified like this.<br />
Note that tables declare in multiple locations must all have<br />
the same value of the generate attribute.<br />
</span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000">many2many&gt;<br />
&lt;tablea generate=&#8221;true&#8221; name=&#8221;persons&#8221;/&gt;<br />
&lt;jointable name=&#8221;reservations&#8221; generate=&#8221;false&#8221;/&gt;<br />
&lt;tableb generate=&#8221;true&#8221; name=&#8221;flights&#8221;/&gt;<br />
&lt;/many2many</span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Plugins - Only Hibernate Plugin has been included with this special distribution  </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"><br />
If you want to generate XDoclet markup for hbm2java to include in the POJOs then<br />
set genXDocletTags to true. Also, composite keys are generated as external classes which is<br />
recommended. If you wish to keep them internal then set genIntergratedCompositeKeys to true.<br />
Since r4 the ability to customise the selection of JavaTypes is now provided. The is a<br />
recommended type mapper provided as shown. It is optional - if not provided then Middlegen<br />
itself will select the Java mapping (as it did previously).<br />
These settings are optional thus if they are not define here values default to false.<br />
</span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">hibernate<br />
</span><span style="color: #ff0000">destination</span><span style="color: #0000ff">=&#8221;${build.gen-src.dir}&#8221;</span><span style="color: #ff0000"><br />
package</span><span style="color: #0000ff">=&#8221;${myPackage}&#8221;</span><span style="color: #ff0000"><br />
genXDocletTags</span><span style="color: #0000ff">=&#8221;true&#8221;</span><span style="color: #ff0000"><br />
genIntergratedCompositeKeys</span><span style="color: #0000ff">=&#8221;false&#8221;</span><span style="color: #ff0000"><br />
javaTypeMapper</span><span style="color: #0000ff">=&#8221;middlegen.plugins.hibernate.HibernateJavaTypeMapper&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">middlegen</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir </span><span style="color: #ff0000">dir</span><span style="color: #0000ff">=&#8221;${build.classes.dir}&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Compile business logic (hibernate)                                        </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;compile-hibernate&#8221;</span><span style="color: #ff0000"> depends</span><span style="color: #0000ff">=&#8221;middlegen&#8221;</span><span style="color: #ff0000"> description</span><span style="color: #0000ff">=&#8221;Compile hibernate Business Domain Model&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">javac<br />
</span><span style="color: #ff0000">srcdir</span><span style="color: #0000ff">=&#8221;${build.gen-src.dir}&#8221;</span><span style="color: #ff0000"><br />
destdir</span><span style="color: #0000ff">=&#8221;${build.classes.dir}&#8221;</span><span style="color: #ff0000"><br />
classpathref</span><span style="color: #0000ff">=&#8221;lib.class.path&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;**/hibernate/**/*&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">javac</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Run hbm2java    depends=&#8221;middlegen&#8221;                                 </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;hbm2java&#8221;</span><span style="color: #ff0000"> description</span><span style="color: #0000ff">=&#8221;Generate .java from .hbm files.&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taskdef<br />
</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;hbm2java&#8221;</span><span style="color: #ff0000"><br />
classname</span><span style="color: #0000ff">=&#8221;net.sf.hibernate.tool.hbm2java.Hbm2JavaTask&#8221;</span><span style="color: #ff0000"><br />
classpathref</span><span style="color: #0000ff">=&#8221;lib.class.path&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">hbm2java </span><span style="color: #ff0000">output</span><span style="color: #0000ff">=&#8221;${build.gen-src.dir}&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset </span><span style="color: #ff0000">dir</span><span style="color: #0000ff">=&#8221;${build.gen-src.dir}&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;**/*.hbm.xml&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">hbm2java</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Build everything                                                    </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;all&#8221;</span><span style="color: #ff0000"> description</span><span style="color: #0000ff">=&#8221;Build everything&#8221;</span><span style="color: #ff0000"> depends</span><span style="color: #0000ff">=&#8221;compile-hibernate&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Clean everything                                                    </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;clean&#8221;</span><span style="color: #ff0000"> description</span><span style="color: #0000ff">=&#8221;Clean all generated stuff&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">delete </span><span style="color: #ff0000">dir</span><span style="color: #0000ff">=&#8221;${build.dir}&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Brings up the hsqldb admin tool                                     </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> =================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;hsqldb-gui&#8221;</span><span style="color: #ff0000"> description</span><span style="color: #0000ff">=&#8221;Brings up the hsqldb admin tool&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;database.urlparams&#8221;</span><span style="color: #ff0000"> value</span><span style="color: #0000ff">=&#8221;?user=${database.userid}&amp;amp;password=${database.password}&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">java<br />
</span><span style="color: #ff0000">classname</span><span style="color: #0000ff">=&#8221;org.hsqldb.util.DatabaseManager&#8221;</span><span style="color: #ff0000"><br />
fork</span><span style="color: #0000ff">=&#8221;yes&#8221;</span><span style="color: #ff0000"><br />
classpath</span><span style="color: #0000ff">=&#8221;${lib.dir}/hsqldb-1.7.1.jar;${database.driver.classpath}&#8221;</span><span style="color: #ff0000"><br />
failonerror</span><span style="color: #0000ff">=&#8221;true&#8221;</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">arg </span><span style="color: #ff0000">value</span><span style="color: #0000ff">=&#8221;-url&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">arg </span><span style="color: #ff0000">value</span><span style="color: #0000ff">=&#8221;${database.url}${database.urlparams}&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">arg </span><span style="color: #ff0000">value</span><span style="color: #0000ff">=&#8221;-driver&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">arg </span><span style="color: #ff0000">value</span><span style="color: #0000ff">=&#8221;${database.driver}&#8221;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">java</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> ==================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> Validate the generated xml mapping documents                         </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!&#8211;</span><span style="color: #008000"> ==================================================================== </span><span style="color: #008000">&#8211;&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target </span><span style="color: #ff0000">name</span><span style="color: #0000ff">=&#8221;validate&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">xmlvalidate </span><span style="color: #ff0000">failonerror</span><span style="color: #0000ff">=&#8221;no&#8221;</span><span style="color: #ff0000"> lenient</span><span style="color: #0000ff">=&#8221;no&#8221;</span><span style="color: #ff0000"> warn</span><span style="color: #0000ff">=&#8221;yes&#8221;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset </span><span style="color: #ff0000">dir</span><span style="color: #0000ff">=&#8221;${build.gen-src.dir}/airline/hibernate&#8221;</span><span style="color: #ff0000"> includes</span><span style="color: #0000ff">=&#8221;*.xml&#8221;</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">xmlvalidate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">project</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><br />
<font color="#ff0000">记得把2.0.2下面的hibernate-tools.jar文件拷贝到Middlegen-Hibernate-r5\lib下</font><br />
,当然config下面的数据库配置文件也要设置为你自己的环境</p>
<p>如果你不想用ant来自动化做也可以通过dos命令行的方式来执行,命令如下:<br />
hbm2java  c:\sample\org\hibernate\sample\*.xml  &#8211;output=c:\sample\<br />
,前提是要设置下hibernate-extensions-2.1.2\tools\bin下的setenv.dat文件</p>


<p>Related posts:<ol><li><a href='http://www.foxlog.org/2006/03/16/intellij-idea-live-templates-for-hibernate-xdoclet-tags/' rel='bookmark' title='Permanent Link: IntelliJ IDEA Live Templates for Hibernate XDoclet-tags'>IntelliJ IDEA Live Templates for Hibernate XDoclet-tags</a></li><li><a href='http://www.foxlog.org/2006/02/24/middlegen%e6%80%aa%e9%97%ae%e9%a2%98%e7%94%9f%e6%88%90%e7%9a%84hbmxml%e6%96%87%e4%bb%b6%e7%9a%84%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b%e5%92%8c%e6%95%b0%e6%8d%ae%e5%ba%93%e7%b1%bb%e5%9e%8b%e4%b8%8d/' rel='bookmark' title='Permanent Link: MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致'>MiddleGen怪问题,生成的hbm.xml文件的数据类型和数据库类型不一致</a></li><li><a href='http://www.foxlog.org/2006/12/07/middlegen%e4%b8%ad%e9%85%8d%e7%bd%aehibernate%e7%9a%84many-to-many%e5%b1%9e%e6%80%a7/' rel='bookmark' title='Permanent Link: MiddleGen中配置hibernate的many to many属性'>MiddleGen中配置hibernate的many to many属性</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.foxlog.org/2006/02/17/%e5%a5%87%e6%80%aahibernate-extensions%e7%94%9f%e6%88%90%e7%9a%84pojo%e6%b2%a1%e6%9c%89equals%e5%92%8chashcode%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
