﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-方大帝的JAVA空间</title><link>http://www.blogjava.net/fangts/</link><description>JAVA</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 10:46:13 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 10:46:13 GMT</pubDate><ttl>60</ttl><item><title>JS中数组Array的用法</title><link>http://www.blogjava.net/fangts/archive/2014/12/18/421524.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Thu, 18 Dec 2014 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2014/12/18/421524.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/421524.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2014/12/18/421524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/421524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/421524.html</trackback:ping><description><![CDATA[<h2></h2><div></div><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><span style="font-family: 楷体, 楷体_GB2312;">js数组元素的添加和删除一直比较迷惑，今天终于找到详细说明的资料了，先给个我测试的代码^-^</span><br /><span style="font-family: 'Times New Roman';">var arr = new Array();</span><br /><span style="font-family: 'Times New Roman';">arr[0] = "aaa";</span><br /><span style="font-family: 'Times New Roman';">arr[1] = "bbb";</span><br /><span style="font-family: 'Times New Roman';">arr[2] = "ccc";</span><br /><span style="font-family: 'Times New Roman';">//alert(arr.length);//3</span><br /><span style="font-family: 'Times New Roman';">arr.pop();</span><br /><span style="font-family: 'Times New Roman';">//alert(arr.length);//2</span><br /><span style="font-family: 'Times New Roman';">//alert(arr[arr.length-1]);//bbb</span><br /><span style="font-family: 'Times New Roman';">arr.pop();</span><br /><span style="font-family: 'Times New Roman';">//alert(arr[arr.length-1]);//aaa</span><br /><span style="font-family: 'Times New Roman';">//alert(arr.length);//1</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><span style="font-family: 'Times New Roman';">var arr2 = new Array();</span><br /><span style="font-family: 'Times New Roman';">//alert(arr2.length);//0</span><br /><span style="font-family: 'Times New Roman';">arr2[0] = "aaa";</span><br /><span style="font-family: 'Times New Roman';">arr2[1] = "bbb";</span><br /><span style="font-family: 'Times New Roman';">//alert(arr2.length);//2</span><br /><span style="font-family: 'Times New Roman';">arr2.pop();</span><br /><span style="font-family: 'Times New Roman';">//alert(arr2.length);//1</span><br /><span style="font-family: 'Times New Roman';">arr2 = arr2.slice(0,arr2.length-1);</span><br /><span style="font-family: 'Times New Roman';">//alert(arr2.length);//0</span><br /><span style="font-family: 'Times New Roman';">arr2[0] = "aaa";</span><br /><span style="font-family: 'Times New Roman';">arr2[1] = "bbb";</span><br /><span style="font-family: 'Times New Roman';">arr2[2] = "ccc";</span><br /><span style="font-family: 'Times New Roman';">arr2 = arr2.slice(0,1);</span><br /><span style="font-family: 'Times New Roman';">alert(arr2.length);//1</span><br /><span style="font-family: 'Times New Roman';">alert(arr2[0]);//aaa</span><br /><span style="font-family: 'Times New Roman';">alert(arr2[1]);//undefined</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="font-family: 楷体, 楷体_GB2312;"><span style="color: #0055ff;"><span style="font-family: 'Times New Roman';">shift</span>：删除原数组第一项，并返回删除元素的值；如果数组为空则返回</span><span style="color: #0055ff; font-family: 'Times New Roman';">undefined</span></span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 'Times New Roman';">var b = a.shift(); //a：[2,3,4,5]&nbsp;&nbsp; b：1</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">unshift</span>：将参数添加到原数组开头，并返回数组的长度</span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 'Times New Roman';">var b = a.unshift(-2,-1); //a：[-2,-1,1,2,3,4,5]&nbsp;&nbsp; b：7</span><br /><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;">注：在<span style="font-family: 'Times New Roman';">IE6.0</span>下测试返回值总为<span style="font-family: 'Times New Roman';">undefined，FF2.0</span>下测试返回值为7，所以这个方法的返回值不可靠，需要用返回值时可用<span style="font-family: 'Times New Roman';">splice</span>代替本方法来使用。</span></strong></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">pop</span>：删除原数组最后一项，并返回删除元素的值；如果数组为空则返回<span style="font-family: 'Times New Roman';">undefined</span></span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">var b = a.pop(); //a：[1,2,3,4]&nbsp;&nbsp; b：5</span>//不用返回的话直接调用就可以了</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">push</span>：将参数添加到原数组末尾，并返回数组的长度</span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 'Times New Roman';">var b = a.push(6,7); //a：[1,2,3,4,5,6,7]&nbsp;&nbsp; b：7</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">concat</span>：返回一个新数组，是将参数添加到原数组中构成的</span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 'Times New Roman';">var b = a.concat(6,7); //a：[1,2,3,4,5]&nbsp;&nbsp; b：[1,2,3,4,5,6,7]</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">splice(start,deleteCount,val1,val2,...)：</span>从<span style="font-family: 'Times New Roman';">start</span>位置开始删除<span style="font-family: 'Times New Roman';">deleteCount</span>项，并从该位置起插入<span style="font-family: 'Times New Roman';">val1,val2</span>,...</span></strong></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;">在清空数组时，只需传递<span style="font-family: 'Times New Roman';">startIndex</span>。</span></strong></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;">如果不删除所有元素，再传递<span style="font-family: 'Times New Roman';">deleteCount</span>参数。</span></strong></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">splice</span>还具有先删除后添加的功能，即先删除几个元素，然后在删除的位置再添加若干元素，删除与添加的元素的个数没有必须相等，这时侯<span style="font-family: 'Times New Roman';">deleteCount</span>也是要用到的。</span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 'Times New Roman';">var b = a.splice(2,2,7,8,9); //a：[1,2,7,8,9,5]&nbsp;&nbsp; b：[3,4]</span><br /><span style="font-family: 'Times New Roman';">var b = a.splice(0,1); //同shift</span><br /><span style="font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">a.splice(0,0,-2,-1); var b = a.length;</span>//同<span style="font-family: 'Times New Roman';">unshift</span></span><br /><span style="font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">var b = a.splice(a.length-1,1);</span>//同<span style="font-family: 'Times New Roman';">pop</span></span><br /><span style="font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">a.splice(a.length,0,6,7); var b = a.length</span>; //同<span style="font-family: 'Times New Roman';">push</span></span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="font-family: 楷体, 楷体_GB2312;"><span style="color: #0055ff; font-family: 'Times New Roman';">reverse</span><span style="color: #0055ff;">：将数组反序</span></span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 'Times New Roman';">var b = a.reverse(); //a：[5,4,3,2,1]&nbsp;&nbsp; b：[5,4,3,2,1]</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">sort(orderfunction)：</span>按指定的参数对数组进行排序</span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 'Times New Roman';">var b = a.sort(); //a：[1,2,3,4,5]&nbsp;&nbsp; b：[1,2,3,4,5]</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">slice(start,end)：</span>返回从原数组中指定开始下标到结束下标之间的项组成的新数组</span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 'Times New Roman';">var b = a.slice(2,5); //a：[1,2,3,4,5]&nbsp;&nbsp; b：[3,4,5]</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">join(separator)：</span>将数组的元素组起一个字符串，以<span style="font-family: 'Times New Roman';">separator</span>为分隔符，省略的话则用默认用逗号为分隔符</span><br /></strong><span style="font-family: 'Times New Roman';">var a = [1,2,3,4,5];</span><br /><span style="font-family: 'Times New Roman';">var b = a.join("|"); //a：[1,2,3,4,5]&nbsp;&nbsp; b："1|2|3|4|5"</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><strong><span style="color: #0055ff; font-family: 楷体, 楷体_GB2312;">再给个利用数组模拟<span style="font-family: 'Times New Roman';">javaStringBuffer</span>处理字符串的方法：</span></strong></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><span style="font-family: 'Times New Roman';">/**</span><br /><span style="font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">*</span>&nbsp;字符串处理函数</span><br /><span style="font-family: 'Times New Roman';">*/</span><br /><span style="font-family: 'Times New Roman';">function StringBuffer() {</span><br /><span style="font-family: 'Times New Roman';">var arr = new Array;</span><br /><span style="font-family: 'Times New Roman';">this.append = function(str) {</span><br /><span style="font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp; arr[arr.length] = str;</span><br /><span style="font-family: 'Times New Roman';">};</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><span style="font-family: 'Times New Roman';">this.toString = function() {</span><br /><span style="font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp; return arr.join("");</span>//把<span style="font-family: 'Times New Roman';">append</span>进来的数组<span style="font-family: 'Times New Roman';">ping</span>成一个字符串</span><br /><span style="font-family: 'Times New Roman';">};</span><br /><span style="font-family: 'Times New Roman';">}</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><span style="font-family: 楷体, 楷体_GB2312;">今天在应用中突然发现<span style="font-family: 'Times New Roman';">join</span>是一种把数组转换成字符串的好方法，故封装成对象使用了：</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><span style="font-family: 'Times New Roman';">/**</span><br /><span style="font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">*</span>把数组转换成特定符号分割的字符串</span><br /><span style="font-family: 'Times New Roman';">*/</span><br /><span style="font-family: 'Times New Roman';">function arrayToString(arr,separator) {</span><br /><span style="font-family: 'Times New Roman';">if(!separator) separator = "";//separator为null则默认为空</span><br /><span style="font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp; return arr.join(separator);</span><br /><span style="font-family: 'Times New Roman';">}</span></p><p style="margin: 10px 0px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><span style="font-family: 'Times New Roman';">/**</span><br /><span style="font-family: 楷体, 楷体_GB2312;"><span style="font-family: 'Times New Roman';">*</span>&nbsp;查找数组包含的字符串</span><br /><span style="font-family: 'Times New Roman';">*/</span><br /><span style="font-family: 'Times New Roman';">function arrayFindString(arr,string) {</span><br /><span style="font-family: 'Times New Roman';">var str = arr.join("");</span><br /><span style="font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp; return str.indexOf(string);</span><br /><span style="font-family: 'Times New Roman';">}</span></p><div></div><div style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeeee;"><div id="blog_text"><p style="margin: 10px 0px;"><span style="font-family: 'Times New Roman';"></span></p></div></div><img src ="http://www.blogjava.net/fangts/aggbug/421524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2014-12-18 12:02 <a href="http://www.blogjava.net/fangts/archive/2014/12/18/421524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将数据库中树类型的表递归转换为json字符串</title><link>http://www.blogjava.net/fangts/archive/2014/04/04/411942.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Fri, 04 Apr 2014 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2014/04/04/411942.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/411942.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2014/04/04/411942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/411942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/411942.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 需求：现在有很好的ext树，可以将数据库中的数据显示成很漂亮的树形，而一个瓶颈问题是怎么把数据库中查询得到的数据转换为json的字符串格式。这里的类就是把这样的一个数据类转换为json串。使用到了JsonUtil这个开源的json字符串转换类。使用到了堆栈的数据结构。下面是测试类：Code highlighting produced by Actipro CodeHighlighter (...&nbsp;&nbsp;<a href='http://www.blogjava.net/fangts/archive/2014/04/04/411942.html'>阅读全文</a><img src ="http://www.blogjava.net/fangts/aggbug/411942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2014-04-04 11:30 <a href="http://www.blogjava.net/fangts/archive/2014/04/04/411942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL大表重复字段的查询方法</title><link>http://www.blogjava.net/fangts/archive/2012/05/25/379223.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Fri, 25 May 2012 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2012/05/25/379223.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/379223.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2012/05/25/379223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/379223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/379223.html</trackback:ping><description><![CDATA[<p>数据库中有个大表，需要查找其中的名字有重复的记录id，以便比较。</p>
<p>如果仅仅是查找数据库中name不重复的字段，很容易</p><pre><ol class="dp-xml"><li class="alt"><span>SELECT&nbsp;min(`id`),`name`&nbsp; &nbsp;</span></li><li><span>FROM&nbsp;`table`&nbsp; &nbsp;</span></li><li class="alt"><span>GROUP&nbsp;BY&nbsp;`name`; &nbsp;</span></li></ol></pre>
<p>但是这样并不能得到说有重复字段的id值。（只得到了最小的一个id值）</p>
<p>查询哪些字段是重复的也容易</p><pre><ol class="dp-xml"><li class="alt"><span>SELECT&nbsp;`name`,count(`name`)&nbsp;as&nbsp;count&nbsp; &nbsp;</span></li><li><span>FROM&nbsp;`table`&nbsp; &nbsp;</span></li><li class="alt"><span>GROUP&nbsp;BY&nbsp;`name`&nbsp;HAVING&nbsp;count(`name`)&nbsp;</span><span class="tag">&gt;</span><span>1&nbsp; &nbsp;</span></li><li><span>ORDER&nbsp;BY&nbsp;count&nbsp;DESC; &nbsp;</span></li></ol></pre>
<p>但是要一次查询到重复字段的id值，就必须使用子查询了，于是使用下面的语句来实现MySQL大表重复字段查询。</p><pre><ol class="dp-xml"><li class="alt"><span>SELECT&nbsp;`id`,`name`&nbsp; &nbsp;</span></li><li><span>FROM&nbsp;`table`&nbsp; &nbsp;</span></li><li class="alt"><span>WHERE&nbsp;`name`&nbsp;in&nbsp;(&nbsp; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;SELECT&nbsp;`name`&nbsp; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;FROM&nbsp;`table`&nbsp; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;GROUP&nbsp;BY&nbsp;`name`&nbsp;HAVING&nbsp;count(`name`)&nbsp;</span><span class="tag">&gt;</span><span>1 &nbsp;</span></li><li class="alt"><span>); &nbsp;</span></li></ol></pre>
<p>但是这条语句在mysql中效率太差，感觉mysql并没有为子查询生成零时表。</p>
<p>于是使用先建立零时表</p><pre><ol class="dp-xml"><li class="alt"><span>create&nbsp;table&nbsp;`tmptable`&nbsp;as&nbsp;( &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;SELECT&nbsp;`name`&nbsp; &nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;FROM&nbsp;`table`&nbsp; &nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;GROUP&nbsp;BY&nbsp;`name`&nbsp;HAVING&nbsp;count(`name`)&nbsp;</span><span class="tag">&gt;</span><span>1 &nbsp;</span></li><li class="alt"><span>); &nbsp;</span></li></ol></pre>
<p>然后使用多表连接查询</p><pre><ol class="dp-xml"><li class="alt"><span>SELECT&nbsp;a.`id`,&nbsp;a.`name`&nbsp; &nbsp;</span></li><li><span>FROM&nbsp;`table`&nbsp;a,&nbsp;`tmptable`&nbsp;t&nbsp; &nbsp;</span></li><li class="alt"><span>WHERE&nbsp;a.`name`&nbsp;=&nbsp;t.`name`; &nbsp;</span></li></ol></pre>
<p>结果这次结果很快就出来了。</p>
<p>用 distinct去重复</p><pre><ol class="dp-xml"><li class="alt"><span>SELECT&nbsp;distinct&nbsp;a.`id`,&nbsp;a.`name`&nbsp; &nbsp;</span></li><li><span>FROM&nbsp;`table`&nbsp;a,&nbsp;`tmptable`&nbsp;t&nbsp; &nbsp;</span></li><li class="alt"><span>WHERE&nbsp;a.`name`&nbsp;=&nbsp;t.`name`; &nbsp;</span></li></ol></pre><img src ="http://www.blogjava.net/fangts/aggbug/379223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2012-05-25 14:15 <a href="http://www.blogjava.net/fangts/archive/2012/05/25/379223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Layout  布局</title><link>http://www.blogjava.net/fangts/archive/2011/12/14/366339.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Wed, 14 Dec 2011 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2011/12/14/366339.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/366339.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2011/12/14/366339.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/366339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/366339.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 依赖panelresizable用法示例创建 Layout经由标记创建 Layout 。添加 'easyui-layout' 类到 &lt;div/&gt; 标记。1.&nbsp; &lt;div&nbsp;id="cc"&nbsp;class="easyui-layout"&nbsp;style="width:600px;height:400px;"&gt;&nbsp;&...&nbsp;&nbsp;<a href='http://www.blogjava.net/fangts/archive/2011/12/14/366339.html'>阅读全文</a><img src ="http://www.blogjava.net/fangts/aggbug/366339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2011-12-14 15:30 <a href="http://www.blogjava.net/fangts/archive/2011/12/14/366339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>输入流和输出流</title><link>http://www.blogjava.net/fangts/archive/2011/05/07/349744.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Sat, 07 May 2011 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2011/05/07/349744.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/349744.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2011/05/07/349744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/349744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/349744.html</trackback:ping><description><![CDATA[InputStream:输入流&nbsp;&nbsp;&nbsp; InputStream in = new FileInputStream(file1);&nbsp;&nbsp; file1指读取文件的路径<br />
OutputStream:输出流 OutputStream ou = new FileOutputStream(file2);&nbsp; file2指写入文件的路径<br />
BufferInputStream高级输入流 BufferedInputStream bi=new BufferedInputStream(in);<br />
BufferOutputStream高级输出流 BufferedOutputStream out = new BufferedOutputStream(ou);<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(</span><span style="color: #000000">"</span><span style="color: #000000">d:\\通知.doc</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_46_646_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_646_Open_Text.style.display='none'; Codehighlighter1_46_646_Closed_Image.style.display='inline'; Codehighlighter1_46_646_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_46_646_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_46_646_Closed_Text.style.display='none'; Codehighlighter1_46_646_Open_Image.style.display='inline'; Codehighlighter1_46_646_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_46_646_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_46_646_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;st&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;in&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileInputStream(file);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedInputStream&nbsp;bi</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BufferedInputStream(in);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream&nbsp;ou</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;&nbsp;FileOutputStream(</span><span style="color: #000000">"</span><span style="color: #000000">d:\\通知11.doc&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedOutputStream&nbsp;out&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BufferedOutputStream(ou<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_366_413_Open_Image" onclick="this.style.display='none'; Codehighlighter1_366_413_Open_Text.style.display='none'; Codehighlighter1_366_413_Closed_Image.style.display='inline'; Codehighlighter1_366_413_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_366_413_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_366_413_Closed_Text.style.display='none'; Codehighlighter1_366_413_Open_Image.style.display='inline'; Codehighlighter1_366_413_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;((b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;bi.read())&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_366_413_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_366_413_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;循环读取in对象的字节</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(b);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;写入到文件</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_422_485_Open_Image" onclick="this.style.display='none'; Codehighlighter1_422_485_Open_Text.style.display='none'; Codehighlighter1_422_485_Closed_Image.style.display='inline'; Codehighlighter1_422_485_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_422_485_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_422_485_Closed_Text.style.display='none'; Codehighlighter1_422_485_Open_Image.style.display='inline'; Codehighlighter1_422_485_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_422_485_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_422_485_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.flush();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;好习惯</span><span style="color: #008000"><br />
<img id="Codehighlighter1_507_537_Open_Image" onclick="this.style.display='none'; Codehighlighter1_507_537_Open_Text.style.display='none'; Codehighlighter1_507_537_Closed_Image.style.display='inline'; Codehighlighter1_507_537_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_507_537_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_507_537_Closed_Text.style.display='none'; Codehighlighter1_507_537_Open_Image.style.display='inline'; Codehighlighter1_507_537_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span id="Codehighlighter1_507_537_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_507_537_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;et&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;System.currentTimeMillis();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print&nbsp;(et&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;st);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;System.out.println(s);</span><span style="color: #008000"><br />
<img id="Codehighlighter1_670_698_Open_Image" onclick="this.style.display='none'; Codehighlighter1_670_698_Open_Text.style.display='none'; Codehighlighter1_670_698_Closed_Image.style.display='inline'; Codehighlighter1_670_698_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_670_698_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_670_698_Closed_Text.style.display='none'; Codehighlighter1_670_698_Open_Image.style.display='inline'; Codehighlighter1_670_698_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_670_698_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_670_698_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<img src ="http://www.blogjava.net/fangts/aggbug/349744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2011-05-07 17:19 <a href="http://www.blogjava.net/fangts/archive/2011/05/07/349744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse5.5注册机</title><link>http://www.blogjava.net/fangts/archive/2011/04/26/349019.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Tue, 26 Apr 2011 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2011/04/26/349019.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/349019.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2011/04/26/349019.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/349019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/349019.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;1import&nbsp;java.io.BufferedReader;&nbsp;2import&nbsp;java.io.IOException;&nbsp;3import&nbsp;java.io.InputStreamReader;&nbsp;4import&nbsp;java.io.PrintStream;&nbsp;5import&nbsp;java.tex...&nbsp;&nbsp;<a href='http://www.blogjava.net/fangts/archive/2011/04/26/349019.html'>阅读全文</a><img src ="http://www.blogjava.net/fangts/aggbug/349019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2011-04-26 10:28 <a href="http://www.blogjava.net/fangts/archive/2011/04/26/349019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java将Word/Excel/PDF文件转换成HTML整理</title><link>http://www.blogjava.net/fangts/archive/2011/04/20/348625.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Wed, 20 Apr 2011 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2011/04/20/348625.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/348625.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2011/04/20/348625.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/348625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/348625.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;项目开发过程中，需求涉及到了各种文档转换为HTML或者网页易显示格式，现在将实现方式整理如下： 一、使用Jacob转换Word,Excel为HTML &#8220;JACOB一个Java-COM中间件.通过这个组件你可以在Java应用程序中调用COM组件和Win32 libraries。&#8221;首先下载Jacob包，JDK1.5以上需要使用Jacob1.9...&nbsp;&nbsp;<a href='http://www.blogjava.net/fangts/archive/2011/04/20/348625.html'>阅读全文</a><img src ="http://www.blogjava.net/fangts/aggbug/348625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2011-04-20 14:26 <a href="http://www.blogjava.net/fangts/archive/2011/04/20/348625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QBC查询实例</title><link>http://www.blogjava.net/fangts/archive/2009/07/21/287599.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Tue, 21 Jul 2009 03:23:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2009/07/21/287599.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/287599.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2009/07/21/287599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/287599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/287599.html</trackback:ping><description><![CDATA[1.daoimp<br />
<br />
//查询Feedback_Columns表中site字段=1，以id为倒序的最后一条记录<br />
&nbsp;&nbsp;*Expression.sql&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_57_371_Open_Image" onclick="this.style.display='none'; Codehighlighter1_57_371_Open_Text.style.display='none'; Codehighlighter1_57_371_Closed_Image.style.display='inline'; Codehighlighter1_57_371_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_57_371_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_57_371_Closed_Text.style.display='none'; Codehighlighter1_57_371_Open_Image.style.display='inline'; Codehighlighter1_57_371_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List&nbsp;findLatest()</span><span id="Codehighlighter1_57_371_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_57_371_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DetachedCriteria&nbsp;criteria</span><span style="color: #000000">=</span><span style="color: #000000">DetachedCriteria.forClass(FeedbackColumns.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.addOrder(Order.desc(</span><span style="color: #000000">"</span><span style="color: #000000">id</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression.sql(</span><span style="color: #000000">"</span><span style="color: #000000">site&nbsp;=&nbsp;(?)&nbsp;and&nbsp;rownum=1</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Hibernate.STRING)&nbsp;);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">FeedbackColumns</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getHibernateTemplate().findByCriteria(criteria);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
//QBC中Expression.eq和Expression.allEq的应用<br />
&nbsp;&nbsp;前者可以应用多个单条件进行整合，后者为单一多条件<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_53_586_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_586_Open_Text.style.display='none'; Codehighlighter1_53_586_Closed_Image.style.display='inline'; Codehighlighter1_53_586_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_53_586_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_586_Closed_Text.style.display='none'; Codehighlighter1_53_586_Open_Image.style.display='inline'; Codehighlighter1_53_586_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;&nbsp;List&nbsp;&nbsp;show()</span><span id="Codehighlighter1_53_586_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_53_586_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashMap&nbsp;&nbsp;map&nbsp;=&nbsp;new&nbsp;HashMap();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;map.put("state","3");<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;map.put("id",new&nbsp;Integer(15));</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DetachedCriteria&nbsp;criteria</span><span style="color: #000000">=</span><span style="color: #000000">DetachedCriteria.forClass(FeedbackColumns.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">________________</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">criteria.addOrder(Order.desc("id"));</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">________________</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">criteria.add(Expression.allEq(map));</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.add(Expression.eq(</span><span style="color: #000000">"</span><span style="color: #000000">site</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Long(</span><span style="color: #000000">1</span><span style="color: #000000">)));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getHibernateTemplate().findByCriteria(criteria);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result.size());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<br />
JSP中应用：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、静态声明ctx与ics，再加个判断，起到优化的作用。（因为全局变量存放与内存当中，此处加一个判断的作用是服务器启动后，只需要加载一次SPRING）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、加载spring支持<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、通过接口去访问hibernate的底层类，得到LIST的值<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;%!</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;ApplicationContext&nbsp;ctx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;IFeedbackColumnsService&nbsp;ics&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;%</span><span style="color: #000000"><br />
<img id="Codehighlighter1_142_343_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_343_Open_Text.style.display='none'; Codehighlighter1_142_343_Closed_Image.style.display='inline'; Codehighlighter1_142_343_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_142_343_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_142_343_Closed_Text.style.display='none'; Codehighlighter1_142_343_Open_Image.style.display='inline'; Codehighlighter1_142_343_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(ctx&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;ics&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_142_343_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_142_343_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ctx&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileSystemXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">F:/Tomcat&nbsp;5.0/webapps/zmhd/WEB-INF/classes/applicationContext.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ics&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IFeedbackColumnsService)&nbsp;ctx.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">FeedbackColumnsServiceImpl</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list</span><span style="color: #000000">=</span><span style="color: #000000">ics.findLatest();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(list.size());&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">list</span><span style="color: #000000">"</span><span style="color: #000000">,list);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">%&gt;</span></div>
<img src ="http://www.blogjava.net/fangts/aggbug/287599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2009-07-21 11:23 <a href="http://www.blogjava.net/fangts/archive/2009/07/21/287599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate QBC查询 </title><link>http://www.blogjava.net/fangts/archive/2009/07/19/287342.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Sun, 19 Jul 2009 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2009/07/19/287342.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/287342.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2009/07/19/287342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/287342.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/287342.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt"><span style="font-size: 12pt">Hibernate QBC查询 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QBC查询： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QBC查询就是通过使用Hibernate提供的Query By Criteria <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; API来查询对象，这种API封装了SQL语句的动态拼装，对查询提供了更加面向对象的功能接口。我们看下面的示例程序： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#00ffff">Criteria criteria=session.createCriteria(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.add(Expression.eq(&#8220;name&#8221;,&#8221;zx&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.add(Expression.eq(&#8220;age&#8221;,new Integer(27)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list=criteria.list(); <br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当执行criteria.list()时会生成类似这样的SQL语句：Select * from user where name=&#8217;zx&#8217; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; age=27;所以在这里我们可以看出，Criteria实际上是一个查询容器，它对查询条件表达式的添加进行了封装，具体的查询条件是通过add()方法添加的，而且具体的查询条件的表达式运算是通过Expression指定的。Hibernate在运行期会根据Criteria指定的表达式条件来添加查询条件，并且生成查询语句。这种方式非常符合Java以及所有面向对象编程语言的编程方式，所以大多数的持久层框架都提供了对这种方式查询的支持。下面我们讲解这种查询方式的各个技术细节。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、Criteria查询表达式： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 正如我们所见，Expression对查询语句的表达式进行了封装和限制，下表列出了Expression所有的方法，以及每个方法所对应的查询表达式及其限制。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法描述 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="+0">Expression.eq</font>对应SQL的&#8220;field=value&#8221;表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如：Expression.eq(&#8220;name&#8221;,&#8221;zx&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.allEq方法的参数为一个Map类型对象，包含多个名/值对对应关系，相当于多个Expression.eq的叠加 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.gt对应SQL的&#8220;field&gt;value&#8221;表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.ge对应SQL的&#8220;field&gt;=value&#8221;表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.lt对应SQL的&#8220;field&#8221;表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.le对应SQL的&#8220;field&lt;=value&#8221;表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.between对应SQL语句的between表达式，如：查询年龄在21与27岁之间的用户，可以写成Expression.between(&#8220;age&#8221;,new <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer(21),new Integer(27)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.like对应SQL语句的&#8221;field like value&#8221;表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.in对应SQL语句的&#8220;field in(&#8230;&#8230;)&#8221;表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.eqProperty用于比较两个属性值，对应&#8221;field=field&#8221;SQL表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.gtProperty用于比较两个属性值，对应&#8221;field&gt;field&#8221;SQL表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.geProperty用于比较两个属性值，对应&#8221;field&gt;=field&#8221;SQL表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.ltProperty用于比较两个属性值，对应&#8221;field表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.leProperty用于比较两个属性值，对应&#8221;field&lt;=field&#8221;SQL表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.and对应SQL语句的And关系组合，如：Expression.and(Expression.eq(&#8220;name&#8221;,&#8221;zx&#8221;),Expression.eq(&#8220;sex&#8221;,&#8221;1&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.or对应SQL语句的Or关系组合，如：Expression.or(Expression.eq(&#8220;name&#8221;,&#8221;zx&#8221;),Expression.eq(&#8220;name&#8221;,&#8221;zhaoxin&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression.sql作为补充这个方法提供了原生SQL语句查询的支持，在执行时直接通过原生SQL语句进行限定，如：Expression.sql(&#8220;lower({alias}.name) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; like (?)&#8221;,&#8220;zhao%&#8221;,Hibernate.STRING) ;在运行时{ alias <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }将会由当前查询所关联的实体类名替换，()中的?将会由&#8221;zhao%&#8221;替换，并且类型由Hibernate.STRING指定。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：Expression各方法中的属性参数（各方法中的第一个参数）所指定的属性名称（如：name,sex），并不是数据库表中的实际字段名称，而是实体对象中映射实际数据表字段的类属性名称。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、示例查询： <br />
&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; 示例查询是通过Example类来完成的，Example类实现了Criterion接口，可以用作Criteria查询条件，Example类的作用是：根据已有对象，查询属性值与之相同的其他对象。如下代码所示： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#00ffff">Criteria criteria=session.createCriteria(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User exampleuser=new User(&#8220;zx&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.add(Example.create(exampleuser)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list=criteria.list(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user=(User)list.get(i); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(user.getName()+&#8221;\n&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上述代码中User exampleuser=new <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User(&#8220;zx&#8221;);criteria.add(Example.create(exampleuser));两句相当于 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.add(Expression.eq(&#8220;name&#8221;,&#8221;zx&#8221;));因此会生成类似如下的SQL语句： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from user where name=&#8217;zx&#8217;;在上面的代码中exampleuser称为示例对象。 <br />
&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; 在Hibernate中队示例查询，默认情况下会排除掉示例对象中属性值为空的属性，还可以调用Example.excludeNone（排除空串值）/excludeZeros（排除零值），或者调用Example.excludeProperty方法来指定排除特定属性。 <br />
&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; 示例查询主要应用于组合查询中，比如根据用户输入的查询条件动态生成最终的查询语句，通过使用示例查询，可以避免由于查询条件过多而写的大量if判断语句。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、复合查询： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 复合查询主要是处理，具有关联关系的两个实体怎样进行关联查询，比如User实体对象与Addres实体对象具有一对多的关联关系，我们可以如下构造符合查询： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#00ffff"> Criteria criteria=session.createCriteria(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Criteria addcriteria=criteria.createCriteria(&#8220;addresses&#8221;);(1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addcriteria.add(Express.like(&#8220;address&#8221;,&#8221;%tianjin%&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list=criteria.list(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user=(User)list.get(i); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(user.getName()+&#8221;\n&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set addresses=user.getAddresses(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=addresses.iterator(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext(){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Address address=(Address)it.next(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(address.getAddress()+&#8221;\n&#8221;); <br />
&nbsp;&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; } <br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当执行到了（1）处时，表明要针对User对象的addresses属性添加新的查询条件，因此当执行criteria.list()时，Hibernate会生成类似如下的SQL语句： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select * from user inner join address on user.id=address.id where <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address.address like &#8216;%shanghai%&#8217;; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 正如我们所见，我们可以通过向Criteria中添加保存关联对象的集合属性（addresses属性保存与User对象相关联的Address对象），来构造复合查询，在数据库一端是通过内连接查询来实现。 <br />
&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; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、Criteria的高级特性： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A、限定返回记录条数： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们可以通过利用Criteria.setFirstResult/setMaxResult方法来限定返回某一次查询的记录数，如下代码： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Criteria criteria=session.createCriteria(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.setFirstResult(100); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.setMaxResult(200); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过以上代码可以设定该次查询返回user表中的从第100条记录开始直到第200条记录结束的100条记录。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B、对查询结果进行排序： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可通过使用net.sf.hibernate.expression.Order类可以对查询结果集进行排序，如下面代码： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#00ffff">Criteria criteria=session.createCriteria(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.add(Expression.eq(&#8220;groupid&#8221;,&#8221;2&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.addOrder(Order.asc(&#8220;name&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.addOrder(Order.desc(&#8220;groupid&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list=criteria.list();</font> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过使用Order类的asc()/desc()方法，可以指定针对某个字段的排序逻辑，如果执行上述代码，会生成类似如下的SQL语句： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select * from user where groupid=&#8217;2&#8217; order by name asc,groupid desc <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C、分组与统计： <br />
&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; 在Hibernate3中，对Criteria又增添了新功能，可以支持分组与统计功能，在Hibernate3中增加了Projections以及ProjectionList类，这两个类对分组与统计功能进行了封装，如下代码： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#00ffff">Criteria criteria=session.createCriteria(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.setProjection(Projections.groupProperty(&#8220;age&#8221;));(1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list=criteria.list(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=list.iterator(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext()){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(it.next()); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过（1）处的代码，我们通过Projections类指定了用于分组的目标属性，当进行检索时Hibernate会生成类似如下的SQL语句： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select age from user group by age; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 还可以通过使用Projections的avg()/rowCount()/count()/max()/min()/countDistinct()等方法来实现统计功能，如下面的代码示例： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#00ffff">Criteria criteria=session.createCriteria(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.setProjection(Projections.avg(&#8220;age&#8221;));(1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list=criteria.list(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=list.iterator(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext()){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(it.next()); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过（1）处的代码，我们实现了对用户平均年龄的统计，当进行检索时，Hibernate会生成类似如下的SQL语句： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select avg(age) from user; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外，在SQL语句中的多条件分组与统计功能，可以利用ProjectionList类来实现，如下面代码所示： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#00ffff">Criteria criteria=session.createCriteria(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProjectionList prolist=Projections.projectionList(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prolist.add(Projections.groupProperty(&#8220;age&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prolist.add(Projections.rowCount()); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.setProjection(prolist); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list=criteria.list();</font> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过以上代码，实现了对不同年龄人员数量的分组统计，当进行检索时，Hibernate会生成类似如下的SQL语句： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select age,count(*) from user group by age; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、DetachedCriteria: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Hibernate2中，Criteria实例是与创建它的Session实例具有相同的生命周期的，也就是说，Session实例是它所创建的Criteria实例的宿主，当Session关闭时，寄生于Session实例的Criteria都将失效。这就对Criteria的重用造成了困难，为了实现Criteria实例的重用，在Hibernate3中提供了一个DetachedCriteria类，DetachedCriteria实例的生命周期与Session实例的生命周期无关，我们可以利用DetachedCriteria对一些常用的Criteria查询条件进行抽离，当需要进行检索时再与Session实例关联，从而获得运行期的Criteria实例。如下面的代码所示： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#00ffff">DetachedCriteria dc= DetachedCriteria.forClass(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dc.add(Expression.eq(&#8220;name&#8221;,&#8221;zhaoxin&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dc.add(Expression.eq(&#8220;sex&#8221;,&#8221;1&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Criteria criteria=dc.getExecutableCriteria(session); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator it=criteria.list().iterator(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(it.hasNext()){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User user=(User)it.next(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(user.getName()); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 正如我们所见，DetachedCriteria的生存周期与session实例无关，当需要进行检索时，通过getExecutableCriteria(session)方法，与当前的Session实例关联并获得运行期的Criteria实例，完成检索。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DetachedCriteria也可以用于完成子查询功能，如下代码所示： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#00ffff">DetachedCriteria dc= DetachedCriteria.forClass(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dc.setProjection(Projections.avg(&#8220;age&#8221;)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Criteria criteria=session.createCriteria(User.class); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; criteria.add(Subqueries.propertyGt(&#8220;age&#8221;,dc)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list=criteria.list();</font> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过Subqueries类，实现了添加子查询的功能，我们将DetachedCriteria所设定的查询条件，当作子查询添加到了运行时Criteria实例的查询条件中，当执行检索时Hibernate会生成类似如下的SQL语句： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000"> Select * from user where age&gt;(select avg(age) from user group by <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; age);</font> </span></span>
<img src ="http://www.blogjava.net/fangts/aggbug/287342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2009-07-19 16:12 <a href="http://www.blogjava.net/fangts/archive/2009/07/19/287342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apche与多个tomcat整合</title><link>http://www.blogjava.net/fangts/archive/2009/07/17/287112.html</link><dc:creator>方涛升</dc:creator><author>方涛升</author><pubDate>Fri, 17 Jul 2009 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/fangts/archive/2009/07/17/287112.html</guid><wfw:comment>http://www.blogjava.net/fangts/comments/287112.html</wfw:comment><comments>http://www.blogjava.net/fangts/archive/2009/07/17/287112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fangts/comments/commentRss/287112.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fangts/services/trackbacks/287112.html</trackback:ping><description><![CDATA[<p>整合条件：1、apche2.0.49&nbsp;mod_jk2.dll<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2、tomcat4.1&nbsp; tomcat5.0.28<br />
<br />
一、安装tomcat4.1（所有端口默认）<br />
二、tomcat5.0.28必须为非安装版（server.xml）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、更改8005端口，为防止与tomcat4.1占用端口冲突&lt;Server port="8005" shutdown="SHUTDOWN" debug="0"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、找到 &lt;!-- Define a non-SSL Coyote HTTP/1.1...--&gt; 更改port端口号（此处更改为tomcat，暂时更改为8081）</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、找到&lt;!-- Define a Coyote/JK2 AJP 1.3 Connector on ...--&gt;更改port端口号（此处更改为apache，暂时更改为8018）<br />
三、更改apache的workers2.properties文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">[shm]<br />
<img id="Codehighlighter1_12_23_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12_23_Open_Text.style.display='none'; Codehighlighter1_12_23_Closed_Image.style.display='inline'; Codehighlighter1_12_23_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_12_23_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_12_23_Closed_Text.style.display='none'; Codehighlighter1_12_23_Open_Image.style.display='inline'; Codehighlighter1_12_23_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />file</span><span style="color: #000000">=</span><span style="color: #000000">$</span><span id="Codehighlighter1_12_23_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_12_23_Open_Text"><span style="color: #000000">{serverRoot}</span></span><span style="color: #000000">/</span><span style="color: #000000">logs</span><span style="color: #000000">/</span><span style="color: #000000">shm.file<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />size</span><span style="color: #000000">=</span><span style="color: #000000">1048576</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;Example&nbsp;socket&nbsp;channel,&nbsp;override&nbsp;port&nbsp;and&nbsp;host.<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />[channel.socket:localhost:</span><span style="color: #000000">8009</span><span style="color: #000000">]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />port</span><span style="color: #000000">=</span><span style="color: #000000">8009</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />host</span><span style="color: #000000">=</span><span style="color: #000000">127.0</span><span style="color: #000000">.</span><span style="color: #000000">0.1</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />[channel.socket:localhost:</span><span style="color: #000000">8018</span><span style="color: #000000">]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />port</span><span style="color: #000000">=</span><span style="color: #000000">8018</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />host</span><span style="color: #000000">=</span><span style="color: #000000">127.0</span><span style="color: #000000">.</span><span style="color: #000000">0.1</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;define&nbsp;the&nbsp;worker<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />[ajp13:localhost:</span><span style="color: #000000">8009</span><span style="color: #000000">]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />channel</span><span style="color: #000000">=</span><span style="color: #000000">channel.socket:localhost:</span><span style="color: #000000">8009</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />[ajp13:localhost:</span><span style="color: #000000">8018</span><span style="color: #000000">]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />channel</span><span style="color: #000000">=</span><span style="color: #000000">channel.socket:localhost:</span><span style="color: #000000">8018</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;Uri<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;Map&nbsp;All&nbsp;webapp&nbsp;to&nbsp;the&nbsp;Web&nbsp;server&nbsp;uri&nbsp;space<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_428_557_Open_Image" onclick="this.style.display='none'; Codehighlighter1_428_557_Open_Text.style.display='none'; Codehighlighter1_428_557_Closed_Image.style.display='inline'; Codehighlighter1_428_557_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_428_557_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_428_557_Closed_Text.style.display='none'; Codehighlighter1_428_557_Open_Image.style.display='inline'; Codehighlighter1_428_557_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />[uri:</span><span style="color: #000000">/</span><span style="color: #000000">servlet</span><span id="Codehighlighter1_428_557_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_428_557_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />worker=ajp13:localhost:8009<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />[uri:/infoseek/*]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />worker=ajp13:localhost:8009<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />[uri:/dataReport/*]<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />worker=ajp13:localhost:8018<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span></div>
<br />
这样apche与tomcat的整合就完成了<br />
另：apche的http.conf文件 DocumentRoot "D:/www" 可以指定apache项目发布路径<br />
tomcat的server.xml文件搜索&lt;Logger className="org.apache.catalina.logger.FileLogger".../&gt;下加入&lt;Context path="/infoseek" docBase="D:\www\webapps\infoseek" debug="0"/&gt;可指定tomcat发布路径</span> 
<img src ="http://www.blogjava.net/fangts/aggbug/287112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fangts/" target="_blank">方涛升</a> 2009-07-17 11:14 <a href="http://www.blogjava.net/fangts/archive/2009/07/17/287112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>