﻿<?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-时间-文章分类-Open Framekwork</title><link>http://www.blogjava.net/lvq810/category/31963.html</link><description>世间最可贵的就是“今”，最易丧失得也是“今”。因为它最容易丧失，所以更觉得它宝贵。</description><language>zh-cn</language><lastBuildDate>Thu, 21 May 2009 09:13:15 GMT</lastBuildDate><pubDate>Thu, 21 May 2009 09:13:15 GMT</pubDate><ttl>60</ttl><item><title>使用Dom4j和xPath解析XML(二)</title><link>http://www.blogjava.net/lvq810/articles/271423.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Mon, 18 May 2009 16:12:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/271423.html</guid><description><![CDATA[在使用Dom4j解析xml文档时,我们很希望有一种类似正则表达式的东西来规范查询条件,而xpath正是这样一种很便利的规则.<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">String&nbsp;xmlName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;path&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;userName&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;定义需要返回的第一级菜单的名字集合&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;firstNames&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Attribute的属性集合&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;attrs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;声明SAXReader&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXReader&nbsp;saxReader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SAXReader();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;saxReader.read(xmlName);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;获得所有grade=1的Element的text的值&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;xpath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/tree/item</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;doc.selectNodes(xpath);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;it&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;list.iterator();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(it.hasNext())&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;elt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;it.next();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute&nbsp;attr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elt.attribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">grade</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(attr.getValue());&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Integer(attr.getValue()).intValue()&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elt.attribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">text</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attrs.add(attr.getValue());&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(attr.getValue());&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&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;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(DocumentException&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;attrs;&nbsp;&nbsp;<br />
<br />
String&nbsp;xmlName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;path&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;userName&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;定义需要返回的第一级菜单的名字集合&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">List&nbsp;firstNames&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList();&nbsp;<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Attribute的属性集合&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">List&nbsp;attrs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList();&nbsp;<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;声明SAXReader&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">SAXReader&nbsp;saxReader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SAXReader();&nbsp;<br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{&nbsp;<br />
Document&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;saxReader.read(xmlName);&nbsp;<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;获得所有grade=1的Element的text的值&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">String&nbsp;xpath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/tree/item</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;<br />
List&nbsp;list&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;doc.selectNodes(xpath);&nbsp;<br />
Iterator&nbsp;it&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;list.iterator();&nbsp;<br />
</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(it.hasNext())&nbsp;{&nbsp;<br />
Element&nbsp;elt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;it.next();&nbsp;<br />
Attribute&nbsp;attr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elt.attribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">grade</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;<br />
System.out.println(attr.getValue());&nbsp;<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Integer(attr.getValue()).intValue()&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;{&nbsp;<br />
attr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elt.attribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">text</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;<br />
attrs.add(attr.getValue());&nbsp;<br />
System.out.println(attr.getValue());&nbsp;<br />
}&nbsp;<br />
}&nbsp;<br />
<br />
}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(DocumentException&nbsp;e)&nbsp;{&nbsp;<br />
e.printStackTrace();&nbsp;<br />
}&nbsp;<br />
</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;attrs; <br />
</span></div>
<br />
还有一个是获取某个节点下面里的所有第一级子节点,而不是所有的节点(包括子节点和孙节点).
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;List&nbsp;getSecondMenuNames(String&nbsp;textName,&nbsp;String&nbsp;path,&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;userName)&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;xmlName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;path&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;userName&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;textName;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;定义需要返回的第二级菜单的名字集合&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;firstNames&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Attribute的属性集合&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;attrs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;声明SAXReader&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXReader&nbsp;saxReader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SAXReader();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;saxReader.read(xmlName);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;这个xpath的意思是,获取text='系统管理'的一个Item下的所有Item的节点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;xpath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">//item[@text='</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">']/child::*</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;doc.selectNodes(xpath);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;it&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;list.iterator();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(it.hasNext())&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;elt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;it.next();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute&nbsp;attr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elt.attribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">grade</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(attr.getValue());&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elt.attribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">text</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(attr.getValue());&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attrs.add(attr.getValue());&nbsp;&nbsp;&nbsp;<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;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;attrs;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;List&nbsp;getSecondMenuNames(String&nbsp;textName,&nbsp;String&nbsp;path,&nbsp;<br />
String&nbsp;userName)&nbsp;{&nbsp;<br />
String&nbsp;xmlName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;path&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;userName&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;<br />
String&nbsp;name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;textName;&nbsp;<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;定义需要返回的第二级菜单的名字集合&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">List&nbsp;firstNames&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList();&nbsp;<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Attribute的属性集合&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">List&nbsp;attrs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ArrayList();&nbsp;<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;声明SAXReader&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">SAXReader&nbsp;saxReader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SAXReader();&nbsp;<br />
</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{&nbsp;<br />
Document&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;saxReader.read(xmlName);&nbsp;<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;这个xpath的意思是,获取text='系统管理'的一个Item下的所有Item的节点&nbsp;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">String&nbsp;xpath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">//item[@text='</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;name&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">']/child::*</span><span style="color: #000000;">"</span><span style="color: #000000;">;&nbsp;<br />
<br />
List&nbsp;list&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;doc.selectNodes(xpath);&nbsp;<br />
Iterator&nbsp;it&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;list.iterator();&nbsp;<br />
</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(it.hasNext())&nbsp;{&nbsp;<br />
Element&nbsp;elt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;it.next();&nbsp;<br />
<br />
Attribute&nbsp;attr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elt.attribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">grade</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;<br />
System.out.println(attr.getValue());&nbsp;<br />
<br />
attr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;elt.attribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">text</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;<br />
System.out.println(attr.getValue());&nbsp;<br />
attrs.add(attr.getValue());&nbsp;<br />
}&nbsp;<br />
}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;<br />
e.printStackTrace();&nbsp;<br />
}&nbsp;<br />
</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;attrs;&nbsp;<br />
}</span></div>
<br />
注意看其中的xpath的写法,正是因为有了xpath,我们才能如此简单灵活的对xml进行操作.
<br />
刚刚使用xpath的时候可能会报一个错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
<br />
这时我们应该往CLASSPATH导入一个jar包,叫jaxen-1.1.1.jar,可从网上下载.
<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bookstore</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">book</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title&nbsp;</span><span style="color: #ff0000;">lang</span><span style="color: #0000ff;">="eng"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Harry&nbsp;Potter</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">price</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">29.99</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">price</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">book</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">book</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title&nbsp;</span><span style="color: #ff0000;">lang</span><span style="color: #0000ff;">="eng"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Learning&nbsp;XML</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">price</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">39.95</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">price</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">book</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bookstore</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"> <br />
</span></div>
<br />
表达式&nbsp;&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; 选择所有该名称的节点集<br />
/&nbsp;&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; 选择当前节点下的所有节点<br />
.&nbsp;&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; 选择父节点<br />
@&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;选择属性<br />
示例<br />
表达式&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;描述<br />
bookstore&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 选择所有bookstore子节点<br />
/bookstore&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 选择根节点bookstore<br />
bookstore/book&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 在bookstore的子节点中选择所有名为book的节点<br />
//book&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 选择xml文档中所有名为book的节点<br />
bookstore//book&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 选择节点bookstore下的所有名为book为节点<br />
//@lang&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 选择所有名为lang的属性<br />
<br />
表达式&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 描述<br />
/bookstore/book[1]&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择根元素bookstore的book子元素中的第一个(注意: IE5以上浏览器中第一个元素是0)<br />
/bookstore/book[last()]&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 选择根元素bookstore的book子元素中的最后一个<br />
/bookstore/book[last()-1]&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 选择根元素bookstore的book子元素中的最后第二个<br />
/bookstore/book[position()35.00]&nbsp;&nbsp; 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的<br />
/bookstore/book[price&gt;35.00]/title 选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的title子元素<br />
<br />
通配符&nbsp;&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; &nbsp;匹配所有元素<br />
@*&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 匹配所有属性节点<br />
node()&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 匹配任何类型的节点<br />
示例<br />
表达式&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;描述<br />
/bookstore/*&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 选择根元素bookstore的下的所有子元素<br />
//*&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 选择文档中所有元素<br />
//title[@*]&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 选择所有拥有属性的title元素<br />
<img src ="http://www.blogjava.net/lvq810/aggbug/271423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2009-05-19 00:12 <a href="http://www.blogjava.net/lvq810/articles/271423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Dom4j和xPath解析XML(一)</title><link>http://www.blogjava.net/lvq810/articles/271416.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Mon, 18 May 2009 15:45:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/271416.html</guid><description><![CDATA[books.xml：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">books</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">This&nbsp;is&nbsp;a&nbsp;test&nbsp;for&nbsp;dom4j,&nbsp;jakoes,&nbsp;2007.7.19</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">book </span><span style="color: #ff0000;">show</span><span style="color: #0000ff;">="yes"</span><span style="color: #ff0000;">&nbsp;url</span><span style="color: #0000ff;">="lucene.net"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="456"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Lucene&nbsp;Studing</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">book</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">book&nbsp;</span><span style="color: #ff0000;">show</span><span style="color: #0000ff;">="yes"</span><span style="color: #ff0000;">&nbsp;url</span><span style="color: #0000ff;">="dom4j.com"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="123"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Dom4j&nbsp;Tutorials</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">book</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">book&nbsp;</span><span style="color: #ff0000;">show</span><span style="color: #0000ff;">="no"</span><span style="color: #ff0000;">&nbsp;url</span><span style="color: #0000ff;">="spring.org"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="789"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Spring&nbsp;in&nbsp;Action</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">book</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">owner</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">O'Reilly</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">owner</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">books</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
下面我们使用dom4j的xPath来解析：
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;parseBooks(){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXReader&nbsp;reader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SAXReader();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;reader.read(</span><span style="color: #000000;">"</span><span style="color: #000000;">books.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;root&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;doc.selectSingleNode(</span><span style="color: #000000;">"</span><span style="color: #000000;">/books</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;root.selectNodes(</span><span style="color: #000000;">"</span><span style="color: #000000;">book[@url='dom4j.com']</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;<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;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(Object&nbsp;o:list){&nbsp;&nbsp;&nbsp;<br />
&nbsp;&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;Element&nbsp;e&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;o;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;show</span><span style="color: #000000;">=</span><span style="color: #000000;">e.attributeValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">show</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">show&nbsp;=&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;show);&nbsp;&nbsp;&nbsp;<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;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;parseBooks(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXReader&nbsp;reader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SAXReader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;reader.read(</span><span style="color: #000000;">"</span><span style="color: #000000;">books.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Node&nbsp;root&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;doc.selectSingleNode(</span><span style="color: #000000;">"</span><span style="color: #000000;">/books</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;root.selectNodes(</span><span style="color: #000000;">"</span><span style="color: #000000;">book[@url='dom4j.com']</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(Object&nbsp;o:list){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;e&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;o;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;show</span><span style="color: #000000;">=</span><span style="color: #000000;">e.attributeValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">show</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">show&nbsp;=&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;show);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;<br />
</span></div>
<br />
Document doc = reader.read("books.xml");的意思是加载XML文档，此是可以用
<br />
doc.asXML()来查看，它将打印整个xml文档。
<br />
<br />
Node root = doc.selectSingleNode("/books");是读取刚才加载的xml文档内的books节点下的所有内容，对于本例也是整个xml文档。
<br />
当然我们也可以加载/books下的某一个节点，如：book节点
<br />
Node root = doc.selectSingleNode("/books/book");
<br />
或：Node root = doc.selectSingleNode("/books/*");
<br />
注意：如果有多个book节点，它只会读取第一个
<br />
root.asXML()将打印：
<br />
&lt;book show="yes" url="lucene.net"&gt;
<br />
&nbsp;&nbsp;&nbsp; &lt;title id="456"&gt;Lucene Studing&lt;/title&gt;
<br />
&lt;/book&gt;
<br />
<br />
既然加载了这么多，那我怎么精确的得到我想要的节点呢，别急，看下面：
<br />
List list = root.selectNodes("book[@url='dom4j.com']");
<br />
它的意思就是读取books节点下的book节点，且book的节点的url属性为dom4j.com
<br />
为什么使用list来接收呢，如果有两个book节点，且它们的url属性都为dom4j.com，此时就封闭到list里了。
<br />
<br />
如果想读取books下的所有book节点，可以这样：
<br />
List list = root.selectNodes("book");
<br />
<br />
如果想读取books节点下的book节点下的title节点，可以这样：
<br />
List list2 = root.selectNodes("book[@url='dom4j.com']/title[@id='123']");
<br />
<br />
注意：selectNodes()参数的格式：
<br />
节点名[@属性名='属性值']，如：book[@url='dom4j.com']
<br />
如果有多个节点，用&#8220;/&#8221;分开，如：book[@url='dom4j.com']/title[@id='123']
<br />
<br />
最近就是读取封闭在List里的内容了，可以用Node来读取，也可以用Element来转换。
<br />
attributeValue("属性")是读取该节点的属性值
<br />
getText()是读取节点的的内容。<br />
<br />
<font style="background-color: #cde7cd;"><font style="background-color: #cde7cd;"><strong></strong></font></font>selectNodes(Object context, XPath sortXPath)第二个参数用来设置排序的属性名<br />
如：List list = root.selectNodes("book/title","@id");
<br />
这样则会根据title节点的id属性排序
<img src ="http://www.blogjava.net/lvq810/aggbug/271416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2009-05-18 23:45 <a href="http://www.blogjava.net/lvq810/articles/271416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>110个知名Java项目集锦 </title><link>http://www.blogjava.net/lvq810/articles/227026.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Thu, 04 Sep 2008 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/227026.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/227026.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/227026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/227026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/227026.html</trackback:ping><description><![CDATA[<div class="postText">
<table border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <th>项目名称</th>
            <th colspan="3" rowspan="111">&nbsp;</th>
            <th>项目描述<a href="http://andyluo.blogjava.net/"><font color="#ffffff"></font></a></th>
        </tr>
        <tr>
            <td><a title="Homepage for ASM" href="http://asm.objectweb.org/" target="_blank">ASM</a> </td>
            <td style="font-size: 75%;">Java bytecode manipulation framework</td>
        </tr>
        <tr>
            <td><a title="Homepage for AspectWerkz" href="http://aspectwerkz.codehaus.org/" target="_blank">AspectWerkz</a> </td>
            <td style="font-size: 75%;">AspectWerkz - Dynamic AOP for Java</td>
        </tr>
        <tr>
            <td><a title="Homepage for Axis" href="http://ws.apache.org/axis/" target="_blank">Axis</a> </td>
            <td style="font-size: 75%;">Axis - an implementation of the SOAP (Simple Object
            Access Protocol) submission to W3C</td>
        </tr>
        <tr>
            <td><a title="Homepage for Batik" href="http://xml.apache.org/batik/" target="_blank">Batik</a> </td>
            <td style="font-size: 75%;">Batik SVG Toolkit - Toolkit using images in the
            Scalable Vector Graphics (SVG) format</td>
        </tr>
        <tr>
            <td><a title="Homepage for BCEL" href="http://jakarta.apache.org/bcel" target="_blank">BCEL</a> </td>
            <td style="font-size: 75%;">Byte Code Engineering Library - Analyze, create and
            manipulate Java class files</td>
        </tr>
        <tr>
            <td><a title="Homepage for BeanUtils" href="http://jakarta.apache.org/commons/beanutils/" target="_blank">BeanUtils</a>
            </td>
            <td style="font-size: 75%;">BeanUtils - Utilities for working with
            JavaBeans</td>
        </tr>
        <tr>
            <td><a title="Homepage for Catalina" href="http://jakarta.apache.org/tomcat/" target="_blank">Catalina</a> </td>
            <td style="font-size: 75%;">Catalina - Servlet and JSP based web server</td>
        </tr>
        <tr>
            <td><a title="Homepage for Cayenne" href="http://objectstyle.org/cayenne/" target="_blank">Cayenne</a> </td>
            <td style="font-size: 75%;">Professional Object Relational Mapping</td>
        </tr>
        <tr>
            <td><a title="Homepage for CGLIB" href="http://cglib.sourceforge.net/" target="_blank">CGLIB</a> </td>
            <td style="font-size: 75%;">CGLIB - Dynamic byte code generator<a href="http://andyluo.blogjava.net/"><font color="#ffffff">http://andyluo.blogjava.net</font></a></td>
        </tr>
        <tr>
            <td><a title="Homepage for Chain" href="http://jakarta.apache.org/commons/chain/" target="_blank">Chain</a> </td>
            <td style="font-size: 75%;">Chain - Implementation of the GoF "Chain of
            Responsibility" pattern</td>
        </tr>
        <tr>
            <td><a title="Homepage for Checkstyle" href="http://checkstyle.sourceforge.net/" target="_blank">Checkstyle</a> </td>
            <td style="font-size: 75%;">Checkstyle - Development tool to help writing Java
            code that adheres to a coding standard</td>
        </tr>
        <tr>
            <td><a title="Homepage for CLI" href="http://jakarta.apache.org/commons/cli/" target="_blank">CLI</a> </td>
            <td style="font-size: 75%;">Command Line Library - Simple API for working with
            the command line arguments and options</td>
        </tr>
        <tr>
            <td><a title="Homepage for Codec" href="http://jakarta.apache.org/commons/codec/" target="_blank">Codec</a> </td>
            <td style="font-size: 75%;">Commons Codec - Encoders and decoders like Base64,
            Hex, phonetic encodings and URLs</td>
        </tr>
        <tr>
            <td><a title="Homepage for Collections" href="http://jakarta.apache.org/commons/collections/" target="_blank">Collections</a> </td>
            <td style="font-size: 75%;">Collections - Filling the holes left in Sun's
            Collections API</td>
        </tr>
        <tr>
            <td><a title="Homepage for Configuration" href="http://jakarta.apache.org/commons/configuration/" target="_blank">Configuration</a> </td>
            <td style="font-size: 75%;">Commons Configuration - Generic API enabling
            configuration from a variety of sources</td>
        </tr>
        <tr>
            <td><a title="Homepage for DBCP" href="http://jakarta.apache.org/commons/dbcp/" target="_blank">DBCP</a> </td>
            <td style="font-size: 75%;">DBCP - Connection pooling implementations</td>
        </tr>
        <tr>
            <td><a title="Homepage for DBUtils" href="http://jakarta.apache.org/commons/dbutils/" target="_blank">DBUtils</a>
            </td>
            <td style="font-size: 75%;">DbUtils - Set of classes designed to make working
            with JDBC easier</td>
        </tr>
        <tr>
            <td><a title="Homepage for Digester" href="http://jakarta.apache.org/commons/digester/" target="_blank">Digester</a>
            </td>
            <td style="font-size: 75%;">Struts Digester - Configure an XML/Java mapping with
            actions when patterns are recognized</td>
        </tr>
        <tr>
            <td><a title="Homepage for Discovery" href="http://jakarta.apache.org/commons/discovery/" target="_blank">Discovery</a>
            </td>
            <td style="font-size: 75%;">Discovery - Discovering, or finding, implementations
            for pluggable interfaces</td>
        </tr>
        <tr>
            <td><a title="Homepage for DNSJava" href="http://www.xbill.org/dnsjava" target="_blank">DNSJava</a> </td>
            <td style="font-size: 75%;">DNS in Java - Supporting common record types,
            queries, zone transfers and dynamic updates</td>
        </tr>
        <tr>
            <td><a title="Homepage for doclet" href="http://java.sun.com/j2se/1.5.0/docs/guide/javadoc" target="_blank">doclet</a> </td>
            <td style="font-size: 75%;">JavaDoc Doclet - Custom output from the types methods
            and fields in a source tree.</td>
        </tr>
        <tr>
            <td><a title="Homepage for Dom4j" href="http://www.dom4j.org/" target="_blank">Dom4j</a> </td>
            <td style="font-size: 75%;">DOM4J - XML, XPath and XSLT library</td>
        </tr>
        <tr>
            <td><a title="Homepage for DTDParser" href="http://wutka.com/dtdparser.html" target="_blank">DTDParser</a> </td>
            <td style="font-size: 75%;">DTDParse DTD Library - You can use this library to
            parse a DTD</td>
        </tr>
        <tr>
            <td><a title="Homepage for EL" href="http://jakarta.apache.org/commons/el/" target="_blank">EL</a> </td>
            <td style="font-size: 75%;">EL - The JSP 2.0 Expression Language Interpreter from
            Apache</td>
        </tr>
        <tr>
            <td><a title="Homepage for fastutil" href="http://fastutil.dsi.unimi.it/" target="_blank">fastutil</a> </td>
            <td style="font-size: 75%;">FastUtil - Type-specific maps sets and lists with a
            small memory footprint and fast access</td>
        </tr>
        <tr>
            <td><a title="Homepage for FileUpload" href="http://jakarta.apache.org/commons/fileupload/" target="_blank">FileUpload</a> </td>
            <td style="font-size: 75%;">HTTP File Upload Library - Add robust, fast file
            upload capability to your web applications</td>
        </tr>
        <tr>
            <td><a title="Homepage for FreeMarker" href="http://freemarker.sourceforge.net/" target="_blank">FreeMarker</a> </td>
            <td style="font-size: 75%;">HTML Template Engine<a href="http://andyluo.blogjava.net/"><font color="#ffffff">http://andyluo.blogjava.net</font></a></td>
        </tr>
        <tr>
            <td><a title="Homepage for GJT" href="http://www.gjt.org/" target="_blank">GJT</a>
            </td>
            <td style="font-size: 75%;">Giant Java Tree - Java library consisting entirely of
            open source components</td>
        </tr>
        <tr>
            <td><a title="Homepage for gnu-regex" href="http://www.cacas.org/java/gnu/regexp" target="_blank">gnu-regex</a> </td>
            <td style="font-size: 75%;">GNU Regular Expressions - Implementation of a
            traditional (non-POSIX) NFA regex engine</td>
        </tr>
        <tr>
            <td><a title="Homepage for Groovy" href="http://groovy.codehaus.org/" target="_blank">Groovy</a> </td>
            <td style="font-size: 75%;">Groovy - Scripting Language</td>
        </tr>
        <tr>
            <td><a title="Homepage for Hibernate" href="http://www.hibernate.org/" target="_blank">Hibernate</a> </td>
            <td style="font-size: 75%;">Hibernate - Relational Persistence For Idiomatic
            Java</td>
        </tr>
        <tr>
            <td><a title="Homepage for HiveMind" href="http://jakarta.apache.org/hivemind/" target="_blank">HiveMind</a> </td>
            <td style="font-size: 75%;">HiveMind - A services and configuration
            microkernel</td>
        </tr>
        <tr>
            <td><a title="Homepage for HSQLDB" href="http://hsqldb.sourceforge.net/" target="_blank">HSQLDB</a> </td>
            <td style="font-size: 75%;">HSQLDB - The Java SQL relational database</td>
        </tr>
        <tr>
            <td><a title="Homepage for HTMLParser" href="http://htmlparser.sourceforge.net/" target="_blank">HTMLParser</a> </td>
            <td style="font-size: 75%;">HTML Parser - Java library used to parse
            HTML</td>
        </tr>
        <tr>
            <td><a title="Homepage for HTTPClient" href="http://jakarta.apache.org/commons/httpclient/" target="_blank">HTTPClient</a> </td>
            <td style="font-size: 75%;">HTTP Client - Fills holes left by the java.net
            package, including most recent HTTP standards</td>
        </tr>
        <tr>
            <td><a title="Homepage for Informa" href="http://informa.sourceforge.net/" target="_blank">Informa</a> </td>
            <td style="font-size: 75%;">Informa - News aggregation library</td>
        </tr>
        <tr>
            <td><a title="Homepage for IO" href="http://jakarta.apache.org/commons/io/" target="_blank">IO</a> </td>
            <td style="font-size: 75%;">Commons-IO - Utility classes, stream implementations,
            file filters and endian classes for IO</td>
        </tr>
        <tr>
            <td><a title="Homepage for iText" href="http://www.lowagie.com/iText/" target="_blank">iText</a> </td>
            <td style="font-size: 75%;">iText - Generates PDF o&#173;n the fly</td>
        </tr>
        <tr>
            <td><a title="Homepage for J2EE" href="http://java.sun.com/j2ee/1.4/docs" target="_blank">J2EE</a> </td>
            <td style="font-size: 75%;">Java 2 Platform, Enterprise Edition</td>
        </tr>
        <tr>
            <td><a title="Homepage for J2SE" href="http://java.sun.com/j2se/1.5.0/docs" target="_blank">J2SE</a> </td>
            <td style="font-size: 75%;">Java2 Standard Edition v5</td>
        </tr>
        <tr>
            <td><a title="Homepage for JAI" href="http://java.sun.com/products/java-media/jai" target="_blank">JAI</a> </td>
            <td style="font-size: 75%;">Java Advanced Imaging - Network-enabled, scalable,
            platform-independent image processing</td>
        </tr>
        <tr>
            <td><a title="Homepage for Jalopy" href="http://jalopy.sourceforge.net/" target="_blank">Jalopy</a> </td>
            <td style="font-size: 75%;">Jalopy Source Formatter - Formats Java source code
            according to widely configurable rules</td>
        </tr>
        <tr>
            <td><a title="Homepage for Jasper" href="http://jakarta.apache.org/tomcat/" target="_blank">Jasper</a> </td>
            <td style="font-size: 75%;">Jasper - Tomcat JSP engine<a href="http://andyluo.blogjava.net/"><font color="#ffffff">http://andyluo.blogjava.net</font></a></td>
        </tr>
        <tr>
            <td><a title="Homepage for JasperReports" href="http://jasperreports.sourceforge.net/" target="_blank">JasperReports</a>
            </td>
            <td style="font-size: 75%;">JasperReports - Free Java reporting library</td>
        </tr>
        <tr>
            <td><a title="Homepage for Java3d" href="http://java.sun.com/products/java-media/3D" target="_blank">Java3d</a> </td>
            <td style="font-size: 75%;">Java3D - Object-oriented interfaces that support a
            simple, high-level programming mode</td>
        </tr>
        <tr>
            <td><a title="Homepage for JavaComm" href="http://java.sun.com/products/javacomm/" target="_blank">JavaComm</a> </td>
            <td style="font-size: 75%;">Java Communications - API for technologies such as
            voice mail, fax and smartcards</td>
        </tr>
        <tr>
            <td><a title="Homepage for JavaGroups" href="http://www.javagroups.com/" target="_blank">JavaGroups</a> </td>
            <td style="font-size: 75%;">JavaGroups - Reliable multicast communication enable
            processes to send messages to each other</td>
        </tr>
        <tr>
            <td><a title="Homepage for Jaxen" href="http://jaxen.codehaus.org/" target="_blank">Jaxen</a> </td>
            <td style="font-size: 75%;">Jaxen XPath Processor - Object model walker; evaluate
            XPath expressions in dom4j and JDOM</td>
        </tr>
        <tr>
            <td><a title="Homepage for JAXME" href="http://ws.apache.org/jaxme/" target="_blank">JAXME</a> </td>
            <td style="font-size: 75%;">JaxMe 2 - Open source implementation of
            JAXB</td>
        </tr>
        <tr>
            <td><a title="Homepage for JClassLib" href="http://www.ej-technologies.com/products/jclasslib/overview.html" target="_blank">JClassLib</a> </td>
            <td style="font-size: 75%;">JClassLib - Library for reading, modifing and writing
            Java class files and bytecode</td>
        </tr>
        <tr>
            <td><a title="Homepage for JCommon" href="http://www.jfree.org/jcommon" target="_blank">JCommon</a> </td>
            <td style="font-size: 75%;">JCommon - Collection of useful classes used by
            JFreeChart, JFreeReport and other projects</td>
        </tr>
        <tr>
            <td><a title="Homepage for JCrontab" href="http://jcrontab.sourceforge.net/" target="_blank">JCrontab</a> </td>
            <td style="font-size: 75%;">JCronTab - Scheduler written in Java, provide a fully
            functional schedules for Java projects</td>
        </tr>
        <tr>
            <td><a title="Homepage for JDIC" href="https://jdic.dev.java.net/" target="_blank">JDIC</a> </td>
            <td style="font-size: 75%;">JDIC - JDesktop Integration Components</td>
        </tr>
        <tr>
            <td><a title="Homepage for JDNC" href="https://jdnc.dev.java.net/" target="_blank">JDNC</a> </td>
            <td style="font-size: 75%;">JDNC - JDesktop Network Components</td>
        </tr>
        <tr>
            <td><a title="Homepage for JDO" href="http://java.sun.com/products/jdo" target="_blank">JDO</a> </td>
            <td style="font-size: 75%;">Java Data Objects - Direct storage of Java domain
            model instances into a database</td>
        </tr>
        <tr>
            <td><a title="Homepage for JDOM" href="http://www.jdom.org/" target="_blank">JDOM</a> </td>
            <td style="font-size: 75%;">JDOM XML Library - For accessing, manipulating and
            outputting XML data from Java code.</td>
        </tr>
        <tr>
            <td><a title="Homepage for JetSpeed" href="http://portals.apache.org/jetspeed-1/" target="_blank">JetSpeed</a> </td>
            <td style="font-size: 75%;">JetSpeed - Java Portal Server</td>
        </tr>
        <tr>
            <td><a title="Homepage for JEXL" href="http://jakarta.apache.org/commons/jexl/" target="_blank">JEXL</a> </td>
            <td style="font-size: 75%;">Java Expression Language - is an embedable expression
            language engine</td>
        </tr>
        <tr>
            <td><a title="Homepage for JFreeChart" href="http://www.jfree.org/jfreechart" target="_blank">JFreeChart</a> </td>
            <td style="font-size: 75%;">JFreeChart - Free library for generating charts,
            including pie, bar, line and areas charts</td>
        </tr>
        <tr>
            <td><a title="Homepage for JGroups" href="http://www.jgroups.org/" target="_blank">JGroups</a> </td>
            <td style="font-size: 75%;">JGroups - Multicast communication toolkit</td>
        </tr>
        <tr>
            <td><a title="Homepage for JMeter" href="http://jakarta.apache.org/jmeter/" target="_blank">JMeter</a> </td>
            <td style="font-size: 75%;">JMeter - Load testing applcation</td>
        </tr>
        <tr>
            <td><a title="Homepage for JMF" href="http://java.sun.com/products/java-media/jmf/" target="_blank">JMF</a> </td>
            <td style="font-size: 75%;">Java Media Framework - Library for audio, video and
            other time-based media</td>
        </tr>
        <tr>
            <td><a title="Homepage for JMock" href="http://jmock.codehaus.org/" target="_blank">JMock</a> </td>
            <td style="font-size: 75%;">JMock - Testing library</td>
        </tr>
        <tr>
            <td><a title="Homepage for JSF" href="http://java.sun.com/j2ee/javaserverfaces" target="_blank">JSF</a> </td>
            <td style="font-size: 75%;">JavaServer Faces - Web Framework</td>
        </tr>
        <tr>
            <td><a title="Homepage for JSword" href="http://www.crosswire.org/jsword" target="_blank">JSword</a> </td>
            <td style="font-size: 75%;">JSword - Bible software in Java, compatible with the
            Sword project for C/C++</td>
        </tr>
        <tr>
            <td><a title="Homepage for JTidy" href="http://jtidy.sourceforge.net/" target="_blank">JTidy</a> </td>
            <td style="font-size: 75%;">JTidy - HTML syntax checker</td>
        </tr>
        <tr>
            <td><a title="Homepage for JUnit" href="http://www.junit.org/" target="_blank">JUnit</a> </td>
            <td style="font-size: 75%;">JUnit - Regression testing framework used by the
            developer who implements unit tests in Java</td>
        </tr>
        <tr>
            <td><a title="Homepage for JXPath" href="http://jakarta.apache.org/commons/jxpath/" target="_blank">JXPath</a> </td>
            <td style="font-size: 75%;">JXPath Library - Simple interpreter of an expression
            language called XPath</td>
        </tr>
        <tr>
            <td><a title="Homepage for Lang" href="http://jakarta.apache.org/commons/lang/" target="_blank">Lang</a> </td>
            <td style="font-size: 75%;">Lang - Utilities including Enums, String
            manipulation, reflection, serialization and more</td>
        </tr>
        <tr>
            <td><a title="Homepage for Log4J" href="http://logging.apache.org/log4j/" target="_blank">Log4J</a> </td>
            <td style="font-size: 75%;">Log4J - Fast logging API that lets you configure
            logging at runtime</td>
        </tr>
        <tr>
            <td><a title="Homepage for Logging" href="http://jakarta.apache.org/commons/logging/" target="_blank">Logging</a>
            </td>
            <td style="font-size: 75%;">Commons Logging - Simple wrapper API around multiple
            logging APIs</td>
        </tr>
        <tr>
            <td><a title="Homepage for Lucene" href="http://jakarta.apache.org/lucene/" target="_blank">Lucene</a> </td>
            <td style="font-size: 75%;">Lucene - high-performance, full-featured text search
            engine written entirely in Java</td>
        </tr>
        <tr>
            <td><a title="Homepage for Math" href="http://jakarta.apache.org/commons/math/" target="_blank">Math</a> </td>
            <td style="font-size: 75%;">Math - Library of lightweight, self-contained
            mathematics and statistics components</td>
        </tr>
        <tr>
            <td><a title="Homepage for Net" href="http://jakarta.apache.org/commons/net/" target="_blank">Net</a> </td>
            <td style="font-size: 75%;">Network Library - Support for Finger, Whois, TFTP,
            Telnet, FTP, NNTP, etc developed by ORO</td>
        </tr>
        <tr>
            <td><a title="Homepage for OJB" href="http://db.apache.org/ojb/" target="_blank">OJB</a> </td>
            <td style="font-size: 75%;">OJB - O/R tool that allows transparent
            persistence</td>
        </tr>
        <tr>
            <td><a title="Homepage for OpenJMS" href="http://openjms.sourceforge.net/" target="_blank">OpenJMS</a> </td>
            <td style="font-size: 75%;">Open source JMS server</td>
        </tr>
        <tr>
            <td><a title="Homepage for ORO" href="http://jakarta.apache.org/oro/" target="_blank">ORO</a> </td>
            <td style="font-size: 75%;">ORO - Text processing library</td>
        </tr>
        <tr>
            <td><a title="Homepage for OSCache" href="http://www.opensymphony.com/oscache/" target="_blank">OSCache</a> </td>
            <td style="font-size: 75%;">OSCache - A high performance J2EE caching
            framework</td>
        </tr>
        <tr>
            <td><a title="Homepage for PJA" href="http://www.eteks.com/pja/en/" target="_blank">PJA</a> </td>
            <td style="font-size: 75%;">Pure Java AWT - Toolkit for drawing graphics without
            any native graphics resources</td>
        </tr>
        <tr>
            <td><a title="Homepage for PMD" href="http://pmd.sourceforge.net/" target="_blank">PMD</a> </td>
            <td style="font-size: 75%;">PMD - Scans Java source code for potential
            problems</td>
        </tr>
        <tr>
            <td><a title="Homepage for POI" href="http://jakarta.apache.org/poi/" target="_blank">POI</a> </td>
            <td style="font-size: 75%;">POI - Java OLE 2 Manipulator</td>
        </tr>
        <tr>
            <td><a title="Homepage for Pool" href="http://jakarta.apache.org/commons/pool/" target="_blank">Pool</a> </td>
            <td style="font-size: 75%;">Commons Pooling - provides an generic, configurable
            Object-pooling API</td>
        </tr>
        <tr>
            <td><a title="Homepage for Primitives" href="http://jakarta.apache.org/commons/primitives/" target="_blank">Primitives</a> </td>
            <td style="font-size: 75%;">Primitives - Collection of types and utilities
            optimized for working with Java primitives</td>
        </tr>
        <tr>
            <td><a title="Homepage for Proxool" href="http://proxool.sourceforge.net/" target="_blank">Proxool</a> </td>
            <td style="font-size: 75%;">Java connection pool</td>
        </tr>
        <tr>
            <td><a title="Homepage for Quartz" href="http://www.opensymphony.com/quartz" target="_blank">Quartz</a> </td>
            <td style="font-size: 75%;">Quartz - J2EE open source job scheduler</td>
        </tr>
        <tr>
            <td><a title="Homepage for Regexp" href="http://jakarta.apache.org/regexp" target="_blank">Regexp</a> </td>
            <td style="font-size: 75%;">Jakarta Regular Expressions - Java RegEx library
            under BSD style license</td>
        </tr>
        <tr>
            <td><a title="Homepage for Rhino" href="http://www.mozilla.org/rhino" target="_blank">Rhino</a> </td>
            <td style="font-size: 75%;">Mozilla JavaScript - open-source implementation of
            JavaScript written entirely in Java</td>
        </tr>
        <tr>
            <td><a title="Homepage for Seraph" href="http://opensource.atlassian.com/seraph/" target="_blank">Seraph</a> </td>
            <td style="font-size: 75%;">Seraph - Atlassian Security Framework</td>
        </tr>
        <tr>
            <td><a title="Homepage for SiteMesh" href="http://www.opensymphony.com/sitemesh" target="_blank">SiteMesh</a> </td>
            <td style="font-size: 75%;">A web-page layout and decoration framework</td>
        </tr>
        <tr>
            <td><a title="Homepage for Slide" href="http://jakarta.apache.org/slide/" target="_blank">Slide</a> </td>
            <td style="font-size: 75%;">Slide - Content repository, can serve as a basis for
            CMS</td>
        </tr>
        <tr>
            <td><a title="Homepage for SOAP" href="http://ws.apache.org/soap/" target="_blank">SOAP</a> </td>
            <td style="font-size: 75%;">Apache Soap - implementation of the SOAP submission
            to W3C</td>
        </tr>
        <tr>
            <td><a title="Homepage for Speedo" href="http://speedo.objectweb.org/" target="_blank">Speedo</a> </td>
            <td style="font-size: 75%;">OSS JDO implementation<a href="http://andyluo.blogjava.net/"><font color="#ffffff">http://andyluo.blogjava.net</font></a></td>
        </tr>
        <tr>
            <td><a title="Homepage for Spring" href="http://www.springframework.org/" target="_blank">Spring</a> </td>
            <td style="font-size: 75%;">Server Side alternative to J2EE APIs</td>
        </tr>
        <tr>
            <td><a title="Homepage for Struts" href="http://struts.apache.org/" target="_blank">Struts</a> </td>
            <td style="font-size: 75%;">Jakarta Struts - open source framework for building
            web applications</td>
        </tr>
        <tr>
            <td><a title="Homepage for Tapestry" href="http://jakarta.apache.org/tapestry/" target="_blank">Tapestry</a> </td>
            <td style="font-size: 75%;">Tapestry - Web Framework</td>
        </tr>
        <tr>
            <td><a title="Homepage for Turbine" href="http://jakarta.apache.org/turbine/" target="_blank">Turbine</a> </td>
            <td style="font-size: 75%;">Turbine - Servlet based framework allowing developers
            to quickly build secure web applications</td>
        </tr>
        <tr>
            <td><a title="Homepage for UDDI4J" href="http://uddi4j.sourceforge.net/" target="_blank">UDDI4J</a> </td>
            <td style="font-size: 75%;">UDDI4J - Library that provides an API to interact
            with a UDDI registry</td>
        </tr>
        <tr>
            <td><a title="Homepage for Validator" href="http://jakarta.apache.org/commons/validator/" target="_blank">Validator</a>
            </td>
            <td style="font-size: 75%;">Validtator - Validate data from user input</td>
        </tr>
        <tr>
            <td><a title="Homepage for Velocity" href="http://jakarta.apache.org/velocity/" target="_blank">Velocity</a> </td>
            <td style="font-size: 75%;">Velocity - Support for clean, quick MVC web
            development and support for the Struts framework</td>
        </tr>
        <tr>
            <td><a title="Homepage for Village" href="http://share.whichever.com/village" target="_blank">Village</a> </td>
            <td style="font-size: 75%;">Village - API that sits o&#173;n top of the JDBC to make
            it easier to interact with a JDBC</td>
        </tr>
        <tr>
            <td><a title="Homepage for WebWork 2" href="http://www.opensymphony.com/webwork/" target="_blank">WebWork 2</a> </td>
            <td style="font-size: 75%;">Next generation of WebWork</td>
        </tr>
        <tr>
            <td><a title="Homepage for Xalan" href="http://xml.apache.org/xalan-j/" target="_blank">Xalan</a> </td>
            <td style="font-size: 75%;">Xalan - XSLT processor for transforming XML documents
            into HTML, text, or XML</td>
        </tr>
        <tr>
            <td><a title="Homepage for XDoclet" href="http://xdoclet.sourceforge.net/" target="_blank">XDoclet</a> </td>
            <td style="font-size: 75%;">XDoclet - Code generation engine</td>
        </tr>
        <tr>
            <td><a title="Homepage for Xerces" href="http://xml.apache.org/xerces2-j" target="_blank">Xerces</a> </td>
            <td style="font-size: 75%;">Xerces2 - The next generation of high performance,
            XML parsers in the Apache Xerces family</td>
        </tr>
        <tr>
            <td><a title="Homepage for XMLBeans" href="http://xmlbeans.apache.org/" target="_blank">XMLBeans</a> </td>
            <td style="font-size: 75%;">XMLBeans - XML-Java binding tool<a href="http://andyluo.blogjava.net/"><font color="#ffffff">http://andyluo.blogjava.net</font></a></td>
        </tr>
        <tr>
            <td><a title="Homepage for XMLPull" href="http://www.xmlpull.org/" target="_blank">XMLPull</a> </td>
            <td style="font-size: 75%;">XMLPull - Defines a simple pull parsing API that does
            pull XML parsing from J2ME to J2EE</td>
        </tr>
        <tr>
            <td><a title="Homepage for XMLRPC" href="http://ws.apache.org/xmlrpc/" target="_blank">XMLRPC</a> </td>
            <td style="font-size: 75%;">XML-RPC - Implementation of XML-RPC, using XML over
            HTTP to implement remote procedure calls</td>
        </tr>
        <tr>
            <td><a title="Homepage for XNI" href="http://xml.apache.org/xerces2-j" target="_blank">XNI</a> </td>
            <td style="font-size: 75%;">Xerces Native Interface - Framework for streaming a
            document and constructing generic parsers</td>
        </tr>
        <tr>
            <td><a title="Homepage for XOM" href="http://www.cafeconleche.org/XOM/" target="_blank">XOM</a> </td>
            <td style="font-size: 75%;">XML Object Model - Tree-based API for processing XML
            that strives for correctness and simplicity.</td>
        </tr>
        <tr>
            <td><a title="Homepage for XStream" href="http://xstream.codehaus.org/" target="_blank">XStream</a> </td>
            <td style="font-size: 75%;">XML serialization</td>
        </tr>
    </tbody>
</table>
</div>
<img src ="http://www.blogjava.net/lvq810/aggbug/227026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-09-04 17:37 <a href="http://www.blogjava.net/lvq810/articles/227026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts validwhen的使用</title><link>http://www.blogjava.net/lvq810/articles/226972.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Thu, 04 Sep 2008 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/226972.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/226972.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/226972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/226972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/226972.html</trackback:ping><description><![CDATA[<div style="font-size: 10pt;">
<p>validwhen主要用于关联验证，即为了验证某个域的值，可能会参考其它域的值来进行综合判断，以确定该域的值是否符合要求。</p>
<p>1，表达式及其注意事项</p>
<p>输入给validwhen的是一个布尔型表达式（对该表达式的解析使用了antlr），其引用名为test，即形如：</p>
<p>&lt;var&gt;<br />
&nbsp;&nbsp;&lt;var-name&gt;test&lt;/var-name&gt;<br />
&nbsp;&nbsp;&lt;var-value&gt;expression&lt;/var-name&gt;<br />
&lt;/var&gt;</p>
<p>即，当expression为真(true)时，该域验证通过，其中，expression可以使用的元素包括：</p>
<p>1）表单中其它域属性的名称，例如：<br />
&lt;var&gt;<br />
&nbsp;&nbsp;&lt;var-name&gt;test&lt;/var-name&gt;<br />
&nbsp;&nbsp;&lt;var-value&gt;(color=="red")&lt;/var-name&gt;<br />
&lt;/var&gt;
<br />
例子中color为表单中其它某个域的属性名。</p>
<p>2）*this*，用于表示该域的属性名称，即对正在验证的属性自身，其变量的引用为*this*，例如：<br />
&lt;var&gt;<br />
&nbsp;&nbsp;&lt;var-name&gt;test&lt;/var-name&gt;<br />
&nbsp;&nbsp;&lt;var-value&gt;((color=="red")
and (*this* != null))&lt;/var-name&gt;<br />
&lt;/var&gt; </p>
<p>3）可以使用一些常规运算符，如
&gt;、&lt;、==、&gt;=、&lt;=、!=、+、-、*、/、%等等。例如：<br />
&lt;var&gt;<br />
&nbsp;&nbsp;&lt;var-name&gt;test&lt;/var-name&gt;<br />
&nbsp;&nbsp;&lt;var-value&gt;((color=="red")
and (age&gt;=25))&lt;/var-name&gt;<br />
&lt;/var&gt; </p>
<p>4）可以使用逻辑运算 and
、or，例如：<br />
&lt;var&gt;<br />
&nbsp;&nbsp;&lt;var-name&gt;test&lt;/var-name&gt;<br />
&nbsp;&nbsp;&lt;var-value&gt;(((color=="red")
and (age&gt;=25)) or (color!="red"))&lt;/var-name&gt;<br />
&lt;/var&gt;
<br />
在使用and和or时要注意一点，在同一级的逻辑运算中，同时只能存在一个逻辑运算符，要么是and，要么是or，即：<br />
xxx and
yyy<br />
或者<br />
xxx or
yyy<br />
如果在同一级出现多于一个的and或or或and和or的组合，那么是不合法的，例如下面的表达式是不合法的：<br />
xxx and yyy and
zzz<br />
或者<br />
xxx or yyy or zzz<br />
或者<br />
xxx and yyy or
zzz<br />
等等<br />
为了让复杂的表达变得合法，可以让一个复杂的表达式变为多级的表达形式，每一级只有一个and或一个or就可以了，例如：<br />
xxx
and yyy and zzz是错误的，进行一下简单的变换：<br />
(xxx and yyy) and zzz或者xxx and (yyy and
zzz)等都是合法的。</p>
<p>5）其他合法的输入，例如可以使用双引号和单引号引用literal字符串等等。</p>
<p>2，错误消息的定制</p>
<p>无论是validwhen还是其它验证例程，都可以定制验证出错后的错误信息，定制消息有两种方式，即全局方式和本地方式。</p>
<p>1）全局方式，即在validator-rules.xml中某个validator里面定义的消息，参数名为msg，例如：<br />
<!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code="--"><!-- =   Java2Html Converter V3.6 2003 by Markus Gebhard  markus@jave. de="--"><!-- =     Further information: http://www.java2html. de="--"></p>
<div align="left">
<table bgcolor="#ffffff" border="0" cellpadding="3" cellspacing="0">
    <tbody>
        <tr>
            <!-- start source code -->
            <td align="left" nowrap="nowrap" valign="top"><code><br />
            <font color="#000000">&lt;validator&nbsp;name=</font><font color="#2a00ff">"email"</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">classname=</font><font color="#2a00ff">"org.apache.struts.validator.FieldChecks"</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">method=</font><font color="#2a00ff">"validateEmail"</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">methodParams=</font><font color="#2a00ff">"java.lang.Object,</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#2a00ff">org.apache.commons.validator.ValidatorAction,</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#2a00ff">org.apache.commons.validator.Field,</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#2a00ff">org.apache.struts.action.ActionMessages,</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#2a00ff">org.apache.commons.validator.Validator,</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#2a00ff">javax.servlet.http.HttpServletRequest"</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">depends=</font><font color="#2a00ff">""</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">msg=</font><font color="#2a00ff">"errors.email"</font><font color="#000000">/&gt;</font></code>
            </td>
            <!-- end source code -->
        </tr>
    </tbody>
</table>
</div>
<!-- =       END of automatically generated HTML code="--"><!-- ======================================================== -->
<p>其中，msg的值为resource bundle中的一个属性名</p>
。例如在resource
bundle文件中存在如下定义：<br />
errors.email={0} is an invalid e-mail address.
<p>&nbsp;</p>
<p>2）本地方式，即在validation.xml中的field中定义的错误消息，格式为：<br />
&lt;msg key="value"
resource="booleanValue"/&gt;<br />
例如：<br />
<!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code="--"><!-- =   Java2Html Converter V3.6 2003 by Markus Gebhard  markus@jave. de="--"><!-- =     Further information: http://www.java2html. de="--"></p>
<div align="left">
<table bgcolor="#ffffff" border="0" cellpadding="3" cellspacing="0">
    <tbody>
        <tr>
            <!-- start source code -->
            <td align="left" nowrap="nowrap" valign="top"><code><font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;field&nbsp;property=</font><font color="#2a00ff">"endDate"</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">depends=</font><font color="#2a00ff">"validwhen,date"</font><font color="#000000">&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;msg&nbsp;name=</font><font color="#2a00ff">"validwhen"&nbsp;</font><font color="#000000">key=</font><font color="#2a00ff">"date.validwhen"</font><font color="#000000">/&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;arg0&nbsp;key=</font><font color="#2a00ff">"start&nbsp;time"&nbsp;</font><font color="#000000">resource=</font><font color="#2a00ff">"false"</font><font color="#000000">/&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;arg1&nbsp;key=</font><font color="#2a00ff">"end&nbsp;time"&nbsp;</font><font color="#000000">resource=</font><font color="#2a00ff">"false"</font><font color="#000000">/&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var-name&gt;test&lt;/var-name&gt;&nbsp;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var-value&gt;</font><font color="#000000">((</font><font color="#000000">*</font><font color="#7f0055"><strong>this</strong></font><font color="#000000">*&nbsp;!=&nbsp;</font><font color="#7f0055"><strong>null</strong></font><font color="#000000">)&nbsp;</font><font color="#000000">and&nbsp;</font><font color="#000000">(</font><font color="#000000">*</font><font color="#7f0055"><strong>this</strong></font><font color="#000000">*&gt;startDate</font><font color="#000000">))</font><font color="#000000">&lt;/var-value&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;/var&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;/field&gt;</font></code>
            </td>
            <!-- end source code -->
        </tr>
    </tbody>
</table>
</div>
<!-- =       END of automatically generated HTML code="--"><!-- ======================================================== -->
<p>这里需要注意的是<br />
* &lt;msg&gt;的name属性的值应该为某个验证例程的名称，例如name="<font color="#2a00ff" face="Courier New">validwhen</font>"、name="<font color="#2a00ff" face="Courier New">date</font>"等，这指明了当该field的该验证例程（本例是<font color="#2a00ff" face="Courier New">validwhen</font>、<font color="#2a00ff" face="Courier New">date</font>）出错时所显示的错误信息。<br />
*如果全局已经定义了msg的信息，而且本地的msg的key与全局的msg的key相同，那么在该field的验证中，本地的msg将覆盖全局的msg。<br />
*&lt;arg0&gt;到&lt;arg4&gt;的属性中也有name属性，即该arg参数所应用的验证例程，例如&lt;arg0
key="label.startDate"/&gt;，即该参数用于date验证的出错信息。注意，对于一个field，需要的验证规则有时不止一个，例如depends="required,date"，而多个验证规则中的每一个都需要出错时传入一些参数信息，如果它们所需要的参数个数、名称和顺序都相同，那么只要定义&lt;arg0...、&lt;arg1...等等即可。但是如果它们需要的参数的个数、名称和顺序不同怎么办，如果我们对于第一个输入参数只定义一个arg0，那么这个arg0用于哪个验证消息，因此这时必须通过arg标签的name属性来表示该参数所服务的验证。</p>
<p>3，例子</p>
<p>场景：在一个表单中，有两个文本域，用于得到一个时间段，一个文本域输入起始日期（startDate），另一个输入终止日期（endDate）。<br />
约束：日期格式为：年（四位数）-月（两位数）-日（两位数），而且终止日期大于起始日期。</p>
<p>根据上述条件，验证规则如下：<br />
<!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code="--"><!-- =   Java2Html Converter V3.6 2003 by Markus Gebhard  markus@jave. de="--"><!-- =     Further information: http://www.java2html. de="--"></p>
<div align="left">
<table bgcolor="#ffffff" border="0" cellpadding="3" cellspacing="0">
    <tbody>
        <tr>
            <!-- start source code -->
            <td align="left" nowrap="nowrap" valign="top"><code><font color="#000000">&lt;field&nbsp;property="startDate"</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">depends="date"&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;arg0&nbsp;key="form.date.start"/&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var-name&gt;datePatternStrict&lt;/var-name&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var-value&gt;yyyy-MM-dd&lt;/var-value&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;/var&gt;</font><br />
            <font color="#000000">&lt;/field&gt;</font><br />
            <font color="#000000">&lt;field&nbsp;property="endDate"</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">depends="validwhen,date"&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;msg&nbsp;name="validwhen"&nbsp;key="date.validwhen"/&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;arg0&nbsp;name="validwhen"&nbsp;key="form.date.start"/&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;arg1&nbsp;name="validwhen"&nbsp;key="form.date.end"/&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;arg0&nbsp;name="date"&nbsp;key="form.date.end"/&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var-name&gt;test&lt;/var-name&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var-value&gt;</font><font color="#000000">((</font><font color="#000000">*</font><font color="#7f0055"><strong>this</strong></font><font color="#000000">*&nbsp;!=&nbsp;</font><font color="#7f0055"><strong>null</strong></font><font color="#000000">)&nbsp;</font><font color="#000000">and&nbsp;</font><font color="#000000">(</font><font color="#000000">*</font><font color="#7f0055"><strong>this</strong></font><font color="#000000">*&gt;startDate</font><font color="#000000">))</font><font color="#000000">&lt;/var-value&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;/var&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var-name&gt;datePatternStrict&lt;/var-name&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;var-value&gt;yyyy-MM-dd&lt;/var-value&gt;</font><br />
            <font color="#ffffff">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000000">&lt;/var&gt;</font><br />
            <font color="#000000">&lt;/field&gt;&nbsp;</font></code>
            </td>
            <!-- end source code -->
        </tr>
    </tbody>
</table>
</div>
<!-- =       END of automatically generated HTML code="--"><!-- ======================================================== -->
<p>在资源文件中加入如下message：</p>
<p>&nbsp;</p>
form.date.start=起始日期<br />
form.date.end=终止日期<br />
date.validwhen=
{0}不能大于{1}!</div>
<img src ="http://www.blogjava.net/lvq810/aggbug/226972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-09-04 15:25 <a href="http://www.blogjava.net/lvq810/articles/226972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Spring + Hibernate处理CLOB字段的问题[转]</title><link>http://www.blogjava.net/lvq810/articles/226966.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Thu, 04 Sep 2008 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/226966.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/226966.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/226966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/226966.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/226966.html</trackback:ping><description><![CDATA[最近在用<strong><wbr><a href="javascript:;" onclick="javascript:tagshow(event, 'dwr');" target="_self"><u><strong>dwr</strong></u></a></strong>
<div id="xspace-showmessage" class="xspace-itemmessage"><wbr>+<strong><wbr><a href="javascript:;" onclick="javascript:tagshow(event, 'spring');" target="_self"><u><strong>spring</strong></u></a></strong><wbr>+<strong><wbr><a href="javascript:;" onclick="javascript:tagshow(event, 'hibernate');" target="_self"><u><strong>hibernate</strong></u></a></strong><wbr>开发一个小的东东，其间需要对<strong><wbr>ORACLE</strong><wbr>的大数据类型<strong><wbr>CLOB</strong><wbr>字段进行插入操作，发现CLOB字段不像一般数据类型那么处理简单。在查阅了许多资料后，终于找到了解决途经。现把解决过程跟大家分享一下：<span style="display: none;">ITPUB个人空间^0s:tU9pV
M</span><br />
<strong><wbr>1.spring配置：</strong><wbr><br />
<span style="display: none;">QnTq5x`j
C0</span><font style="line-height: 1.3em;" color="#ff0000"><strong><wbr>&lt;bean id="nativeJdbcExtractor"</strong><wbr></font><wbr><br />
<span style="display: none;">3~NY tl&amp;TvZ0</span><font style="line-height: 1.3em;" color="#ff0000"><strong><wbr><font style="line-height: 1.3em;"><font style="line-height: 1.3em;">class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"</font><wbr></font><wbr><span style="display: none;">ITPUB个人空间 Sf4pQF}}</span><br />
<font style="line-height: 1.3em;"><font style="line-height: 1.3em;">&nbsp;&nbsp;lazy-init="true" /&gt;</font><wbr></font><wbr><span style="display: none;">ITPUB个人空间(_T	BM
E�X,xWES	U)B</span><br />
<font style="line-height: 1.3em;"><font style="line-height: 1.3em;">&lt;bean id="lobHandler"</font><wbr></font><wbr><br />
<span style="display: none;">`z`{[Q&amp;LSD1H:Np0</span><font style="line-height: 1.3em;"><font style="line-height: 1.3em;">&nbsp;&nbsp;class="org.springframework.jdbc.support.lob.OracleLobHandler"</font><wbr></font><wbr><span style="display: none;">ITPUB个人空间x/C!zyCl_%Q-P</span><br />
<font style="line-height: 1.3em;"><font style="line-height: 1.3em;">&nbsp;&nbsp;lazy-init="true"&gt;</font><wbr></font><wbr><span style="display: none;">ITPUB个人空间
fshAWJP:Q</span><br />
<font style="line-height: 1.3em;"><font style="line-height: 1.3em;">&nbsp;&nbsp;&lt;property name="nativeJdbcExtractor"&gt;</font><wbr></font><wbr><br />
<span style="display: none;"> L Z_;z4wq�~;y0</span><font style="line-height: 1.3em;"><font style="line-height: 1.3em;">&nbsp;&nbsp; &lt;ref local="nativeJdbcExtractor" /&gt;</font><wbr></font><wbr><span style="display: none;">ITPUB个人空间.Wi_ hcZ.m/F</span><br />
<font style="line-height: 1.3em;"><font style="line-height: 1.3em;">&nbsp;&nbsp;&lt;/property&gt;</font><wbr></font><wbr><span style="display: none;">ITPUB个人空间(QB:?;^Rb</span><br />
<font style="line-height: 1.3em;"><font style="line-height: 1.3em;">&lt;/bean&gt;</font><wbr></font><wbr></strong><wbr><br />
<span style="display: none;">y'O�gK2D8gKX0</span></font><wbr>&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- Hibernate SessionFactory --&gt;<span style="display: none;">ITPUB个人空间#SRf7K(h^
mA</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<span style="display: none;">ITPUB个人空间H^7[I6kvB</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="dataSource" ref="dataSource"/&gt;<br />
<span style="display: none;">-}{Yd	rhp&amp;U0</span><font style="line-height: 1.3em;"><font style="line-height: 1.3em;" color="#ff0000"><strong><wbr>&lt;property name="lobHandler" ref="lobHandler" /&gt;</strong><wbr></font><wbr></font><wbr><span style="display: none;">ITPUB个人空间jn	}DJ%HH</span><br />
&nbsp;&nbsp;&lt;property name="mappingDirectoryLocations"&gt;<br />
<span style="display: none;">7@ ns{4\4M%vy-aIF0</span>&nbsp;&nbsp; &lt;list&gt;<span style="display: none;">ITPUB个人空间yb Z/C*t4r</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;classpath:/com/ffcs/crm/models&lt;/value&gt;<br />
<span style="display: none;">Km(r	X~$BTCF0</span>&nbsp;&nbsp; &lt;/list&gt;<span style="display: none;">ITPUB个人空间i#l8n�@#p`</span><br />
&nbsp;&nbsp;&lt;/property&gt;<br />
<span style="display: none;">$^5Qd_grr$K0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="hibernateProperties"&gt;<br />
<span style="display: none;">&amp;vSp2VAZ$E:Q0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;props&gt;<br />
<span style="display: none;">a+X+@7}NT/^O0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.Oracle9Dialect&lt;/prop&gt;<br />
<span style="display: none;">%g�Tbx-p4rMc,J3t0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.query.substitutions"&gt;true 'Y', false 'N'&lt;/prop&gt;<br />
<span style="display: none;">	j3Nndu0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;<br />
<span style="display: none;">E2b;]h@0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.cglib.use_reflection_optimizer"&gt;false&lt;/prop&gt;<span style="display: none;">ITPUB个人空间h/Ox
~
g,f</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/props&gt;<span style="display: none;">ITPUB个人空间+FT3oj4\</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<span style="display: none;">ITPUB个人空间.FQz.Rz-k</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<span style="display: none;">ITPUB个人空间/SZ%R3m*u g]6r</span><br />
<strong><wbr>2.Hibernate映射文件配置：</strong><wbr><span style="display: none;">ITPUB个人空间/Hn&amp;A
^ ZNY-kX</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;property<br />
<span style="display: none;">+i2|vf+ET)@(Hk0RD8o0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name="content"<br />
<span style="display: none;">7h2s.H}8^;O7T0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type="<font style="line-height: 1.3em;" color="#ff0000"><strong><wbr>org.springframework.orm.hibernate3.support.ClobStringType</strong><wbr></font><wbr>"<br />
<span style="display: none;">PjR?4`N0</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column="CONTENT"<span style="display: none;">ITPUB个人空间T$HwP0NWkX</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length="4000"<span style="display: none;">ITPUB个人空间W�@q8ZI</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&gt;<span style="display: none;">ITPUB个人空间*BpN	c7X$[m</span><br />
<strong><wbr>3.PO的seter/geter:</strong><wbr><br />
<span style="display: none;"> o	q
I^ih{0</span>private String content;<br />
<span style="display: none;">&amp;[g&amp;p|7S0</span>public String getContent() {<br />
<span style="display: none;">WB	F�yM X8g0</span>&nbsp;&nbsp;return content;<br />
<span style="display: none;">lYP"E3\0</span>}<br />
<span style="display: none;">%Mm&amp;w)pl?9P0</span>public void setContent(String content) {<span style="display: none;">ITPUB个人空间X{qqYz+~dr</span><br />
&nbsp;&nbsp;this.content = content;<span style="display: none;">ITPUB个人空间lqj-xl%T$}</span><br />
}<span style="display: none;">ITPUB个人空间5]_'Ult	Py7CnV U^</span><br />
4.在service层我们就可以直接将VO的content直接set进PO就OK，跟一般数据类型一样处理。<br />
<span style="display: none;">vn7DJ^f�c0</span><br />
<span style="display: none;">.`7n!x8O&amp;J+y#g6p!^f1@0</span>OK了！<br />
<span style="display: none;">
f_+hh�Nj#W#y3|#]0</span>是不是很简单？之前一直在寻找hibernate 对CLOB的支持，试过很多方法后都没有成功，后来发现spring竟然对LOB有很好的支持。</div>
<img src ="http://www.blogjava.net/lvq810/aggbug/226966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-09-04 15:10 <a href="http://www.blogjava.net/lvq810/articles/226966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Flex中点击Tree中的一行打开关闭节点[转]</title><link>http://www.blogjava.net/lvq810/articles/226475.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Tue, 02 Sep 2008 11:27:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/226475.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/226475.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/226475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/226475.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/226475.html</trackback:ping><description><![CDATA[<p>在Flex缺省的Tree组件中，如果要打开某个节点的话，点击节点本身是不好用的，只能点击节点前面的那个很小的&#8220;三角符号&#8221;，这种用户体验其实是很糟糕的。不过我们可以通过Tree 中的 itemClick 事件来自己实现这个事情。</p>
<p>假设我们有一个Tree，它的id=&#8221;tree&#8221;，定义一个它的itemClick事件处理函数 itemClickHandler:</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;function&nbsp;tree_itemClick(evt:ListEvent):</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp; var&nbsp;item:Object&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Tree(evt.currentTarget).selectedItem;<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(tree.dataDescriptor.isBranch(item))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tree.expandItem(item,&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">tree.isItemOpen(item),&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
</span><span style="color: #000000;">}</span></div>
<p><br />
代码很简单，就是先获取到当前点击的节点，判定它是否是一个枝节点，然后将它的打开状态更改。</p>
<p>最后在Tree中设置 itemClick=&#8221;itemClickHandler(event)&#8221; 就OK了。</p>
<p>main.mxml（英文链接地址：http://blog.flexexamples.com/2008/04/05/opening-branches-by-clicking-rows-in-a-tree-control-in-flex/）<br />
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;?</span><span style="color: #000000;">xml&nbsp;version</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">1.0</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;encoding</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">utf-8</span><span style="color: #000000;">"</span><span style="color: #000000;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;!--</span><span style="color: #000000;">&nbsp;http:</span><span style="color: #008000;">//</span><span style="color: #008000;">blog.flexexamples.com/2008/04/05/opening-branches-by-clicking-rows-in-a-tree-control-in-flex/&nbsp;--&gt;</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mx:Application&nbsp;xmlns:mx</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.adobe.com/2006/mxml</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layout</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">vertical</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verticalAlign</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">middle</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backgroundColor</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">white</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;viewSourceURL</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">srcview/index.html</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mx:Script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;!</span><span style="color: #000000;">[CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;mx.collections.ICollectionView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;mx.events.ListEvent;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;function&nbsp;tree_itemClick(evt:ListEvent):</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;item:Object&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Tree(evt.currentTarget).selectedItem;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(tree.dataDescriptor.isBranch(item))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.expandItem(item,&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">tree.isItemOpen(item),&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<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;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;function&nbsp;tree_labelFunc(item:XML):String&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;children:ICollectionView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;suffix:String&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(tree.dataDescriptor.isBranch(item))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tree.dataDescriptor.getChildren(item);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;suffix&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;children.length&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;">"</span><span style="color: #000000;">;<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;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;item[tree.labelField]&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;suffix;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">mx:Script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mx:XML&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">dp</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">root</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">folder&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">One</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">folder&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">One.A</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">One.A.1</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">One.A.2</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">One.A.3</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">One.A.4</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">One.A.5</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">folder</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">One.1</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">One.2</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">folder</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">folder&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Two</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Two.1</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">folder&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Two.A</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Two.A.1</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">item&nbsp;label</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Two.A.2</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">folder</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">folder</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">root</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">mx:XML</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">mx:Tree&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">tree</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataProvider</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">{dp}</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showRoot</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">false</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labelField</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">@label</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labelFunction</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">tree_labelFunc</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">300</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowCount</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">6</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemClick</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">tree_itemClick(event);</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">mx:Application</span><span style="color: #000000;">&gt;</span></div>
<img src ="http://www.blogjava.net/lvq810/aggbug/226475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-09-02 19:27 <a href="http://www.blogjava.net/lvq810/articles/226475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring下使用Hibernate Annotation</title><link>http://www.blogjava.net/lvq810/articles/225815.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Sat, 30 Aug 2008 16:47:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/225815.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/225815.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/225815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/225815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/225815.html</trackback:ping><description><![CDATA[<span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">1.在项目的Class Path中加入hibernate和hibernate-annotation需要的包<br />
2.在Spring的applicationContext配置文件中加入创建Hibernate SessionFactory的Factory Bean定义:<br />
&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" &gt;<br />
&lt;property name="configLocation" value="classpath:hibernate.cfg.xml" /&gt;<br />
&lt;/bean&gt;<br />
3.最后按照hibernate-annotation reference中的要求来写实体类(Entity Bean)的注解(annotation)就行了.<br />
需要注意的是@Entity注解对应的类是javax.persistence.Entity,</span><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">而不是org.hibernate.annotation.Entity</span><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">.</span>
<img src ="http://www.blogjava.net/lvq810/aggbug/225815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-08-31 00:47 <a href="http://www.blogjava.net/lvq810/articles/225815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.5 及 Hibernate Annotation 配置文件笔记</title><link>http://www.blogjava.net/lvq810/articles/225813.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Sat, 30 Aug 2008 16:36:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/225813.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/225813.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/225813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/225813.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/225813.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. web.xml 配置Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;&nbsp;&nbsp;1.&nbsp;&lt;context-param&gt;&nbsp;&nbsp;&nbsp;&nbsp;&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/lvq810/articles/225813.html'>阅读全文</a><img src ="http://www.blogjava.net/lvq810/aggbug/225813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-08-31 00:36 <a href="http://www.blogjava.net/lvq810/articles/225813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>當 Spring 2.5 遇上 Hibernate Annotations - 自動搜尋 classpath 內的 entity</title><link>http://www.blogjava.net/lvq810/articles/225805.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Sat, 30 Aug 2008 15:37:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/225805.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/225805.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/225805.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/225805.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/225805.html</trackback:ping><description><![CDATA[<p>最近推出的 <a href="http://proxfacebook.com/index.php?q=aHR0cDovL3N0YXRpYy5zcHJpbmdmcmFtZXdvcmsub3JnL3NwcmluZy9kb2NzLzIuNS54L3JlZmVyZW5jZS9pbmRleC5odG1s">Spring 2.5</a> 提倡使用 annotation 的方式取代 xml 的設定，這個部份幾乎完全取代了 <a href="http://proxfacebook.com/index.php?q=aHR0cDovL3Nhbm5vdGF0aW9ucy5zb3VyY2Vmb3JnZS5uZXQv">Spring Annotations</a> 的功能，看來這個 project 應該已經沒有什麼生存空間。但 <a href="http://proxfacebook.com/index.php?q=aHR0cDovL3Nhbm5vdGF0aW9ucy5zb3VyY2Vmb3JnZS5uZXQvaGliZXJuYXRlLmh0bWw%3D">spring annotations 的 hibernate module</a> 所提供的  AutomaticAnnotationSessionFactoryBean  一直是我很喜歡的功能。以往使用 <a href="http://proxfacebook.com/index.php?q=aHR0cDovL3d3dy5oaWJlcm5hdGUub3JnL2hpYl9kb2NzL2Fubm90YXRpb25zL3JlZmVyZW5jZS9lbi9odG1sLw%3D%3D">Hibernate Annotations</a>
時我們只能以 fully qualified class name 或 fully qualified 的 package name 來指定
entity class。透過 AutomaticAnnotationSessionFactoryBean 我們可以自動找到所有標示為
@javax.persistence.Entity 的 classes 自動加入到 hibernate 的 mapping
classes。Spring 2.5 既然本身就可以自動的搜尋到 @Component 以及相關的 bean class，那我們應該也可以做到
@Entity 的搜尋囉。</p>
<p>我按照 spring annotations 的做法，提供一個自製的 session factory bean：</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.hibernate.HibernateException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.hibernate.cfg.AnnotationConfiguration;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.core.io.Resource;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.core.io.support.PathMatchingResourcePatternResolver;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.core.io.support.ResourcePatternResolver;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.core.type.classreading.CachingMetadataReaderFactory;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.core.type.classreading.MetadataReader;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.core.type.classreading.MetadataReaderFactory;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.core.type.filter.AnnotationTypeFilter;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.core.type.filter.TypeFilter;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.util.ClassUtils;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.persistence.Entity;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.io.IOException;<br />
<br />
</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />
&nbsp;*&nbsp;Created&nbsp;on:&nbsp;2007/11/24<br />
&nbsp;*<br />
&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;Alan&nbsp;She<br />
&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ClasspathScanningAnnotationSessionFactoryBean&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;AnnotationSessionFactoryBean&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;DEFAULT_RESOURCE_PATTERN&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">**/*.class</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;ResourcePatternResolver&nbsp;resourcePatternResolver&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PathMatchingResourcePatternResolver();<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;MetadataReaderFactory&nbsp;metadataReaderFactory&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;CachingMetadataReaderFactory(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.resourcePatternResolver);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;TypeFilter&nbsp;entityFilter&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;AnnotationTypeFilter(Entity.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;resourcePattern&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DEFAULT_RESOURCE_PATTERN;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String[]&nbsp;basePackages;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setBasePackages(String<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;basePackages)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.basePackages&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;basePackages;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">protected</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;postProcessAnnotationConfiguration(AnnotationConfiguration&nbsp;config)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;HibernateException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(String&nbsp;basePackage&nbsp;:&nbsp;basePackages)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;packageSearchPath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassUtils.convertClassNameToResourcePath(basePackage)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.resourcePattern;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Resource[]&nbsp;resources&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.resourcePatternResolver.getResources(packageSearchPath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;resources.length;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Resource&nbsp;resource&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;resources[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MetadataReader&nbsp;metadataReader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.metadataReaderFactory.getMetadataReader(resource);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(isEntity(metadataReader))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;classFileFullPath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;resource.getURL().getPath();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;basePackageResourcePath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ClassUtils.convertClassNameToResourcePath(basePackage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;startIndex&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;classFileFullPath.indexOf(basePackageResourcePath);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;classFilePath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;classFileFullPath.substring(startIndex,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classFileFullPath.length()&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;ClassUtils.CLASS_FILE_SUFFIX.length());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;entityClass&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entityClass&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ClassUtils.forName(ClassUtils.convertResourcePathToClassName(classFilePath));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(ClassNotFoundException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HibernateException(</span><span style="color: #000000;">"</span><span style="color: #000000;">Entity&nbsp;class&nbsp;not&nbsp;found&nbsp;during&nbsp;classpath&nbsp;scanning</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.addAnnotatedClass(entityClass);<br />
&nbsp;&nbsp;&nbsp;&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;}<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;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IOException&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HibernateException(</span><span style="color: #000000;">"</span><span style="color: #000000;">I/O&nbsp;failure&nbsp;during&nbsp;classpath&nbsp;scanning</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;isEntity(MetadataReader&nbsp;metadataReader)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(entityFilter.match(metadataReader,&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.metadataReaderFactory))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<p>這個 class 的內容是以 Spring 2.5 的 ClassPathBeanDefinitionScanner
為骨幹而來的。原理很簡單，以 PathMatchingResourcePatternResolver 去找到所以 basePackage 下的
classes，一一比對是否有 annotate 了 @javax.persistence.Entity，如果有就加入到 session
factory 的 annotationClass。</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="sessionFactory"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="package.ClasspathScanningAnnotationSessionFactoryBean"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="dataSource"</span><span style="color: #ff0000;">&nbsp;ref</span><span style="color: #0000ff;">="dataSource"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="hibernateProperties"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">props</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">prop&nbsp;</span><span style="color: #ff0000;">key</span><span style="color: #0000ff;">="hibernate.dialect"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">${hibernate.dialect}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">prop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">props</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="basePackages"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">list</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">package.model</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">list</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<p>使用上也非常簡單，跟一般 spring 宣告 session factory 一樣，只需指定 basePackage 作為搜尋的範圍即可。</p>
<p>自動搜尋當然有優點也有缺點，但我個人討厭一一去設定 entity。有人可能會覺得萬一如果我有在 classpath 裡的 entity
又不想加入那不就只能全都用手動設定？其實如果想要有些彈性可以加入 include / exclude pattern
等東西，讓設定更活。畢竟設定檔時代已經慢慢過去，在 convention over configuration
的大趨勢之下，想辦法制定規則以及將規則以自動化落實才是長久之計。</p>
<img src ="http://www.blogjava.net/lvq810/aggbug/225805.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-08-30 23:37 <a href="http://www.blogjava.net/lvq810/articles/225805.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate Annotations 几种配置</title><link>http://www.blogjava.net/lvq810/articles/225800.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Sat, 30 Aug 2008 15:21:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/225800.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/225800.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/225800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/225800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/225800.html</trackback:ping><description><![CDATA[1、spring orm support<br />
与原来使用LocalSessionFactoryBean相比，变动不大（AnnotationSessionFactoryBean本来就是从LocalSessionFactoryBean类继承过来的嘛）<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="sessionFactory"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parent</span><span style="color: #0000ff;">="AbstractSessionFactory"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="annotatedClasses"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">list</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">xxx.xxx.xxx.domain.Account</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">list</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="AbstractSessionFactory"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="org.springframework.orm.hibernate3.LocalSessionFactoryBean"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abstract</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="dataSource"</span><span style="color: #ff0000;">&nbsp;ref</span><span style="color: #0000ff;">="DataSource"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="hibernateProperties"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">props</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">prop&nbsp;</span><span style="color: #ff0000;">key</span><span style="color: #0000ff;">="hibernate.dialect"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">${hibernate.dialect}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">prop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">prop&nbsp;</span><span style="color: #ff0000;">key</span><span style="color: #0000ff;">="hibernate.show_sql"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">${hibernate.show_sql}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">prop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">prop&nbsp;</span><span style="color: #ff0000;">key</span><span style="color: #0000ff;">="hibernate.hbm2ddl.auto"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">${hibernate.hbm2ddl.auto}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">prop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">prop&nbsp;</span><span style="color: #ff0000;">key</span><span style="color: #0000ff;">="hibernate.cache.use_query_cache"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">${hibernate.cache.use_query_cache}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">prop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">prop&nbsp;</span><span style="color: #ff0000;">key</span><span style="color: #0000ff;">="hibernate.cache.provider_class"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">${hibernate.cache.provider_class}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">prop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">props</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="lobHandler"</span><span style="color: #ff0000;">&nbsp;ref</span><span style="color: #0000ff;">="DefaultLobHandler"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;<br />
</span></div>
2、id的配置<br />
非常简单，在id的getter上面加个&#8220;@Id&#8221;就可以了。此时采用的id策略是javax.persistence.GenerationType.AUTO，也可以再加上 &#8220;@GeneratedValue(generator =GenerationType.IDENTITY|GenerationType.SEQUENCE|GenerationType.TABLE)&#8221;换成其它策略。<br />
我的应用采用的是hibernate的uuid策略，就不得不在这儿使用hibernate的扩展了<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp; @Id<br />
&nbsp;&nbsp;@Column(length&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">32</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;@GeneratedValue(generator&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">system-uuid</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;@GenericGenerator(name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">system-uuid</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;strategy&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">uuid</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span></div>
3、级联策略<br />
在ejb3-persistence.jar中只定义了 ALL、MERGE、PERSIST、REFRESH、REMOVE，比较恶心的就是，删除对象的时候，并不会级联删除关联对象，而是用update xx set parent_id=null where parent_id=?这类语句把关系干掉了事。不得已，在这儿用了hibernate的DELETE_ORPHAN。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;@OneToMany(targetEntity&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Attachment.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;@Cascade(value&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{org.hibernate.annotations.CascadeType.DELETE_ORPHAN,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.hibernate.annotations.CascadeType.ALL})<br />
&nbsp;&nbsp;@JoinColumn(name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">info_id</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span></div>
4、CACHE<br />
ejb3-persistence.jar里面没有找到cache的配置，继续请出hibernate来干活<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.hibernate.annotations.Cache;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.hibernate.annotations.CacheConcurrencyStrategy;<br />
<br />
@Entity<br />
@Table(name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">T_INFO</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
@Cache(usage&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)</span></div>
5、自定义字段类型<br />
我的POJO中有一个private String content;的属性，按ejb3配成@Lob后，被处理成了text类型，text 64k的存储容量还是比较可怜了。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;@Lob<br />
&nbsp;&nbsp;@Column(columnDefinition&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">LongText</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span></div>
<br />
<img src ="http://www.blogjava.net/lvq810/aggbug/225800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-08-30 23:21 <a href="http://www.blogjava.net/lvq810/articles/225800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用的Struts 2.0标签库[转]</title><link>http://www.blogjava.net/lvq810/articles/225038.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Wed, 27 Aug 2008 06:43:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/225038.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/225038.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/225038.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/225038.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/225038.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 1.x与Struts 2.0的标志库（Tag Library）比较。                                                 &nbsp;            Struts 1.x            Struts 2.0                            分类        ...&nbsp;&nbsp;<a href='http://www.blogjava.net/lvq810/articles/225038.html'>阅读全文</a><img src ="http://www.blogjava.net/lvq810/aggbug/225038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-08-27 14:43 <a href="http://www.blogjava.net/lvq810/articles/225038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 动态数据源 [转]</title><link>http://www.blogjava.net/lvq810/articles/219148.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Thu, 31 Jul 2008 12:13:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/219148.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/219148.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/219148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/219148.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/219148.html</trackback:ping><description><![CDATA[<p>Spring 可以设置动态数据源，这样可以对程序来透明的支持切换操作不同的数据库。</p>
<p><a href="http://oiote.blog.sohu.com/74596942.html">http://oiote.blog.sohu.com/74596942.html</a>
这篇文章写得非常不错。测试通过，并准备在项目中使用这个方法。还有几个问题希望大家给点意见：</p>
<p>首先说一下我的需求：数据库结构都是一样，但具体有多少个数据库不确定（视具体用户而定），用户操作那个数据库要根据登录的时候进行选择，或根据用户的权限而定。这个信息肯定是保存在用户的登录信息中(例如：session）</p>
<p>问题1、当有不同的用户需要操作不同的数据库时（根据登录时的选择或指定），什么时候切换数据库？是在service层还是dao层？这个信息怎么传给层中的方法？如果每个方法都加一个参数这样不太好吧？</p>
<p>问题2、这个频繁的更换数据库，会不会有性能影响？因为sessionFactory是一个切换数据库是不是就是重新初始一次sessionFactory?</p>
<p><br />
</p>
<p>附原文如下：</p>
<p>Spring2.0.1以后的版本已经支持配置多数据源，并且可以在运行的时候动态加载不同的数据源。通过继承
AbstractRoutingDataSource就可以实现多数据源的动态转换。目前做的项目就是需要访问12个数据源，每个数据源的表结构都是相同的，所以要求数据源的变动对于编码人员来说是透明，也就是说同样SQL语句在不同的环境下操作的数据库是不一样的。具体的配置如下：<br />
一、首先需要写一个静态的键值对照类：</p>
<br />
<p>代码</p>
<ol>
    <li><span><span>package</span> <span>cn.com.xinli.ccp.dynamicds;</span></span>
    </li>
    <li><span>public</span> <span>class</span> <span>DataSourceMap {</span>
    </li>
    <li><span>public</span> <span>static</span> <span>final</span> <span>String
    Admin=</span><span>"Admin"</span><span>;</span>
    </li>
    <li><span>public</span> <span>static</span> <span>final</span> <span>String Yxh
    =</span> <span>"Yxh"</span><span>;</span>
    </li>
    <li><span>}</span> </li>
</ol>
<p>这个类主要在使用的时候当作获得数据源的标志使用。<br />
二、建立一个获得和设置上下文的类：<br />
</p>
<p>代码</p>
<ol>
    <li><span><span>package</span> <span>cn.com.xinli.ccp.dynamicds;</span></span>
    </li>
    <li><span>public</span> <span>class</span> <span>CustomerContextHolder {</span>
    </li>
    <li><span>private</span> <span>static</span> <span>final</span>
    <span>ThreadLocal contextHolder =</span>
    </li>
    <li><span>new</span> <span>ThreadLocal();</span>
    </li>
    <li><span>public</span> <span>static</span> <span>void</span>
    <span>setCustomerType(String customerType) {</span>
    </li>
    <li><span>contextHolder.set(customerType);</span>
    </li>
    <li><span>}</span>
    </li>
    <li><span>public</span> <span>static</span> <span>String getCustomerType()
    {</span>
    </li>
    <li><span>return</span> <span>(String) contextHolder.get();</span>
    </li>
    <li><span>}</span>
    </li>
    <li><span>public</span> <span>static</span> <span>void</span>
    <span>clearCustomerType() {</span>
    </li>
    <li><span>contextHolder.remove();</span>
    </li>
    <li><span>}</span>
    </li>
    <li><span>}</span> </li>
</ol>
这个主要负责设置上下文环境和获得上下文环境。<br />
<p>三、建立动态数据源类，这个类必须继承AbstractRoutingDataSource：<br />
</p>
<p>代码</p>
<ol>
    <li><span><span>package</span> <span>cn.com.xinli.ccp.dynamicds;</span></span>
    </li>
    <li><span>import</span>
    <span>org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;</span>
    </li>
    <li><span>public</span> <span>class</span> <span>DynamicDataSource</span>
    <span>extends</span> <span>AbstractRoutingDataSource {</span>
    </li>
    <li><span>protected</span> <span>Object determineCurrentLookupKey() {</span>
    </li>
    <li><span>// TODO Auto-generated method stub</span>
    </li>
    <li><span>return</span> <span>CustomerContextHolder.getCustomerType();</span>
    </li>
    <li><span>}</span>
    </li>
    <li><span>}</span> </li>
</ol>
这个类实现了
determineCurrentLookupKey方法，该方法返回一个Object，一般是返回字符串，也可以是枚举类型。该方法中直接使用了
CustomerContextHolder.getCustomerType()方法获得上下文环境并直接返回。<br />
<p>四、编写spring的配置文件配置数据源<br />
</p>
<p>代码</p>
<ol>
    <li><span><span>&lt;</span><span>bean</span>
    <span>id</span><span>=</span><span>"parentDataSource"</span> </span>
    </li>
    <li><span>class</span><span>=</span><span>"org.springframework.jdbc.datasource.DriverManagerDataSource"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"driverClassName"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>value</span><span>&gt;</span><span>COM.ibm.db2.jdbc.net.DB2Driver</span><span>&lt;/</span><span>value</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>property</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"url"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>value</span><span>&gt;</span><span>jdbc:db2:127.0.0.1:TEST</span><span>&lt;/</span><span>value</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>property</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>bean</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>bean</span>
    <span>id</span><span>=</span><span>"adminDataSource"</span>
    <span>parent</span><span>=</span><span>"parentDataSource"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"username"</span>
    <span>value</span><span>=</span><span>"admin"</span><span>/&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"password"</span>
    <span>value</span><span>=</span><span>"master997mb"</span><span>/&gt;</span>
    </li>
    <li><span>&lt;/</span><span>bean</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>bean</span>
    <span>id</span><span>=</span><span>"yxhDataSource"</span>
    <span>parent</span><span>=</span><span>"parentDataSource"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"username"</span>
    <span>value</span><span>=</span><span>"yxh"</span><span>/&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"password"</span>
    <span>value</span><span>=</span><span>"yxh"</span><span>/&gt;</span>
    </li>
    <li><span>&lt;/</span><span>bean</span><span>&gt;</span> </li>
</ol>
在这个配置中可以看到首先有个parentDataSource，这个主要配置一些数据源的公用信息，项目中都是链接DB2数据库；adminDataSource和yxhDataSource是根据不同需要配置的个性化信息，但都必须加parent属性，值为
parentDataSource。这样就配置好了2个数据源信息。当然如果链接的多数据源是不同类型的两个数据库，那么
parentDataSource就可以不要了，直接配置两个不同的数据源链接就可以了。<br />
<p>五、编写spring配置文件配置多数据源映射关系<br />
</p>
<p>代码</p>
<ol>
    <li><span><span>&lt;</span><span>bean</span>
    <span>id</span><span>=</span><span>"dataSource"</span>
    <span>class</span><span>=</span><span>"cn.com.xinli.ccp.dynamicds.DynamicDataSource"</span><span>&gt;</span>
    </span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"targetDataSources"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>map</span>
    <span>key-type</span><span>=</span><span>"java.lang.String"</span><span>&gt;</span></li>
    <li><span>&lt;!--</span><span> entry元素中的key与</span><span>AbstractRoutingDataSource类的</span><span>determineCurrentLookupKey()方法的返回值匹配</span><span> --&gt;</span></li>
    <li><span>&lt;</span><span>entry</span>
    <span>key</span><span>=</span><span>"Yxh"</span>
    <span>value-ref</span><span>=</span><span>"yxhDataSource"</span><span>/&gt;</span>
    </li>
    <li><span>&lt;/</span><span>map</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>property</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"defaultTargetDataSource"</span>
    <span>ref</span><span>=</span><span>"adminDataSource"</span><span>/&gt;</span>
    </li>
    <li><span>&lt;/</span><span>bean</span><span>&gt;</span> </li>
</ol>
在这个配置中第一个property属性配置目标数据源，&lt;map
key-type="java.lang.String"&gt;中的key-type必须要和静态键值对照类DataSourceMap中的值的类型相同；&lt;entry
key="Yxh" value-ref="yxhDataSource"/&gt;中key的值必须要和静态键值对照类中的值相同，如果有多个值，可以配置多个&lt;
entry&gt;标签。第二个property属性配置默认的数据源。<br />
<p>六、配置hibernate。<br />
Hibernate的配置和普通的hibernate、spring结合的配置一样<br />
</p>
<p>代码</p>
<ol>
    <li><span><span>&lt;</span><span>bean</span>
    <span>id</span><span>=</span><span>"sessionFactory"</span> </span>
    </li>
    <li><span>class</span><span>=</span><span>"org.springframework.orm.hibernate3.LocalSessionFactoryBean"</span><span>&gt;</span>
    </li>
    <li><span>&lt;!-- to override, use the "SpringDatasourceConfig" snippet in your
    project --&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"dataSource"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>ref</span>
    <span>local</span><span>=</span><span>"dataSource"</span> <span>/&gt;</span>
    </li>
    <li><span>&lt;/</span><span>property</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"mappingResources"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>list</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>value</span><span>&gt;</span>
    </li>
    <li><span>cn/com/xinli/ccp/entity/User.hbm.xml</span>
    </li>
    <li><span>&lt;/</span><span>value</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>value</span><span>&gt;</span>
    </li>
    <li><span>cn/com/xinli/ccp/entity/Test.hbm.xml</span>
    </li>
    <li><span>&lt;/</span><span>value</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>list</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>property</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"hibernateProperties"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>props</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.dialect"</span><span>&gt;</span>
    </li>
    <li><span>org.hibernate.dialect.DB2Dialect</span>
    </li>
    <li><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.show_sql"</span><span>&gt;</span><span>true</span><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.use_outer_join"</span><span>&gt;</span><span>true</span><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.jdbc.batch_size"</span><span>&gt;</span><span>50</span><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.jdbc.fetch_size"</span><span>&gt;</span><span>5</span><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.connection.pool_size"</span><span>&gt;</span><span>2</span><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.connection.autocommit"</span><span>&gt;</span><span>false</span><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.cache.use_query_cache"</span><span>&gt;</span><span>false</span><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.max_fetch_depth"</span><span>&gt;</span><span>1</span><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>prop</span>
    <span>key</span><span>=</span><span>"hibernate.bytecode.use_reflection_optimizer"</span><span>&gt;</span><span>true</span><span>&lt;/</span><span>prop</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>props</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>property</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>bean</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>bean</span>
    <span>id</span><span>=</span><span>"mydao"</span>
    <span>class</span><span>=</span><span>"cn.com.xinli.ccp.dao.HibernateBaseDao"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>property</span>
    <span>name</span><span>=</span><span>"sessionFactory"</span><span>&gt;</span>
    </li>
    <li><span>&lt;</span><span>ref</span>
    <span>local</span><span>=</span><span>"sessionFactory"</span> <span>/&gt;</span>
    </li>
    <li><span>&lt;/</span><span>property</span><span>&gt;</span>
    </li>
    <li><span>&lt;/</span><span>bean</span><span>&gt;</span> </li>
</ol>
关于dao的代码这里就省略了。<br />
<p>七、配置结束，可以使用了。<br />
</p>
<p>代码</p>
<ol>
    <li><span><span>public</span> <span>class</span> <span>DaoTest</span>
    <span>extends</span> <span>TestCase {</span></span>
    </li>
    <li><span>public</span> <span>void</span> <span>testSave()</span>
    <span>throws</span> <span>Exception{</span>
    </li>
    <li><span>CustomerContextHolder.setCustomerType(DataSourceMap.Admin);</span><span>//设置数据源</span>
    </li>
    <li><span>//hibernate创建实体</span>
    </li>
    <li><span>Test test =</span> <span>new</span> <span>Test();</span>
    </li>
    <li><span>test.setTest(</span><span>"22222222"</span><span>);</span>
    </li>
    <li><span>mydao.save(test);</span><span>//使用dao保存实体</span>
    </li>
    <li><span>CustomerContextHolder.setCustomerType(DataSourceMap.Yxh);</span><span>//设置为另一个数据源</span>
    </li>
    <li><span>mydao.save(test);</span><span>//使用dao保存实体到另一个库中</span>
    </li>
    <li><span>}</span>
    </li>
    <li><span>}</span> </li>
</ol>
<p>在项目中对于编码人员对多数据源的切换可以做成透明的，操作同样的dao，就可以访问不同的数据库了。</p>
<img src ="http://www.blogjava.net/lvq810/aggbug/219148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-07-31 20:13 <a href="http://www.blogjava.net/lvq810/articles/219148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>StAX</title><link>http://www.blogjava.net/lvq810/articles/215883.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Fri, 18 Jul 2008 11:15:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/215883.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/215883.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/215883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/215883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/215883.html</trackback:ping><description><![CDATA[StAX(Streaming API for XML)是标准的<a href="http://wiki.ccw.com.cn/XML" title="XML">XML</a>处理<a href="http://wiki.ccw.com.cn/API" title="API">API</a>,它能够从应用程序的<a href="http://wiki.ccw.com.cn/Stream" title="Stream">stream</a>对象解析XML数据或把XML数据转换成stream对象。StAX是一个用Java实现的XML拉式解析器。
<img src ="http://www.blogjava.net/lvq810/aggbug/215883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-07-18 19:15 <a href="http://www.blogjava.net/lvq810/articles/215883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate+Spring搞定Clob、Blob的存取[转]</title><link>http://www.blogjava.net/lvq810/articles/205917.html</link><dc:creator>lvq810</dc:creator><author>lvq810</author><pubDate>Wed, 04 Jun 2008 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/lvq810/articles/205917.html</guid><wfw:comment>http://www.blogjava.net/lvq810/comments/205917.html</wfw:comment><comments>http://www.blogjava.net/lvq810/articles/205917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lvq810/comments/commentRss/205917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lvq810/services/trackbacks/205917.html</trackback:ping><description><![CDATA[<span class="tpc_content">摘要：本文通过一个实例讲述如何通过Spring2+Hibernate3来快捷操作数据库中的Lob字段。<br />
环境：Oracle10g、Srping2、Hibernate3、JUint4<br />
<br />
一、创建实体并添加Xdoclet的Hibernate标签<br />
<br />
/**<br />
* @author leizhimin<br />
* @hibernate.mapping default-lazy="false"<br />
* @hibernate.meta attribute="class-description" value="工作日志"<br />
* @hibernate.class table="rc_gzrz"<br />
*/<br />
public class WorkNote {<br />
&nbsp;  private Long id; &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;   //标识<br />
&nbsp;  private Date workDate; &nbsp;  &nbsp;  &nbsp;  &nbsp;  //日期<br />
&nbsp;  private String weather; &nbsp;  &nbsp;  &nbsp;  &nbsp;  //天气<br />
&nbsp;  private String content; &nbsp;  &nbsp;  &nbsp;  &nbsp;  //日志内容(Clob)<br />
&nbsp;  private String state; &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; //日志状态<br />
&nbsp;  private Long orgId; &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;   //机构id<br />
&nbsp;  private Long userId; &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  //用户id<br />
&nbsp;  private Date createDate; &nbsp;  &nbsp;  &nbsp;  &nbsp; //创建日期<br />
&nbsp;  private byte[] image; &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; //图片<br />
<br />
&nbsp;  public static final String WORKNOTE_BLANK = "00"; &nbsp;  &nbsp;  &nbsp; //未填写<br />
&nbsp;  public static final String WORKNOTE_FULL = "11"; &nbsp;  &nbsp;  &nbsp;  //已填写<br />
<br />
&nbsp;  /**<br />
&nbsp;   * @hibernate.id generator-class="sequence" column="BS"<br />
&nbsp;   * @hibernate.meta attribute="field-description" value="标识"<br />
&nbsp;   * @hibernate.generator-param name="sequence" value="SEQ_GW"<br />
&nbsp;   */<br />
&nbsp;  public Long getId() {<br />
&nbsp;  &nbsp;   return id;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setId(Long id) {<br />
&nbsp;  &nbsp;   this.id = id;<br />
&nbsp;  }<br />
<br />
&nbsp;  /**<br />
&nbsp;   * @hibernate.property column="workDate" not-null="false" type="timestamp"<br />
&nbsp;   * @hibernate.meta attribute="field-description" value="工作日期"<br />
&nbsp;   */<br />
<br />
&nbsp;  public Date getWorkDate() {<br />
&nbsp;  &nbsp;   return workDate;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setWorkDate(Date workDate) {<br />
&nbsp;  &nbsp;   this.workDate = workDate;<br />
&nbsp;  }<br />
<br />
&nbsp;  /**<br />
&nbsp;   * @hibernate.property column="weather" not-null="false" length="24"<br />
&nbsp;   * @hibernate.meta attribute="field-description" value="天气"<br />
&nbsp;   */<br />
&nbsp;  public String getWeather() {<br />
&nbsp;  &nbsp;   return weather;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setWeather(String weather) {<br />
&nbsp;  &nbsp;   this.weather = weather;<br />
&nbsp;  }<br />
<br />
&nbsp;  /**<br />
&nbsp;   * @hibernate.property column="content" not-null="false" type="text"<br />
&nbsp;   * @hibernate.meta attribute="field-description" value="内容"<br />
&nbsp;   */<br />
&nbsp;  public String getContent() {<br />
&nbsp;  &nbsp;   return content;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setContent(String content) {<br />
&nbsp;  &nbsp;   this.content = content;<br />
&nbsp;  }<br />
<br />
&nbsp;  /**<br />
&nbsp;   * @hibernate.property column="state" not-null="false" length="2"<br />
&nbsp;   * @hibernate.meta attribute="field-description" value="状态"<br />
&nbsp;   */<br />
&nbsp;  public String getState() {<br />
&nbsp;  &nbsp;   return state;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setState(String state) {<br />
&nbsp;  &nbsp;   this.state = state;<br />
&nbsp;  }<br />
<br />
&nbsp;  /**<br />
&nbsp;   * @hibernate.property column="orgId" type="long"<br />
&nbsp;   * @hibernate.meta attribute="field-description" value="机构id"<br />
&nbsp;   */<br />
&nbsp;  public Long getOrgId() {<br />
&nbsp;  &nbsp;   return orgId;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setOrgId(Long orgId) {<br />
&nbsp;  &nbsp;   this.orgId = orgId;<br />
&nbsp;  }<br />
<br />
&nbsp;  /**<br />
&nbsp;   * @hibernate.property column="userId" type="long"<br />
&nbsp;   * @hibernate.meta attribute="field-description" value="用户id"<br />
&nbsp;   */<br />
&nbsp;  public Long getUserId() {<br />
&nbsp;  &nbsp;   return userId;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setUserId(Long userId) {<br />
&nbsp;  &nbsp;   this.userId = userId;<br />
&nbsp;  }<br />
<br />
&nbsp;  /**<br />
&nbsp;   * @hibernate.property column="createDate" not-null="false" type="timestamp"<br />
&nbsp;   * @hibernate.meta attribute="field-description" value="创建日期"<br />
&nbsp;   */<br />
&nbsp;  public Date getCreateDate() {<br />
&nbsp;  &nbsp;   return createDate;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setCreateDate(Date createDate) {<br />
&nbsp;  &nbsp;   this.createDate = createDate;<br />
&nbsp;  }<br />
<br />
&nbsp;  /**<br />
&nbsp;   * @hibernate.property column="image" type="blob" not-null="false"<br />
&nbsp;   * @hibernate.meta attribute="field-description" value="图片"<br />
&nbsp;   */<br />
&nbsp;  public byte[] getImage() {<br />
&nbsp;  &nbsp;   return image;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setImage(byte[] image) {<br />
&nbsp;  &nbsp;   this.image = image;<br />
&nbsp;  }<br />
}<br />
<br />
二、通过XDoclet生成Mapping，并修正lob映射的类型为Spring提供的类型<br />
<br />
&lt;?xml version="1.0" encoding="gb2312"?&gt;<br />
<br />
&lt;!DOCTYPE hibernate-mapping PUBLIC<br />
&nbsp;  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />
&nbsp;  "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd%22%3E" target="_blank">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</a><br />
<br />
&lt;hibernate-mapping<br />
&nbsp;  &nbsp;   default-lazy="false"<br />
&gt;<br />
&nbsp;  &lt;class<br />
&nbsp;  &nbsp;   name="com.topsoft.oa.routine.domain.office.entity.WorkNote"<br />
&nbsp;  &nbsp;   table="rc_gzrz"<br />
&nbsp;  &gt;<br />
&nbsp;  &nbsp;   &lt;meta attribute="class-description"&gt;工作日志&lt;/meta&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;id<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; name="id"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; column="BS"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; type="java.lang.Long"<br />
&nbsp;  &nbsp;   &gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;meta attribute="field-description"&gt;标识&lt;/meta&gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;generator class="sequence"&gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &lt;param name="sequence"&gt;SEQ_GW&lt;/param&gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp;   &lt;!-- <br />
&nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; To add non XDoclet generator parameters, create a file named<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; hibernate-generator-params-WorkNote.xml<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp; containing the additional parameters and place it in your merge dir.<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp;   --&gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;/generator&gt;<br />
&nbsp;  &nbsp;   &lt;/id&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;property<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; name="workDate"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; type="timestamp"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; update="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; insert="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; column="workDate"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; not-null="false"<br />
&nbsp;  &nbsp;   &gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;meta attribute="field-description"&gt;工作日期&lt;/meta&gt;<br />
&nbsp;  &nbsp;   &lt;/property&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;property<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; name="weather"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; type="java.lang.String"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; update="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; insert="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; column="weather"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; length="24"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; not-null="false"<br />
&nbsp;  &nbsp;   &gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;meta attribute="field-description"&gt;天气&lt;/meta&gt;<br />
&nbsp;  &nbsp;   &lt;/property&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;property<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; name="content"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; type="org.springframework.orm.hibernate3.support.ClobStringType"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; update="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; insert="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; column="content"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; not-null="false"<br />
&nbsp;  &nbsp;   &gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;meta attribute="field-description"&gt;内容&lt;/meta&gt;<br />
&nbsp;  &nbsp;   &lt;/property&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;property<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; name="state"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; type="java.lang.String"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; update="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; insert="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; column="state"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; length="2"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; not-null="false"<br />
&nbsp;  &nbsp;   &gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;meta attribute="field-description"&gt;状态&lt;/meta&gt;<br />
&nbsp;  &nbsp;   &lt;/property&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;property<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; name="orgId"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; type="long"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; update="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; insert="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; column="orgId"<br />
&nbsp;  &nbsp;   &gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;meta attribute="field-description"&gt;机构id&lt;/meta&gt;<br />
&nbsp;  &nbsp;   &lt;/property&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;property<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; name="userId"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; type="long"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; update="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; insert="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; column="userId"<br />
&nbsp;  &nbsp;   &gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;meta attribute="field-description"&gt;用户id&lt;/meta&gt;<br />
&nbsp;  &nbsp;   &lt;/property&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;property<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; name="createDate"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; type="timestamp"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; update="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; insert="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; column="createDate"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; not-null="false"<br />
&nbsp;  &nbsp;   &gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;meta attribute="field-description"&gt;创建日期&lt;/meta&gt;<br />
&nbsp;  &nbsp;   &lt;/property&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;property<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; name="image"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; type="org.springframework.orm.hibernate3.support.BlobByteArrayType"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; update="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; insert="true"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; column="image"<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; not-null="false"<br />
&nbsp;  &nbsp;   &gt;<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; &lt;meta attribute="field-description"&gt;图片&lt;/meta&gt;<br />
&nbsp;  &nbsp;   &lt;/property&gt;<br />
<br />
&nbsp;  &nbsp;   &lt;!--<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; To add non XDoclet property mappings, create a file named<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp;  &nbsp;  hibernate-properties-WorkNote.xml<br />
&nbsp;  &nbsp;  &nbsp;  &nbsp; containing the additional properties and place it in your merge dir.<br />
&nbsp;  &nbsp;   --&gt;<br />
<br />
&nbsp;  &lt;/class&gt;<br />
<br />
&lt;/hibernate-mapping&gt;<br />
<br />
<br />
<br />
三、通过Mapping 用XDoclet生成数据库（Oracle）脚本，并建表<br />
<br />
&nbsp;  drop table rc_gzrz cascade constraints;<br />
<br />
<br />
&nbsp;  create table rc_gzrz (<br />
&nbsp;  &nbsp;   BS number(19,0) not null,<br />
&nbsp;  &nbsp;   workDate timestamp,<br />
&nbsp;  &nbsp;   weather varchar2(24 char),<br />
&nbsp;  &nbsp;   content clob,<br />
&nbsp;  &nbsp;   state varchar2(2 char),<br />
&nbsp;  &nbsp;   orgId number(19,0),<br />
&nbsp;  &nbsp;   userId number(19,0),<br />
&nbsp;  &nbsp;   createDate timestamp,<br />
&nbsp;  &nbsp;   image blob,<br />
&nbsp;  &nbsp;   primary key (BS)<br />
&nbsp;  );<br />
<br />
&nbsp;  comment on table rc_gzrz is<br />
&nbsp;  &nbsp;   '工作日志'<br />
<br />
&nbsp;  comment on column rc_gzrz.BS is<br />
&nbsp;  &nbsp;   '标识'<br />
<br />
&nbsp;  comment on column rc_gzrz.workDate is<br />
&nbsp;  &nbsp;   '工作日期'<br />
<br />
&nbsp;  comment on column rc_gzrz.weather is<br />
&nbsp;  &nbsp;   '天气'<br />
<br />
&nbsp;  comment on column rc_gzrz.content is<br />
&nbsp;  &nbsp;   '内容'<br />
<br />
&nbsp;  comment on column rc_gzrz.state is<br />
&nbsp;  &nbsp;   '状态'<br />
<br />
&nbsp;  comment on column rc_gzrz.orgId is<br />
&nbsp;  &nbsp;   '机构id'<br />
<br />
&nbsp;  comment on column rc_gzrz.userId is<br />
&nbsp;  &nbsp;   '用户id'<br />
<br />
&nbsp;  comment on column rc_gzrz.createDate is<br />
&nbsp;  &nbsp;   '创建日期'<br />
<br />
&nbsp;  comment on column rc_gzrz.image is<br />
&nbsp;  &nbsp;   '图片'<br />
<br />
<br />
<br />
四、创建DAO层<br />
<br />
<br />
/**<br />
* Created by IntelliJ IDEA.<br />
* User: leizhimin<br />
* Date: 2007-11-16<br />
* Time: 10:55:50<br />
* To change this template use File | Settings | File Templates.<br />
*/<br />
public interface WorkNoteDAO extends CommonDAO {<br />
&nbsp;  /**<br />
&nbsp;   * 根据日期查询工作日志<br />
&nbsp;   *<br />
&nbsp;   * @param workDate 工作日期<br />
&nbsp;   * @param userId &nbsp; 用户id<br />
&nbsp;   * @param orgId &nbsp;  机构id<br />
&nbsp;   * @param sp &nbsp;  &nbsp;  分页对象<br />
&nbsp;   * @return List<br />
&nbsp;   */<br />
&nbsp;  public List findWorkNoteByDate(Date workDate, Long userId, Long orgId, SplitPage sp);<br />
<br />
&nbsp;  /**<br />
&nbsp;   * 根据状态查询工作日志<br />
&nbsp;   *<br />
&nbsp;   * @param state &nbsp;   日志状态<br />
&nbsp;   * @param userId &nbsp;  用户id<br />
&nbsp;   * @param orgId &nbsp;   机构id<br />
&nbsp;   * @param sp &nbsp;  &nbsp;   分页对象<br />
&nbsp;   * @return List<br />
&nbsp;   */<br />
&nbsp;  public List findWorkNoteByState(String state, Long userId, Long orgId, SplitPage sp);<br />
}<br />
<br />
<br />
<br />
/**<br />
* Created by IntelliJ IDEA.<br />
* User: leizhimin<br />
* Date: 2007-11-16<br />
* Time: 10:56:00<br />
* To change this template use File | Settings | File Templates.<br />
*/<br />
public class WorkNoteDAOImpl extends CommonDAOImpl implements WorkNoteDAO{<br />
&nbsp;  public List findWorkNoteByDate(Date workDate, Long userId, Long orgId, SplitPage sp) {<br />
&nbsp;  &nbsp;   return null;<br />
&nbsp;  }<br />
<br />
&nbsp;  public List findWorkNoteByState(String state, Long userId, Long orgId, SplitPage sp) {<br />
&nbsp;  &nbsp;   return null; <br />
&nbsp;  }<br />
}<br />
<br />
<br />
五、创建带JTA事务控制的业务service层<br />
<br />
/**<br />
* Created by IntelliJ IDEA.<br />
* User: leizhimin<br />
* Date: 2007-11-16<br />
* Time: 16:43:57<br />
* To change this template use File | Settings | File Templates.<br />
*/<br />
public interface OfficeService {<br />
<br />
&nbsp;  public void saveWorkNote(WorkNote workNote);<br />
<br />
&nbsp;  public void updateWorkNote(WorkNote workNote);<br />
}<br />
<br />
<br />
/**<br />
* Created by IntelliJ IDEA.<br />
* User: leizhimin<br />
* Date: 2007-11-16<br />
* Time: 16:45:54<br />
* To change this template use File | Settings | File Templates.<br />
*/<br />
public class OfficeServiceImpl implements OfficeService{<br />
&nbsp;  private WorkNoteDAO workNoteDAO;<br />
<br />
&nbsp;  public WorkNoteDAO getWorkNoteDAO() {<br />
&nbsp;  &nbsp;   return workNoteDAO;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void setWorkNoteDAO(WorkNoteDAO workNoteDAO) {<br />
&nbsp;  &nbsp;   this.workNoteDAO = workNoteDAO;<br />
&nbsp;  }<br />
<br />
&nbsp;  public void saveWorkNote(WorkNote workNote) {<br />
&nbsp;  &nbsp;   this.workNoteDAO.saveObject(workNote);<br />
&nbsp;  }<br />
<br />
&nbsp;  public void updateWorkNote(WorkNote workNote) {<br />
&nbsp;  &nbsp;   this.workNoteDAO.updateObject(workNote);<br />
&nbsp;  }<br />
}<br />
<br />
<br />
六、书写单元测试，并运行<br />
/**<br />
* Created by IntelliJ IDEA.<br />
* User: leizhimin<br />
* Date: 2007-11-16<br />
* Time: 16:49:17<br />
* To change this template use File | Settings | File Templates.<br />
*/<br />
public class TestOffice extends TestCase {<br />
&nbsp;  public void test_worknote_save(){<br />
&nbsp;  &nbsp;   OfficeService officeService = (OfficeService) ContextHelper.getContext().getBean("officeServiceProxy");<br />
&nbsp;  &nbsp;   WorkNote workNote=new WorkNote();<br />
&nbsp;  &nbsp;   workNote.setContent("<a href="http://lavasoft.blog.51cto.com/%22" target="_blank">http://lavasoft.blog.51cto.com/"</a>);<br />
&nbsp;  &nbsp;   workNote.setOrgId(Long.parseLong("999"));<br />
&nbsp;  &nbsp;   workNote.setCreateDate(new Date());<br />
&nbsp;  &nbsp;   byte[] b="lavasoft".getBytes();<br />
&nbsp;  &nbsp;   workNote.setImage(b);<br />
&nbsp;  &nbsp;   officeService.saveWorkNote(workNote);<br />
&nbsp;  }<br />
}<br />
<br />
</span>看看测试结果：<br />
<br />
<img alt="" src="../../images/blogjava_net/lvq810/rh26_1.png" height="221" width="660" /><br />
<br />
<img alt="" src="../../images/blogjava_net/lvq810/rh26_2.png" height="350" width="742" />
<img src ="http://www.blogjava.net/lvq810/aggbug/205917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lvq810/" target="_blank">lvq810</a> 2008-06-04 20:43 <a href="http://www.blogjava.net/lvq810/articles/205917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>