<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>lamono</title>
    <description></description>
    <link>http://lamono.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>MultipartFile上传文件 获取文件名大小写问题</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/59521" style="color:red;">http://lamono.javaeye.com/blog/59521</a>&nbsp;
          发表时间: 2007年03月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我用MultipartFile上传文件的时候，文件名本身是大小写混合的，但是上传到服务器端的时候，用getOriginalFilename()获取的文件名全变成小写了。<br />有谁碰到过这个问题吗？找了半天不知道怎么解决，由于文件之间的关联性，不能改文件名称。
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/59521#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 Mar 2007 11:08:03 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/59521</link>
        <guid>http://lamono.javaeye.com/blog/59521</guid>
      </item>
      <item>
        <title>[转]JVM调优</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49131" style="color:red;">http://lamono.javaeye.com/blog/49131</a>&nbsp;
          发表时间: 2006年12月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <table cellspacing="1" border="0" cellpadding="1"><tbody><tr><td><h3>[转]JVM调优</h3>
          </td>
        </tr>
        <tr> 
          <td height="5"><br /></td>
        </tr>
        <tr> 
          <td><span>ZhangLiHai发表于 2006-9-25 11:35:17</span> </td>
        </tr>
<!--
        <tr>

          <td>关键词:jvm optimize</td>
        </tr>
-->
<tr><td align="center"><br />


<br />
</td></tr>
        <tr> 
          <td> 
      <!--内容开始-->
      <p>
            </p><div>1. Heap设定与垃圾回收</div><div>Java Heap分为3个区，Young，Old和Permanent。Young保存刚实例化的对象。当该区被填满时，GC会将对象移到Old区。Permanent区则负责保存反射对象，本文不讨论该区。</div><div>JVM的Heap分配可以使用-X参数设定，</div><table cellspacing="0" border="1" style="background: rgb(238, 204, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 90%;" cellpadding="0"><tbody><tr><td style="padding: 1.5pt;"><div align="left">-Xms</div></td><td style="padding: 1.5pt;"><div align="left">初始Heap大小 </div></td></tr><tr><td style="padding: 1.5pt;"><div align="left">-Xmx</div></td><td style="padding: 1.5pt;"><div align="left">java heap最大值 </div></td></tr><tr><td style="padding: 1.5pt;"><div align="left">-Xmn</div></td><td style="padding: 1.5pt;"><div align="left">young generation的heap大小</div></td></tr></tbody></table><div>JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时，遍历Heap，将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn，不能将-Xms的值设的过大，因为第二个线程被迫运行会降低JVM的性能。</div><div>为什么一些程序频繁发生GC？有如下原因：</div><div style="margin-left: 21pt; text-indent: -21pt;"><span>l<span style="font-family: &apos;Times New Roman&apos;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>程序内调用了System.gc()或Runtime.gc()。</div><div style="margin-left: 21pt; text-indent: -21pt;"><span>l<span style="font-family: &apos;Times New Roman&apos;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>一些中间件软件调用自己的GC方法，此时需要设置参数禁止这些GC。</div><div style="margin-left: 21pt; text-indent: -21pt;"><span>l<span style="font-family: &apos;Times New Roman&apos;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Java的Heap太小，一般默认的Heap值都很小。</div><div style="margin-left: 21pt; text-indent: -21pt;"><span>l<span style="font-family: &apos;Times New Roman&apos;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>频繁实例化对象，Release对象。此时尽量保存并重用对象，例如使用StringBuffer()和String()。</div><div>如果你发现每次GC后，Heap的剩余空间会是总空间的50%，这表示你的Heap处于健康状态。许多Server端的Java程序每次GC后最好能有65%的剩余空间。</div><div>经验之谈：</div><div><span style="color: red;">1</span><span style="color: red;">．</span><span style="color: red;">Server</span><span style="color: red;">端</span><span style="color: red;">JVM</span><span style="color: red;">最好将</span><span style="color: red;">-Xms</span><span style="color: red;">和</span><span style="color: red;">-Xmx</span><span style="color: red;">设为相同值。为了优化</span><span style="color: red;">GC</span><span style="color: red;">，最好让</span><span style="color: red;">-Xmn</span><span style="color: red;">值约等于</span><span style="color: red;">-Xmx</span><span style="color: red;">的</span><span style="color: red;">1/3[2]</span><span style="color: red;">。</span></div><div><span style="color: red;">2</span><span style="color: red;">．一个</span><span style="color: red;">GUI</span><span style="color: red;">程序最好是每</span><span style="color: red;">10</span><span style="color: red;">到</span><span style="color: red;">20</span><span style="color: red;">秒间运行一次</span><span style="color: red;">GC</span><span style="color: red;">，每次在半秒之内完成</span><span style="color: red;">[2]</span><span style="color: red;">。</span></div><div>&nbsp;</div><div>注意：</div><div>1．增加Heap的大小虽然会降低GC的频率，但也增加了每次GC的时间。并且GC运行时，所有的用户线程将暂停，也就是GC期间，Java应用程序不做任何工作。</div><div>2．Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值，因为Java为其他任务分配内存，例如每个线程的Stack等。</div><div>&nbsp;</div><div>2．Stack的设定</div><div>每个线程都有他自己的Stack。</div><table cellspacing="0" border="1" style="background: rgb(238, 204, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 90%;" cellpadding="0"><tbody><tr><td style="padding: 1.5pt;"><div align="left"><span style="font-size: 12pt;">-Xss</span></div></td><td style="padding: 1.5pt;"><div align="left"><span style="font-size: 12pt;">每个线程的</span><span style="font-size: 12pt;">Stack</span><span style="font-size: 12pt;">大小</span></div></td></tr></tbody></table><div>Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小，例如-Xss1024K。如果Stack太小，也会导致Stack溢漏。</div><div>3．硬件环境</div><div>硬件环境也影响GC的效率，例如机器的种类，内存，swap空间，和CPU的数量。</div><div>如果你的程序需要频繁创建很多transient对象，会导致JVM频繁GC。这种情况你可以增加机器的内存，来减少Swap空间的使用[2]。</div><div>4．4种GC</div><div>第一种为单线程GC，也是默认的GC。，该GC适用于单CPU机器。</div><div>第二种为Throughput GC，是多线程的GC，适用于多CPU，使用大量线程的程序。第二种GC与第一种GC相似，不同在于GC在收集Young区是多线程的，但在Old区和第一种一样，仍然采用单线程。-XX:+UseParallelGC参数启动该GC。</div><div>第三种为Concurrent Low Pause GC，类似于第一种，适用于多CPU，并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时，运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。</div><div>第四种为Incremental Low Pause GC，适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时，回收一部分Old区对象。-Xincgc参数启动该GC。</div><div>4种GC的具体描述参见[3]。</div><div>&nbsp;</div><div>参考文章：</div><div align="left">1. JVM Tuning. <a href="http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp#garbage-collection"><u><font color="#0000ff">http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp#garbage-collection</font></u></a></div><div align="left">2. Performance tuning Java: Tuning steps</div><div align="left"><a href="http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,1604,00.html"><u><font color="#0000ff">http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,1604,00.html</font></u></a></div><div align="left">3. Tuning Garbage Collection with the 1.4.2 JavaTM Virtual Machine .</div><div align="left"><a href="http://java.sun.com/docs/hotspot/gc1.4.2/"><u><font color="#0000ff">http://java.sun.com/docs/hotspot/gc1.4.2/</font></u></a></div><div align="left">&nbsp;</div>原文地址：<a href="http://blog.csdn.net/tyrone1979/archive/2006/09/25/1274458.aspx">http://blog.csdn.net/tyrone1979/archive/2006/09/25/1274458.aspx</a>&nbsp;</td></tr></tbody></table>
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49131#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 12 Dec 2006 00:52:05 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49131</link>
        <guid>http://lamono.javaeye.com/blog/49131</guid>
      </item>
      <item>
        <title>hibernate二级缓存攻略</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49132" style="color:red;">http://lamono.javaeye.com/blog/49132</a>&nbsp;
          发表时间: 2006年12月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>原贴地址:http://www.javaeye.com/topic/18904</p><p>参考文档:http://www.devx.com/dbzone/Article/29685/1954?pf=true<br /></p><p>很多人对二级缓存都不太了解，或者是有错误的认识，我一直想写一篇文章介绍一下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><b>Class的缓存</b>
<br />对于一条记录，也就是一个PO来说，是根据ID来找的，缓存的key就是ID，value是POJO。无论list，load还是
iterate，只要读出一个对象，都会填充缓存。但是list不会使用缓存，而iterate会先取数据库select
id出来，然后一个id一个id的load，如果在缓存里面有，就从缓存取，没有的话就去数据库load。假设是读写缓存，需要设置：
<br />&lt;cache usage=&quot;read-write&quot;/&gt;
<br />如果你使用的二级缓存实现是ehcache的话，需要配置ehcache.xml
<br />&lt;cache name=&quot;com.xxx.pojo.Foo&quot; maxElementsInMemory=&quot;500&quot;
eternal=&quot;false&quot; timeToLiveSeconds=&quot;7200&quot; timeToIdleSeconds=&quot;3600&quot;
overflowToDisk=&quot;true&quot; /&gt;
<br />其中eternal表示缓存是不是永远不超时，timeToLiveSeconds是缓存中每个元素（这里也就是一个POJO）的超时时间，如
果eternal=&quot;false&quot;，超过指定的时间，这个元素就被移走了。timeToIdleSeconds是发呆时间，是可选的。当往缓存里面put
的元素超过500个时，如果overflowToDisk=&quot;true&quot;，就会把缓存中的部分数据保存在硬盘上的临时文件里面。
<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><b>查询缓存</b>
<br />首先需要配置hibernate.cache.use_query_cache=true
<br />如果用ehcache，配置ehcache.xml，注意hibernate3.0以后不是net.sf的包名了
<br />&lt;cache name=&quot;net.sf.hibernate.cache.StandardQueryCache&quot; 
<br />   maxElementsInMemory=&quot;50&quot; eternal=&quot;false&quot; timeToIdleSeconds=&quot;3600&quot; 
<br />   timeToLiveSeconds=&quot;7200&quot; overflowToDisk=&quot;true&quot;/&gt;
<br />&lt;cache name=&quot;net.sf.hibernate.cache.UpdateTimestampsCache&quot; 
<br />   maxElementsInMemory=&quot;5000&quot; eternal=&quot;true&quot; overflowToDisk=&quot;true&quot;/&gt;
<br />然后
<br />query.setCacheable(true);//激活查询缓存
<br />query.setCacheRegion(&quot;myCacheRegion&quot;);//指定要使用的cacheRegion，可选
<br />第二行指定要使用的cacheRegion是myCacheRegion，即你可以给每个查询缓存做一个单独的配置，使用setCacheRegion来做这个指定，需要在ehcache.xml里面配置它：
<br />&lt;cache name=&quot;myCacheRegion&quot; maxElementsInMemory=&quot;10&quot;
eternal=&quot;false&quot; timeToIdleSeconds=&quot;3600&quot; timeToLiveSeconds=&quot;7200&quot;
overflowToDisk=&quot;true&quot; /&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 />参数是&quot;tiger%&quot;，那么查询缓存的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 /><b>这里还有一个很容易被忽视的重要问题，即打开查询缓存以后，即使是list方法也可能遇到1+N的问题！</b>相同条件第一次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><b>Collection缓存</b>
<br />需要在hbm的collection里面设置
<br />&lt;cache usage=&quot;read-write&quot;/&gt;
<br />假如class是Cat，collection叫children，那么ehcache里面配置
<br />&lt;cache name=&quot;com.xxx.pojo.Cat.children&quot; 
<br />   maxElementsInMemory=&quot;20&quot; eternal=&quot;false&quot; timeToIdleSeconds=&quot;3600&quot; timeToLiveSeconds=&quot;7200&quot; 
<br />   overflowToDisk=&quot;true&quot; /&gt;
<br />Collection的缓存和前面查询缓存的list一样，也是只保持一串id，但它不会因为这个表更新过就失效，一个collection缓存仅在这个collection里面的元素有增删时才失效。
<br />这样有一个问题，如果你的collection是根据某个字段排序的，当其中一个元素更新了该字段时，导致顺序改变时，collection缓存里面的顺序没有做更新。</p>

<p><b>缓存策略</b>
<br />只读缓存（read-only）：没有什么好说的
<br />读/写缓存（read-write）:程序可能要的更新数据
<br />不严格的读/写缓存（nonstrict-read-write）：需要更新数据，但是两个事务更新同一条记录的可能性很小，性能比读写缓存好
<br />事务缓存（transactional）：缓存支持事务，发生异常的时候，缓存也能够回滚，只支持jta环境，这个我没有怎么研究过</p>

<p>读写缓存和不严格读写缓存在实现上的区别在于，读写缓存更新缓存的时候会把缓存里面的数据换成一个锁，其他事务如果去取相应的缓存数据，发现被锁住了，然后就直接取数据库查询。
<br />在hibernate2.1的ehcache实现中，如果锁住部分缓存的事务发生了异常，那么缓存会一直被锁住，直到60秒后超时。
<br />不严格读写缓存不锁定缓存中的数据。</p>

<p><b>使用二级缓存的前置条件</b>
<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>----------------------------------------------------</p>

<p><b>总结：</b>
<br />不要想当然的以为缓存一定能提高性能，仅仅在你能够驾驭它并且条件合适的情况下才是这样的。hibernate的二级缓存限制还是比较多的，不方便用jdbc可能会大大的降低更新性能。在不了解原理的情况下乱用，可能会有1+N的问题。不当的使用还可能导致读出脏数据。
<br />如果受不了hibernate的诸多限制，那么还是自己在应用程序的层面上做缓存吧。
<br />在越高的层面上做缓存，效果就会越好。就好像尽管磁盘有缓存，数据库还是要实现自己的缓存，尽管数据库有缓存，咱们的应用程序还是要做缓存。因为
底层的缓存它并不知道高层要用这些数据干什么，只能做的比较通用，而高层可以有针对性的实现缓存，所以在更高的级别上做缓存，效果也要好些吧。</p>
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49132#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 09 Dec 2006 04:41:08 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49132</link>
        <guid>http://lamono.javaeye.com/blog/49132</guid>
      </item>
      <item>
        <title>resin3.0.21配置jstl1.1文件</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49133" style="color:red;">http://lamono.javaeye.com/blog/49133</a>&nbsp;
          发表时间: 2006年12月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          由于resin3.0.21中自己实现了一套jstl，与sun实现的那一套好像有冲突，所以如果在代码中使用：<br />&lt;%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jstl/core&quot;%&gt;这样的sun标准标签库的时候<br />会报错或显示不出来。需要将resin自带的禁用。以下是解决方法：<br />1、将resin.conf文件的大约162行：<br />&lt;servlet servlet-name=&quot;directory&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servlet-class=&quot;com.caucho.servlets.DirectoryServlet&quot;/&gt;<br />改成：<br />&lt;servlet servlet-name=&quot;directory&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servlet-class=&quot;com.caucho.servlets.DirectoryServlet&quot;&gt;<br />&nbsp;&nbsp;&nbsp; <span style="font-weight: bold;">&lt;init enable=&quot;false&quot;/&gt;</span><br />&lt;/servlet&gt;<br /><br />2、在resin.conf文件中添加你的webapp的配置，注意要加上<span style="font-weight: bold;">&lt;jsp fast-jstl=&quot;false&quot;/&gt;</span><br />&lt;web-app id=&quot;/alumni&quot; document-directory=&quot;webapps/alumni&quot;&gt; <br />&nbsp;&nbsp;&nbsp; <span style="font-weight: bold;">&lt;jsp fast-jstl=&quot;false&quot;/&gt; &nbsp;</span>&nbsp;&nbsp; &nbsp; <br />&lt;/web-app&gt;<br />
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49133#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Dec 2006 18:00:49 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49133</link>
        <guid>http://lamono.javaeye.com/blog/49133</guid>
      </item>
      <item>
        <title>Hibernate+Oracle+CLOB的读写问题</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49134" style="color:red;">http://lamono.javaeye.com/blog/49134</a>&nbsp;
          发表时间: 2006年11月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>from:http://www.paypie.net/hibernateoracleclob%E7%9A%84%E8%AF%BB%E5%86%99%E9%97%AE%E9%A2%98.html<br /></p><p>我的环境是Oracle9i2+hibernate3<br />
使用原配的Oracle jdbc thin 驱动不能直接对clob对象进行直接操作。<br />
google了无数文章，仿造别人的办法，先写入一个空的clob对象，再读出，再写入真正的clob对象。不行，在BLOB blob =(BLOB) myObject.getClob 这里的类型强制转化就会出现问题。</p>
<p>使用hibernate官方论坛里面的重写一个数据类型的方式，则是出现String长度的错误。还试了很多种办法，均失败。</p>
<p>据说，Oracle 9i 里的jdbc oci驱动可以解决上面的问题，但我已经没有兴趣再去折腾了。</p>
<p>最后到Oracle网站上面注册了一个账户，下载了最新的Oracle 10g的jdbc驱动。<br />
一切就正常了。其实就是Oracle原来的驱动的问题。</p>
<p>使用新的驱动，这个问题就不再是问题了。</p>
<p>Hibernate+Oracle+CLOB的读写其实只要这样做：</p>
<p><strong>1.在Oracle里设置某字段为clob类型。<br />
2.在Hibernate的配置文件里使用网上下载的Oracle 10g最新的jdbc驱动。<br />
3.实体类里把clob字段对应的属性类型设置为String。<br />
4.hibernate的映射文件*.hbm.xml里把该字段对应的类型该为text。</strong></p>
<p>然后就可以在程序里把它当成String随便用了。</p>
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49134#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 29 Nov 2006 15:52:16 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49134</link>
        <guid>http://lamono.javaeye.com/blog/49134</guid>
      </item>
      <item>
        <title>FCKeditor在线编辑器的使用</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49135" style="color:red;">http://lamono.javaeye.com/blog/49135</a>&nbsp;
          发表时间: 2006年11月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><br /></p><p>一、使用说明：</p><p>参考http://doodoo.blog.enorth.com.cn/article/126662.shtml文档，不过好像很简单。主要步骤：</p><p>1、下载：下载地址：http://sourceforge.net/project/showfiles.php?group_id=75348&amp;package_id=75845<br />我用的是最新版FCKeditor_2.3.2.zip（包含editor和配置信息在里面）和FCKeditor_2.3.zip（包含jar包和tld文件，web.xml文件），</p><p>1、在tomcat的webapp下建立FCKeditor文件夹，将FCKeditor_2.3.zip解压后的web文件夹中内容拷贝（包括_simples和WEB-INF两个文件夹），将src下的FCKeditor.tld拷贝到tomcat/webapp/FCKeditor/WEB-INF下。</p><p>2、将FCKeditor_2.3.2.zip解压后里面的editor文件夹和fckconfig.js，fckeditor.js，fckstyles.xml，fcktemplates.xml四个文件拷贝到tomcat/webapp/FCKeditor下面。</p><p>3、修改web.xml,添加</p><p>&nbsp;&nbsp;&nbsp; &lt;taglib&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;taglib-uri&gt;/TestFCKeditor&lt;/taglib-uri&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;taglib-location&gt;/WEB-INF/FCKeditor.tld&lt;/taglib-location&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/taglib&gt;</p><p>通过上面三步，即完成下载和配置，</p><p>访问：http://localhost:8080/FCKeditor/_samples/index.jsp，即可看到效果。</p><p>/*--------------------------------------------------------------------------------------*/<br /></p><p>二、心得（from:http://mylog.lib.whpu.edu.cn/blogview.asp?logID=100）<br /></p><p>1、把所有配置文件集中在editor文件下，有利于管理。</p><p>及把原fckeditor&nbsp;下文件（fckconfig.js、fckeditor.js、fckeditor.asp、fckstyles.xml、fcktemplates.xml）copy到editor&nbsp;下。<br />1、需要修改editor/jsfck_startup.js&nbsp;,搜索</p><p>程序代码：</p><div>FCKScriptLoader.AddScript('../fckconfig.js')</div>&nbsp;改为<div>程序代码：</div><div>FCKScriptLoader.AddScript('fckconfig.js')</div>&nbsp;说明'fckconfig.js'与fckeditor.html&nbsp;在同一目录<br />2、修改fckconfig.js'<br />增加<br /><div>程序代码：</div><div>FCKConfig.BasePath=&quot;/../editor/&quot;<br /></div>将<br /><div>程序代码：</div><div>FCKConfig.StylesXmlPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;FCKConfig.EditorPath&nbsp;+&nbsp;'fckstyles.xml'&nbsp;;<br />FCKConfig.TemplatesXmlPath&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;FCKConfig.EditorPath&nbsp;+&nbsp;'fcktemplates.xml'&nbsp;;<br /></div>为<br /><div>程序代码：</div><div>FCKConfig.StylesXmlPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;FCKConfig.EditorPath&nbsp;+&nbsp;'editor/fckstyles.xml'&nbsp;;<br />FCKConfig.TemplatesXmlPath&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;FCKConfig.EditorPath&nbsp;+&nbsp;'editor/fcktemplates.xml'&nbsp;;<br /></div>或<br /><div>程序代码：</div>FCKConfig.StylesXmlPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;FCKConfig.BasePath&nbsp;+&nbsp;'fckstyles.xml'&nbsp;;<br />FCKConfig.TemplatesXmlPath&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;FCKConfig.BasePath&nbsp;+&nbsp;'fcktemplates.xml'&nbsp;;<br /><br />/*---------------------------------------------------------------------------------*/<br /><br />在jsp使用FCKEditor浏览服务器图片时错误：XML request error: Internal Server Error(500)<br />我的这个错误的原因：没有xml解析器。<br />解决方法如下：<br />去 <a href="http://apache.justdn.org/xml/xalan-j/binaries/">http://apache.justdn.org/xml/xalan-j/binaries/</a><br />下载 xalan-j_2_7_0-bin-2jars.zip<br />解压后把 xalan.jar，serializer.jar拷贝到应用的lib目录下，ok。<br /><br />参考资料：<br />1、<a href="http://www.webjx.com/htmldata/2006-10-13/1160724595.html" target="_blank">在jsp环境中配置使用FCKEditor</a><br />2、<a href="http://doodoo.blog.enorth.com.cn/article/126662.shtml" target="_blank">FCKeditor在线编辑器使用</a><br />3、http://sourceforge.net/project/showfiles.php?group_id=75348&amp;package_id=75845<br />
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49135#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Nov 2006 02:14:51 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49135</link>
        <guid>http://lamono.javaeye.com/blog/49135</guid>
      </item>
      <item>
        <title>使用FileUpload组件上传文件</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49136" style="color:red;">http://lamono.javaeye.com/blog/49136</a>&nbsp;
          发表时间: 2006年11月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&amp;threadID=8025&amp;tstart=0&amp;quint=true" target="_blank">http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&amp;threadID=8025&amp;tstart=0&amp;quint=true</a><br /><br /><span><span>文件上传在web应用中非常普遍，要在jsp环境中实现文件上传功能是非常容易的，因为网上有许多用java开发的文件上传组件，本文以commons-fileupload组件为例，为jsp应用添加文件上传功能。<br />common-fileupload组件是apache的一个开源项目之一，可以从http://jakarta.apache.org/commons/fileupload/下载。用该组件可实现一次上传一个或多个文件，并可限制文件大小。<br />下载后解压zip包，将commons-fileupload-1.0.jar复制到tomcat的webapps\你的webapp\WEB-INF\lib\下，目录不存在请自建目录。<br />新建一个servlet: Upload.java用于文件上传：<br />import java.io.*;<br />import java.util.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />import org.apache.commons.fileupload.*;<br /><br />public class Upload extends HttpServlet {<br /><br />&nbsp;&nbsp;&nbsp; private String uploadPath = &quot;C:\\upload\\&quot;; // 上传文件的目录<br />&nbsp;&nbsp;&nbsp; private String tempPath = &quot;C:\\upload\\tmp\\&quot;; // 临时文件目录<br /><br />&nbsp;&nbsp;&nbsp; public void doPost(HttpServletRequest request,<br />&nbsp;&nbsp;&nbsp; HttpServletResponse response)<br />&nbsp;&nbsp;&nbsp; throws IOException, ServletException<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; }<br />}<br />在doPost()方法中，当servlet收到浏览器发出的Post请求后，实现文件上传。以下是示例代码：<br />public void doPost(HttpServletRequest request,<br />HttpServletResponse response)<br />throws IOException, ServletException<br />{<br />&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DiskFileUpload fu = new DiskFileUpload();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置最大文件尺寸，这里是4MB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fu.setSizeMax(4194304);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置缓冲区大小，这里是4kb<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fu.setSizeThreshold(4096);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置临时目录：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fu.setRepositoryPath(tempPath);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 得到所有的文件：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List fileItems = fu.parseRequest(request);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator i = fileItems.iterator();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 依次处理每一个文件：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(i.hasNext()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileItem fi = (FileItem)i.next();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 获得文件名，这个文件名包括路径：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String fileName = fi.getName();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 在这里可以记录用户和文件信息<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 写入文件，暂定文件名为a.txt，可以从fileName中提取文件名：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi.write(new File(uploadPath + &quot;a.txt&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; catch(Exception e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 可以跳转出错页面<br />&nbsp;&nbsp;&nbsp; }<br />}<br />如果要在配置文件中读取指定的上传文件夹，可以在init()方法中执行：<br />public void init() throws ServletException {<br />&nbsp;&nbsp;&nbsp; uploadPath = ....<br />&nbsp;&nbsp;&nbsp; tempPath = ....<br />&nbsp;&nbsp;&nbsp; // 文件夹不存在就自动创建：<br />&nbsp;&nbsp;&nbsp; if(!new File(uploadPath).isDirectory())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new File(uploadPath).mkdirs();<br />&nbsp;&nbsp;&nbsp; if(!new File(tempPath).isDirectory())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new File(tempPath).mkdirs();<br />}<br />编译该servlet，注意要指定classpath，确保包含commons-upload-1.0.jar和tomcat\common\lib\servlet-api.jar。<br />配置servlet，用记事本打开tomcat\webapps\你的webapp\WEB-INF\web.xml，没有的话新建一个。<br />典型配置如下：<br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;<br />&lt;!DOCTYPE web-app<br />&nbsp;&nbsp;&nbsp; PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;<br />&nbsp;&nbsp;&nbsp; &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;<br /><br />&lt;web-app&gt;<br />&nbsp;&nbsp;&nbsp; &lt;servlet&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;Upload&lt;/servlet-name&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;Upload&lt;/servlet-class&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/servlet&gt;<br /><br />&nbsp;&nbsp;&nbsp; &lt;servlet-mapping&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;Upload&lt;/servlet-name&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/fileupload&lt;/url-pattern&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;<br />&lt;/web-app&gt;<br />配置好servlet后，启动tomcat，写一个简单的html测试：<br />&lt;form action=&quot;fileupload&quot; method=&quot;post&quot;<br />enctype=&quot;multipart/form-data&quot; name=&quot;form1&quot;&gt;<br />&nbsp; &lt;input type=&quot;file&quot; name=&quot;file&quot;&gt;<br />&nbsp; &lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;upload&quot;&gt;<br />&lt;/form&gt;<br />注意action=&quot;fileupload&quot;其中fileupload是配置servlet时指定的url-pattern。</span></span><br />
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49136#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 08 Nov 2006 02:50:19 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49136</link>
        <guid>http://lamono.javaeye.com/blog/49136</guid>
      </item>
      <item>
        <title>hibernate结合mysql产生hbm映射文件和POJO</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49137" style="color:red;">http://lamono.javaeye.com/blog/49137</a>&nbsp;
          发表时间: 2006年10月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.chinaitpower.com/A/2004-10-23/146294.html" target="_blank">配置<font color="#cc0033">Middlegen</font>-<font color="#cc0033">Hibernate</font>和<font color="#cc0033">hibernate</font>-extensions以产生hbm映射文件和POJO</a><br /><br />说明，此方法目前只适应与hibernate2.x版本，生成的.hbm.xml文件可能要做相应的修改才能适应hibernate3.2<br /><br />步骤 ：<br />1、配置环境&nbsp;&nbsp;  <br />&nbsp;&nbsp;&nbsp; 下载地址
<br />&nbsp;&nbsp;&nbsp; （1）Middlegen-Hibernate-r5：http://prdownloads.sourceforge.net/hibernate/
<br />&nbsp;&nbsp;&nbsp; （2）hibernate-2.1：http://prdownloads.sourceforge.net/hibernate/
<br />&nbsp;&nbsp;&nbsp; （3）hibernate-extensions-2.1.3：http://prdownloads.sourceforge.net/hibernate/
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 保存如下目录结构：<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;  d:\hibernate<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  |- hibernate-2.1<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp; |- hibernate-extensions-2.1.3<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp; |- Middlegen-Hibernate-r5<br />2、通过middlegen生成hbm.xml代码&nbsp; &nbsp;&nbsp;&nbsp;  <br />













<p><font size="2"><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2.1 </span><span style="font-family: 宋体;">配置数据库连接<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 假设连接的数据库是</span><span>MySQL</span><span style="font-family: 宋体;">，在</span><span>Middlegen-Hibernate-r5\config\database</span><span style="font-family: 宋体;">目录中有一个</span><span>&nbsp;&nbsp; mysql.xml</span><span style="font-family: 宋体;">文件，是用来配置</span><span>MySQL</span><span style="font-family: 宋体;">数据库的连接的。内容为：</span></font><br /><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.script.file&quot; value=&quot;${src.dir}/sql/${name}-mysql.sql&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.driver.file&quot; value=&quot;${lib.dir}/<span style="color: red;">mysql-connector-java-3.0.15-ga-bin.jar</span>&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.driver.classpath&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;${database.driver.file}&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.driver&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;org.gjt.mm.mysql.Driver&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.url&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;<span style="color: red;">jdbc:mysql://localhost/jboss</span>&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.userid&quot; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>value=&quot;<span style="color: red;">jboss</span>&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.password&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;<span style="color: red;">jboss</span>&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.schema&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.catalog&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;jboss.datasource.mapping&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;mySQL&quot;/&gt;</font></span><br /><font size="2"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将</span><span>mysql-connector-java-3.0.15-ga-bin.jar</span><span style="font-family: 宋体;">拷贝到</span><span>${lib.dir}</span><span style="font-family: 宋体;">，也就是</span><span>Middlegen-Hibernate-r5\lib</span><span style="font-family: 宋体;">目录。<br />&nbsp;&nbsp;&nbsp; &nbsp; 修改配置文件中的数据库连接项目</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">database.url</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-family: 宋体;">、</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">database.userid</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-family: 宋体;">、</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">database.userid</span><span><span style="font-family: 宋体;">使</span><span>Middlegen-Hibernate</span><span style="font-family: 宋体;">可以找到数据库。&nbsp;&nbsp;&nbsp;  </span></span></font><br /></p><p><font size="2"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2 </span><span style="font-family: 宋体;">配置</span><span>Middlegen-Hibernate-r5</span><span style="font-family: 宋体;">的</span><span>ant</span><span style="font-family: 宋体;">运行文件</span><span>build.xml</span></font></p>


















<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">&lt;!DOCTYPE project [<span style="">&lt;!ENTITY database SYSTEM &quot;file:./config/database/<span style="color: red;">mysql.xml</span>&quot;&gt;]&gt;</span></font></span><br /><span style="font-family: 宋体;"><font size="2">指出使用的数据库配置文件。</font></span><br /><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">&lt;project name=&quot;Middlegen Hibernate&quot; default=&quot;all&quot; basedir=&quot;.&quot;&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property file=&quot;${basedir}/build.properties&quot;/&gt;<br /><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;name&quot; value=&quot;<span style="color: red;">hibernatesample</span>&quot;/&gt;</font></span><br /><span style="font-family: 宋体;"><font size="2">指出你的应用名称。</font></span><br /><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;build.gen-src.dir&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;<span style="color: red;">C:/sample</span>&quot;/&gt;</font></span><br /><font size="2"><span style="font-family: 宋体;">指出</span><span>hbm</span><span style="font-family: 宋体;">的输出路径。</span></font><br /><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;hibernate<br /><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>destination=&quot;${build.gen-src.dir}&quot;<br /><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>package=&quot;<span style="color: red;">org.hibernate.sample</span>&quot;<br /><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: red;">genXDocletTags=&quot;false&quot;</span><br /><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="">&nbsp;&nbsp;&nbsp;</span>genIntergratedCompositeKeys=&quot;false&quot;<br /><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>javaTypeMapper=&quot;middlegen.plugins.hibernate.HibernateJavaTypeMapper&quot;<br /><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/&gt;</font></span><br /><font size="2"><span style="font-family: 宋体;">指出</span><span>hbm</span><span style="font-family: 宋体;">所在的包的位置。<br />指出</span><span>hbm.xml</span><span style="font-family: 宋体;">中是否需要</span><span>XDoclet Tags</span><span style="font-family: 宋体;"></span></font></p>

<p><font size="2"><span style=""><span style="">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 2.3、<span style="font-family: &apos;Times New Roman&apos;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><span style="font-family: 宋体;">运行</span><span>Middlegen-Hibernate:</span><br /><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 在</span><span>Middlegen-Hibernate</span><span style="font-family: 宋体;">目录下运行</span><span>ant</span><span style="font-family: 宋体;">，进入</span><span>Middlegen-Hibernate</span><span style="font-family: 宋体;">的图形界面。可以设置表，和字段的特性。然后按</span><span>Genarate</span><span style="font-family: 宋体;">，产生</span><span>hbm.xml</span><span style="font-family: 宋体;">文件。</span></font></p><p><font size="2"><span style="font-family: 宋体;">&nbsp;&nbsp; 3、通过</span></font><font size="2"><span>hibernate-extensions由.hml.xml文件生成POJO文件</span></font></p><p><font size="2"><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  3.1、</span></font><font size="2"><span style="font-family: 宋体;">置</span><span>hibernate-extensions</span><br /><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 在</span><span>hibernate-extensions-2.1.2\tools\bin</span><span style="font-family: 宋体;">目录有一个</span><span>setenv.bat</span><span style="font-family: 宋体;">文件，改变其内容为：</span></font></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set JDBC_DRIVER=<span style="color: red;">C:\java\Middlegen-Hibernate-r5\lib\mysql-connector-java-3.0.15-ga-bin.jar</span></font></span></p>

<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set HIBERNATE_HOME=<span style="color: red;">C:\java\hibernate-2.1.6</span></font><font size="2"><br /></font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set CORELIB=%HIBERNATE_HOME%\lib</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set LIB=..\lib</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set PROPS=%HIBERNATE_HOME%\src</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set CP=%JDBC_DRIVER%;%PROPS%;%HIBERNATE_HOME%\hibernate2.jar;%CORELIB%\</font></span></p><p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="color: red;">commons-logging-1.0.4.jar</span>;%CORELIB%\<span style="color: red;">commons-collections-2.1.1.jar</span>;%CORELIB%\</font></span></p><p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="color: red;">commons-lang-1.0.1.jar</span>;%CORELIB%\<span style="color: red;">cglib-full-2.0.2.jar</span>;%CORELIB%\<span style="color: red;">dom4j-1.4.jar;</span><br /></font></span></p><p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">%CORELIB%\<span style="color: red;">odmg-3.0.jar</span>;%CORELIB%\<span style="color: red;">xml-apis.jar</span>;%CORELIB%\<span style="color: red;">xerces-2.4.0.jar</span>;</font></span></p><p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">%CORELIB%\<span style="color: red;">xalan-2.4.0.jar</span>;%LIB%\<span style="color: red;">jdom.jar</span>;%LIB%\..\<span style="color: red;">hibernate-tools.jar</span></font></span></p>
<p><font size="2"><span style="font-family: 宋体;">注意红色字体提示的均是路径和</span><span>JAR</span><span style="font-family: 宋体;">文件名，一定要正确。</span></font></p><p><font size="2"><span style="font-family: 宋体;">&nbsp;&nbsp;&nbsp;&nbsp; 3.2、</span></font><font size="2"><span style="font-family: 宋体;">运行</span><span>hibernate-extensions</span><span style="font-family: 宋体;">，根据</span><span>hbm.xml</span><span style="font-family: 宋体;">产生</span><span>POJO</span><span style="font-family: 宋体;">文件</span></font>
</p><p><font size="2"><span style="font-family: 宋体;">在</span><span>DOS</span><span style="font-family: 宋体;">中运行</span><span>hbm2java c:\sample\org\hibernate\sample\*.xml 命令<br /></span></font></p><p><font size="2"><span>在</span></font><font size="2"><span>hibernate-extensions-2.1.2\tools\bin目录下生成generated目录即为生成的POJO代码</span></font></p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;  <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49137#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Oct 2006 07:53:44 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49137</link>
        <guid>http://lamono.javaeye.com/blog/49137</guid>
      </item>
      <item>
        <title>Hibernate外围工具使用配置说明</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49138" style="color:red;">http://lamono.javaeye.com/blog/49138</a>&nbsp;
          发表时间: 2006年10月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div style="margin-left: 15px; margin-top: 1px;">
     <span style="font-size: 14pt; font-weight: bold;">
           Hibernate外围工具使用配置说明</span>
   </div>
  
  
   <div style="margin-left: 15px; margin-top: 5px;">
     <b>关键字:</b>  &nbsp;&nbsp;
     <br />from http://wind-bell.javaeye.com/blog/25266<br /> &nbsp;&nbsp;&nbsp;    
   </div>
  
      
          
       
         <p>一、下载地址
<br />（1）apache-ant-1.6.2：http://ant.apache.org/ 
<br />（2）Middlegen-Hibernate-r5：http://prdownloads.sourceforge.net/hibernate/
<br />（3）hibernate-2.0：http://prdownloads.sourceforge.net/hibernate/
<br />（4）hibernate-extensions-2.1：http://prdownloads.sourceforge.net/hibernate/
<br />解压到同一目录下，例如：d:\hibernate\ apache-ant-1.6.2，d:\hibernate\
Middlegen-Hibernate-r5，D:\hibernate\hibernate-2.0，D:\hibernate\hibernate
-extensions-2.1
<br />二、配置
<br />1、Ant的配置
<br />配置环境变量：
<br />我的电脑&not;&mdash;&mdash;&gt;属性&mdash;&mdash;&gt;高级&mdash;&mdash;&gt;环境变量&mdash;&mdash;&gt;系统变量&mdash;&mdash;&gt;Path
<br />编辑Path，添加如下配置：D:\hibernate\apache-ant-1.6.2\bin
<br />2、Middlegen-Hibernate-r5的配置
<br />Middlegen-Hibernate-r5是由数据库表自动生成配置文件。
<br />（1）配置数据库文件：
<br />将 db2驱动程序db2java.zip拷贝到D:/hibernate/Middlegen-Hibernate-r5/lib
<br />进入d:\hibernate\ Middlegen-Hibernate-r5目录下的\config\database 子目录，选择你要得数据库文件db2.xml：
<br />A、将属性database.driver.file的value改为：D:/hibernate/Middlegen-Hibernate-r5/lib/db2java.zip（db2的驱动程序路径）
<br />B、将属性database.url的value改为：jdbc:db2:dbName（数据库别名）
<br />C、将属性database.userid的value改为：userName（用户名）
<br />D、将属性database.password的vuale改为：password（密码）
<br />E、将属性database.schema的value改为：DB2INST1（表空间）
<br />（2）修改build.xml文件
<br />build.xml是Middlegen-Hibernate 的Ant构建配置。Middlegen-Hibernate将根据build.xml 文件中的具体参数生成数据库表映射文件
<br />A、24行  修改数据库连接
<br />将原来的
<br />&lt;!ENTITY database SYSTEM &quot;file:./config/database/hsqldb.xml&quot;&gt;
<br />改为
<br />&lt;!ENTITY database SYSTEM &quot;file:./config/database/db2.xml&quot;&gt;
<br />B、33行  修改应用名
<br />将原来的
<br />   &lt;property name=&quot;name&quot; value=&quot;airline&quot;/&gt;
<br />改成
<br />   &lt;property name=&quot;name&quot; value=&quot;HibernateSample&quot;/&gt;
<br />C、51行  修改输出目录
<br />将原来的
<br />&lt;property name=&quot;build.gen-src.dir&quot; value=&quot;${build.dir}/gen-src&quot;/&gt;
<br />改为
<br />&lt;property name=&quot;build.gen-src.dir&quot; value=&quot;D:/hibernate/Middlegen-Hibernate-r5/poss&quot;/&gt;
<br />D、185行  设置对应代码的Package name
<br />将原来的
<br />&lt;hibernate
<br />    destination=&quot;${build.gen-src.dir}&quot;
<br />    package=&quot;${name}.hibernate&quot;
<br />    genXDocletTags=&quot;false&quot;
<br />    genIntergratedCompositeKeys=&quot;false&quot;
<br />    javaTypeMapper=&quot;middlegen.plugins.hibernate.HibernateJavaTypeMapper&quot;/&gt;
<br />改为
<br />&lt;hibernate
<br />    destination=&quot;${build.gen-src.dir}&quot;
<br />    package=&quot;org.hibernate.sample&quot;
<br />    genXDocletTags=&quot;true&quot;
<br />    genIntergratedCompositeKeys=&quot;false&quot;
<br />    javaTypeMapper=&quot;middlegen.plugins.hibernate.HibernateJavaTypeMapper&quot;/&gt;
<br />说明：hibernate 节点package 属性的默认设置实际上是由前面的Application Name （${name}）和&ldquo;.hibernate&rdquo;组合而成，暂且设置成org.hibernate.sample。
<br />3、hibernate-extensions-2.1的配置
<br />（1）build.xml的配置
<br />进入D:\hibernate\hibernate-extensions-2.1\tools目录，打开build.xml
<br />A．42行
<br />改为：&lt;property name=&quot;hibernate-core.home&quot; value=&quot;D:/hibernate/hibernate-2.0&quot;/&gt;
<br />B．43行
<br />改为：&lt;property name=&quot;hibernate-core.jar&quot; value=&quot;${hibernate-core.home}/hibernate2.jar&quot;/&gt;
<br />（2）setenv.bat的配置
<br />进入D:\hibernate\hibernate-extensions-2.1\tools\bin目录，以编辑状态打开
<br />setenv.bat
<br />将此文件设置如下：
<br />@echo off</p>

<p>rem -------------------------------------------------------------------
<br />rem Setup environment for hibernate tools
<br />rem -------------------------------------------------------------------</p>

<p>set JDBC_DRIVER=D:\hibernate\Middlegen-Hibernate-r5\lib\db2java.zip
<br />set HIBERNATE_HOME=D:\hibernate\hibernate-2.0</p>

<p>set CORELIB=%HIBERNATE_HOME%\lib
<br />set LIB=..\lib
<br />set PROPS=%HIBERNATE_HOME%\src
<br />set
CP=%JDBC_DRIVER%;%PROPS%;%HIBERNATE_HOME%\hibernate2.jar;%CORELIB%\commons-logging.jar;%CORELIB%\commons-collections.jar;%CORELIB%\cglib.jar;%CORELIB%\dom4j.jar;%CORELIB%\xml-apis.jar;%CORELIB%\xerces.jar;%CORELIB%\commons-lang.jar;%CORELIB%\odmg.jar;%CORELIB%\xalan.jar;%LIB%\jdom.jar;%LIB%\..\hibernate-tools.jar
<br />（3）config.xml
<br />编写config.xml文件，内容如下：
<br />&lt;codegen&gt; 
<br />&lt;generate renderer=&quot;net.sf.hibernate.tool.hbm2java.BasicRenderer&quot;&gt; 
<br />&lt;param name=&quot;generate-concrete-empty-classes&quot;&gt;false&lt;/param&gt; 
<br />&lt;/generate&gt; 
<br />&lt;/codegen&gt;
<br />此文件可以放在任何目录下。
<br />4、启动Middlegen-Hibernate-r5
<br />命令行切换到D:/hibernate/Middlegen-Hibernate-r5目录下，运行ant
<br />5、生成*.hbm.xml
<br />正确完成运行ant后，出现一个GUI界面，点击此界面左上角的&ldquo;Generate&rdquo;功能按钮，等待其完成工作后，进入输出目录D:
/hibernate/Middlegen-Hibernate-r5/poss中查看结果，进入上述所设置的package name
路径，也就是目录：D:\hibernate\Middlegen-Hibernate-r5\poss\org\hibernate\sample，可
以看到ZJPOSS中所有数据库表的相应hibernate配置文件*.hbm.xml。
<br />6、由*.hbm.xml生成java文件
<br />在命令行中进入D:\hibernate\hibernate-extensions-2.1\tools\bin目录，执行命令
hbm2java
D:\hibernate\Middlegen-Hibernate-r5\poss\org\hibernate\sample\*.xml
--output=D:\hibernate\hibernate-2.0\po
--config=D:\hibernate\hibernate-extensions-2.1\tools\bin\config.xml
<br />（--output=D:\hibernate\hibernate-2.0\po为生成的java文件保存目录；
<br />--config=D:\hibernate\hibernate-extensions-2.1\tools\bin\config.xml为config.xml文件的目录。）
<br />完成之后，进入D:\hibernate\hibernate-2.0\po\org\hibernate\sample目录，可以看到D:\
hibernate\Middlegen-Hibernate-r5\poss\org\hibernate\sample中
*.hbm.xml文件所对应生成 *.java文件。
<br />注：只有使用Middlegen-Hibernate-r5生成的 *.hbm.xml 文件才可使用hibernate\hibernate-extensions-2.1生成相应的 *.java 文件。
<br />   
<br />2005/09/26</p><br /><p>mysql 使用：</p><p>from:http://www.z6688.com/info/35452-1.htm<br /></p><p>

    1：下载middlegen-hibernate-r5
<br />地址：url http://voxel.dl.sourceforge.net/sourceforge/hibernate/middlegen-hibernate-r5.zip
<br />2：解压缩
<br />将下载的解压缩，如 d:\middlegen-hibernate-r5
<br />3：配置数据库文件
<br />进入d:\middlegen-hibernate-r5 目录下的\config\database 子目录，选择你要得数据库文件，我使用的是mysql.
<br />将原来的
<br />&lt;property name=&quot;database.driver.file&quot;           value=&quot;${lib.dir}/mysql-connector-java-3.0.0-beta-bin.jar&quot;/&gt;
<br />改成
<br />&lt;property name=&quot;database.driver.file&quot;           value=&quot;${lib.dir}/mysql-connector-java-3.0.15-ga-bin.jar&quot;/&gt;  
<br />同时指定数据库与用户名。我的配置如下（红色部分是要修改的部分）
<br />   &lt;property name=&quot;database.script.file&quot;           value=&quot;${src.dir}/sql/${name}-mysql.sql&quot;/&gt;
<br />   &lt;!--property name=&quot;database.driver.file&quot;           value=&quot;${lib.dir}/mysql-connector-java-3.0.0-beta-bin.jar&quot;/--&gt;
<br />   &lt;property name=&quot;database.driver.file&quot;           value=&quot;${lib.dir}/mysql-connector-java-3.0.15-ga-bin.jar&quot;/&gt;  
<br />   &lt;property name=&quot;database.driver.classpath&quot;      value=&quot;${database.driver.file}&quot;/&gt;
<br />   &lt;property name=&quot;database.driver&quot;                value=&quot;org.gjt.mm.mysql.driver&quot;/&gt;
<br />   &lt;property name=&quot;database.url&quot;                   value=&quot;jdbc:mysql://localhost/hibernate&quot;/&gt;
<br />   &lt;property name=&quot;database.userid&quot;                value=&quot;root&quot;/&gt;
<br />   &lt;property name=&quot;database.password&quot;              value=&quot;&quot;/&gt;
<br />   &lt;property name=&quot;database.schema&quot;                value=&quot;&quot;/&gt;
<br />   &lt;property name=&quot;database.catalog&quot;               value=&quot;&quot;/&gt;
<br />   &lt;property name=&quot;jboss.datasource.mapping&quot;       value=&quot;mysql&quot;/&gt;
<br />
<br />将mysql的驱动程序mysql-connector-java-3.0.15-ga-bin.jar copy 到d:\middlegen-hibernate-r5\lib下
<br />
<br />4：修改build.xml
<br />修改d:\middlegen-hibernate-r5目录下的build.xml 文件，此文件是middlegen-hibernate 的ant
<br />构建配置。middlegen-hibernate将根据build.xml 文件中的具体参数生成数据库表映射
<br />文件
<br />
<br />1）第24行 修改数据库连接
<br />将hsqldb.xml 改成mysql.xml
<br />&lt;!entity database system &quot;file:./config/database/mysql.xml&quot;&gt;
<br />2）第52行 修改输出目录
<br />将${build.dir}/gen-src 改成你要的目录
<br />   &lt;property name=&quot;build.gen-src.dir&quot;              value=&quot;d:/middlegen-hibernate-r5/sample&quot;/&gt;
<br />3）第184行 对应代码的package name
<br />hibernate 节点package 属性的默认设置实际上是由前面的
<br />application name （${name}）和&ldquo;.hibernate&rdquo;组合而成，根据我们的需要，
<br />将其改为
<br />         &lt;hibernate
<br />            destination=&quot;${build.gen-src.dir}&quot;
<br />            package=&quot;org.hibernate.sample&quot;
<br />            genxdoclettags=&quot;true&quot;
<br />            genintergratedcompositekeys=&quot;false&quot;
<br />            javatypemapper=&quot;middlegen.plugins.hibernate.hibernatejavatypemapper&quot;
<br />         /&gt;
<br />这里还有一个属性genxdoclettags，如果设置为true，则生成的代码将包含
<br />xdoclet tag。
<br />4）第33行 修改应用名
<br />将原来的
<br />   &lt;property name=&quot;name&quot; value=&quot;airline&quot;/&gt;
<br />改成
<br />   &lt;property name=&quot;name&quot; value=&quot;hibernatesample&quot;/&gt;
<br />
<br />5：切换到d:\middlegen-hibernate-r5目录，运行ant
<br />界面如下</p><br /><p><br /></p><br /><p><br /></p><p><span style="font-family: 宋体;"><font size="2">先决条件：</font></span></p>
<p><font size="2"><span style="font-family: 宋体;">已经安装了</span><span>ant</span><span style="font-family: 宋体;">和</span><span>MySQL</span><span style="font-family: 宋体;">数据库，数据库表已经建立。</span></font></p>
<p><span><font size="2">&nbsp;</font></span></p>
<p><font size="2"><span style=""><span style="">1、<span style="font-family: &apos;Times New Roman&apos;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><span style="font-family: 宋体;">从</span><span>Hibernate</span><span style="font-family: 宋体;">官方网站下载</span><span>Middlegen-Hibernate</span><span style="font-family: 宋体;">和</span><span>hibernate-extensions</span><span style="font-family: 宋体;">，并解压。</span></font></p>
<p><font size="2"><span style=""><span style="">2、<span style="font-family: &apos;Times New Roman&apos;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><span style="font-family: 宋体;">配置</span><span>Middlegen-Hibernate:</span></font></p>
<p><font size="2"><span>2.1 </span><span style="font-family: 宋体;">配置数据库连接</span></font></p>
<p><font size="2"><span style="font-family: 宋体;">假设连接的数据库是</span><span>MySQL</span><span style="font-family: 宋体;">，在</span><span>Middlegen-Hibernate-r5\config\database</span><span style="font-family: 宋体;">目录中有一个</span><span>mysql.xml</span><span style="font-family: 宋体;">文件，是用来配置</span><span>MySQL</span><span style="font-family: 宋体;">数据库的连接的。内容为：</span></font></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.script.file&quot; value=&quot;${src.dir}/sql/${name}-mysql.sql&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.driver.file&quot; value=&quot;${lib.dir}/<span style="color: red;">mysql-connector-java-3.0.15-ga-bin.jar</span>&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.driver.classpath&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;${database.driver.file}&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.driver&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;org.gjt.mm.mysql.Driver&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.url&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;<span style="color: red;">jdbc:mysql://localhost/jboss</span>&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.userid&quot; <span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>value=&quot;<span style="color: red;">jboss</span>&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.password&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;<span style="color: red;">jboss</span>&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.schema&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;database.catalog&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">&nbsp;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;jboss.datasource.mapping&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;mySQL&quot;/&gt;</font></span></p>
<p><font size="2"><span style="font-family: 宋体;">将</span><span>mysql-connector-java-3.0.15-ga-bin.jar</span><span style="font-family: 宋体;">拷贝到</span><span>${lib.dir}</span><span style="font-family: 宋体;">，也就是</span><span>Middlegen-Hibernate-r5\lib</span><span style="font-family: 宋体;">目录。</span></font></p>
<p><font size="2"><span style="font-family: 宋体;">修改配置文件中的数据库连接项目</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">database.url</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-family: 宋体;">、</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">database.userid</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-family: 宋体;">、</span><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">database.userid</span><span> </span><span style="font-family: 宋体;">使</span><span>Middlegen-Hibernate</span><span style="font-family: 宋体;">可以找到数据库。</span></font></p>
<p><font size="2"><span>2.2 </span><span style="font-family: 宋体;">配置</span><span>Middlegen-Hibernate-r5</span><span style="font-family: 宋体;">的</span><span>ant</span><span style="font-family: 宋体;">运行文件</span><span>build.xml</span></font></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">&lt;!DOCTYPE project [</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp;&nbsp; </span>&lt;!ENTITY database SYSTEM &quot;file:./config/database/<span style="color: red;">mysql.xml</span>&quot;&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">]&gt;</font></span></p>
<p><span style="font-family: 宋体;"><font size="2">指出使用的数据库配置文件。</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">&lt;project name=&quot;Middlegen Hibernate&quot; default=&quot;all&quot; basedir=&quot;.&quot;&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property file=&quot;${basedir}/build.properties&quot;/&gt;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;name&quot; value=&quot;<span style="color: red;">hibernatesample</span>&quot;/&gt;</font></span></p>
<p><span style="font-family: 宋体;"><font size="2">指出你的应用名称。</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp; </span>&lt;property name=&quot;build.gen-src.dir&quot;<span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>value=&quot;<span style="color: red;">C:/sample</span>&quot;/&gt;</font></span></p>
<p><font size="2"><span style="font-family: 宋体;">指出</span><span>hbm</span><span style="font-family: 宋体;">的输出路径。</span></font></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;hibernate</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>destination=&quot;${build.gen-src.dir}&quot;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>package=&quot;<span style="color: red;">org.hibernate.sample</span>&quot;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: red;">genXDocletTags=&quot;false&quot;</span></font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="">&nbsp;&nbsp;&nbsp;</span>genIntergratedCompositeKeys=&quot;false&quot;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>javaTypeMapper=&quot;middlegen.plugins.hibernate.HibernateJavaTypeMapper&quot;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/&gt;</font></span></p>
<p><font size="2"><span style="font-family: 宋体;">指出</span><span>hbm</span><span style="font-family: 宋体;">所在的包的位置。</span></font></p>
<p><font size="2"><span style="font-family: 宋体;">指出</span><span>hbm.xml</span><span style="font-family: 宋体;">中是否需要</span><span>XDoclet Tags</span><span style="font-family: 宋体;">。</span><span></span></font></p>
<p><font size="2"><span style=""><span style="">3、<span style="font-family: &apos;Times New Roman&apos;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><span style="font-family: 宋体;">运行</span><span>Middlegen-Hibernate:</span></font></p>
<p><font size="2"><span style="font-family: 宋体;">在</span><span>Middlegen-Hibernate</span><span style="font-family: 宋体;">目录下运行</span><span>ant</span><span style="font-family: 宋体;">，进入</span><span>Middlegen-Hibernate</span><span style="font-family: 宋体;">的图形界面。可以设置表，和字段的特性。然后按</span><span>Genarate</span><span style="font-family: 宋体;">，产生</span><span>hbm.xml</span><span style="font-family: 宋体;">文件。</span></font></p>
<p><font size="2"><span style=""><span style="">4、<span style="font-family: &apos;Times New Roman&apos;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><span style="font-family: 宋体;">配置</span><span>hibernate-extensions</span></font></p>
<p><font size="2"><span style="font-family: 宋体;">在</span><span>hibernate-extensions-2.1.2\tools\bin</span><span style="font-family: 宋体;">目录有一个</span><span>setenv.bat</span><span style="font-family: 宋体;">文件，改变其内容为：</span></font></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set JDBC_DRIVER=<span style="color: red;">C:\java\Middlegen-Hibernate-r5\lib\mysql-connector-java-3.0.15-ga-bin.jar</span></font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set HIBERNATE_HOME=<span style="color: red;">C:\java\hibernate-2.1.6</span></font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">&nbsp;</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set CORELIB=%HIBERNATE_HOME%\lib</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set LIB=..\lib</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set PROPS=%HIBERNATE_HOME%\src</font></span></p>
<p><span style="background: rgb(217, 217, 217) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><font size="2">set CP=%JDBC_DRIVER%;%PROPS%;%HIBERNATE_HOME%\hibernate2.jar;%CORELIB%\<span style="color: red;">commons-logging-1.0.4.jar</span>;%CORELIB%\<span style="color: red;">commons-collections-2.1.1.jar</span>;%CORELIB%\<span style="color: red;">commons-lang-1.0.1.jar</span>;%CORELIB%\<span style="color: red;">cglib-full-2.0.2.jar</span>;%CORELIB%\<span style="color: red;">dom4j-1.4.jar;</span>%CORELIB%\<span style="color: red;">odmg-3.0.jar</span>;%CORELIB%\<span style="color: red;">xml-apis.jar</span>;%CORELIB%\<span style="color: red;">xerces-2.4.0.jar</span>;%CORELIB%\<span style="color: red;">xalan-2.4.0.jar</span>;%LIB%\<span style="color: red;">jdom.jar</span>;%LIB%\..\<span style="color: red;">hibernate-tools.jar</span></font></span></p>
<p><font size="2"><span style="font-family: 宋体;">注意红色字体提示的均是路径和</span><span>JAR</span><span style="font-family: 宋体;">文件名，一定要正确。</span></font></p>
<p><font size="2"><span>5</span><span style="font-family: 宋体;">、运行</span><span>hibernate-extensions</span><span style="font-family: 宋体;">，根据</span><span>hbm.xml</span><span style="font-family: 宋体;">产生</span><span>POJO</span><span style="font-family: 宋体;">文件</span></font></p>
<font size="2"><span style="font-family: 宋体;">在</span><span>DOS</span><span style="font-family: 宋体;">中运行</span><span>hbm2java c:\sample\org\hibernate\sample\*.xml<br />测试在</span></font><font size="2"><span>hibernate-extensions-2.1.2\tools\bin目录下生成generated目录即为生成的POJO代码</span><span style="font-family: 宋体;"></span></font><p>

</p>
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49138#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Oct 2006 07:33:29 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49138</link>
        <guid>http://lamono.javaeye.com/blog/49138</guid>
      </item>
      <item>
        <title>java socket编程</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49139" style="color:red;">http://lamono.javaeye.com/blog/49139</a>&nbsp;
          发表时间: 2006年10月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font color="#000000">java socket编程<br /><a href="http://www.yesky.com/433/1749933.shtml">http://www.yesky.com/433/1749933.shtml</a></font></p>
<p><b><a href="http://www.myfaq.com.cn/A200507/2005-07-24/166027.html" target="_blank"><b>一个基于UDP数据广播的局域网络会议程序</b></a></b></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; Sockets有两种主要的操作方式:面向连接的和无连接的。面向连接的sockets操作就像一部电话，他们必须建立一个连接和一人呼叫。所有的事情在到达时的顺序与它们出发时的顺序时一样。无连接的sockets操作就像是一个邮件投递，没有什么保证,多个邮件可能在到达时的顺序与出发时的顺序不一样。<br />　　到底用哪种模式是邮应用程序的需要决定的。如果可靠性更重要的话,用面向连接的操作会好一些.比如文件服务器需要他们的数据的正确性和有序性.如果一些数据丢失了,系统的有效性将会失去。一些服务器，比如间歇性地发送一些数据块.如果数据丢了的话,服务器并不想要再重新发过一次，因为当数据到达的时候,它可能已经过时了.确保数据的有序性和正确性需要额外的操作的内存消耗,额外的费用将会降低系统的回应速率.<br />&nbsp;&nbsp;&nbsp; 面向连接的操作使用TCP协议.一个这个模式下的socket必须在发送数据之前与目的地的socket取得一个连接.一旦连接建立了,sockets就可以使用一个流接口:打开-读-写-关闭.所有的发送的信息都会在另一端以同样的顺序被接收.面向连接的操作比无连接的操作效率更低,但是数据的安全性更高.</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; 无连接的操作使用数据报协议.一个数据报是一个独立的单元,它包含了所有的这次投递的信息.把它想象成一个信封吧,它有目的地址和要发送的内容.这个模式下的socket不需要连接一个目的的socket,它只是简单地投出数据报.无连接的操作是快速的和高效的,但是数据安全性不佳.</font><font color="#000000">　　</font></p>
<p><font color="#000000">1、java数据报类（UDP方式）<br />　　不像面向连接的类,数据报的客户端和服务器端的类在表面上是一样的.下面的程序建立了一个客户和服务器商的数据报sockets:<br />DatagramSocket serverSocket = new DatagramSocket( 4545 );<br />DatagramSocket clientSocket = new DatagramSocket();<br />　　服务器用参数4545来指定端口号,由于客户端将要呼叫服务器,客户端可以利用可利用的端口.如果省略第二个参数,程序会让操作系统分配一个可用的端口.客户端可以请求一个指定的端口,但是如果其它的应用程序已经绑定到这个端口之上,请求将会失败.如果你的意图不是作为一个服务器,最好不要指定端口. </font></p>
<p>下面是自己写的测试代码：</p>
<p>server端代码：</p>
<p><font color="#000000">public class UDPServer {&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; public static void main(String[] agrs){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DatagramSocket socket = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DatagramPacket sendPacket,receivePacket;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket = new DatagramSocket(4455);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(socket != null){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; receivePacket = new DatagramPacket(new byte[548],548);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket.receive(receivePacket);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对获取的数据简单处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String data = new String(receivePacket.getData());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;receive data:&quot;+data);</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String Donedata = &quot;done：&quot;+data;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] byteDate =&nbsp; Donedata.getBytes();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sendPacket = new DatagramPacket(byteDate,byteDate.length,receivePacket.getAddress(),receivePacket.getPort());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket.send(sendPacket);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(socket != null) socket.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; }<br />}</font></p>
<p>client端代码：</p>
<p><font color="#000000">public class UDPClient {</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception {</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long start = System.currentTimeMillis();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DatagramSocket socket = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DatagramPacket sendPacket,receivePacket;</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket = new DatagramSocket();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket.setSoTimeout(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String dataOrg = &quot;original data&quot; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] byteDate = dataOrg.getBytes();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(byteDate.length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sendPacket = new DatagramPacket(byteDate,byteDate.length,InetAddress.getByName(&quot;218.206.*.*&quot;),4455);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket.send(sendPacket);</font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; receivePacket = new DatagramPacket(new byte[548],548);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket.receive(receivePacket);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对获取的数据简单处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String dataDone = new String(receivePacket.getData());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(dataDone);</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;spend:&quot;+(System.currentTimeMillis() -start));</font></p>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(socket != null) socket.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</font><font color="#000000">&nbsp;&nbsp;&nbsp; <br />}</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49139#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 23 Oct 2006 10:01:48 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49139</link>
        <guid>http://lamono.javaeye.com/blog/49139</guid>
      </item>
      <item>
        <title>IE7</title>
        <author>lamono</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lamono.javaeye.com">lamono</a>&nbsp;
          链接：<a href="http://lamono.javaeye.com/blog/49140" style="color:red;">http://lamono.javaeye.com/blog/49140</a>&nbsp;
          发表时间: 2006年10月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Open links in a new tab in the background&nbsp; CTRL+click&nbsp; </p><p>Open links in a new tab in the foreground&nbsp; CTRL+SHIFT+click&nbsp; </p><p>Open a new tab in the foreground&nbsp; CTRL+T&nbsp; </p><p>Open a new tab from the Address bar&nbsp; ALT+ENTER&nbsp; </p><p>Open a new tab from the search box&nbsp; ALT+ENTER&nbsp; </p><p>Open Quick Tabs (thumbnail view)&nbsp; CTRL+Q&nbsp; </p><p>Switch between tabs&nbsp; CTRL+TAB/CTRL+SHIFT+TAB&nbsp; </p><p>Switch to a specific tab number&nbsp; CTRL+n (n can be 1-8)&nbsp; </p><p>Switch to the last tab&nbsp; CTRL+9&nbsp; </p><p>Close current tab&nbsp; CTRL+W&nbsp; </p><p>Close all tabs&nbsp; ALT+F4&nbsp; </p><p>Close other tabs&nbsp; CTRL+ALT+F4&nbsp; </p><p><br />Mouse shortcuts Open a link in a background tab&nbsp; Click the middle mouse butt<br />on on a link&nbsp; </p><p>Open a new tab&nbsp; Double-click the empty space to the right of the last tab&nbsp; </p><p>Close a tab&nbsp; Click the middle mouse button on the tab <br /></p>
          <br/>
          <span style="color:red;">
            <a href="http://lamono.javaeye.com/blog/49140#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Oct 2006 13:17:39 +0800</pubDate>
        <link>http://lamono.javaeye.com/blog/49140</link>
        <guid>http://lamono.javaeye.com/blog/49140</guid>
      </item>
  </channel>
</rss>