请问谁知道如何从java bean声称castor的mapping文件? xdoclet和myeclipse好像都可以,请给个详细答案,使用什么工具,应该怎么操作。比如说这个bean:
public class UserInfo implements Serializable{ /**
*
*/
private static final long serialVersionUID = 601351124780208554L; private long pkId; private Date lastUpdated;
private String name;
private String value; private User parentUser; public long getPkId() {
return pkId;
} public void setPkId(long pkId) {
this.pkId = pkId;
} public Date getLastUpdated() {
return lastUpdated;
} public void setLastUpdated(Date lastUpdated) {
this.lastUpdated = lastUpdated;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
} public User getParentUser() {
return parentUser;
} public void setParentUser(User parentUser) {
this.parentUser = parentUser;
}
}
public class UserInfo implements Serializable{ /**
*
*/
private static final long serialVersionUID = 601351124780208554L; private long pkId; private Date lastUpdated;
private String name;
private String value; private User parentUser; public long getPkId() {
return pkId;
} public void setPkId(long pkId) {
this.pkId = pkId;
} public Date getLastUpdated() {
return lastUpdated;
} public void setLastUpdated(Date lastUpdated) {
this.lastUpdated = lastUpdated;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
} public User getParentUser() {
return parentUser;
} public void setParentUser(User parentUser) {
this.parentUser = parentUser;
}
}
解决方案 »
- extjs导出excel时,怎样让一个excel中含有多个sheet?
- 一个小小的疑问-关于HQL
- 最近想深入学习spring,不知道哪本书好....
- 在线急求 关于用 hibernate 多表取 并集的问题??祝大家情人节快乐,有情人终成眷属!
- J2EE大量教程+组件+源码+AJAX范例下载,需要的朋友,赶快进来抢
- 关于javac编译和java执行的小问题
- 如果你懂ofbiz这200分就是你的了
- EJB部署在远程服务器以后怎么调用?
- 疯狂菜鸟散分!!! --J2ee 路径设置问题
- 急求助啊,StringBuilder拼接html字符串怎么拼单引号
- Spring 事务问题?来者撒分
- 调试的时候报错,请大家指教
File file = new File("D:/test.xml");
Writer writer = new FileWriter(file);
Marshaller marshaller = new Marshaller(writer);
marshaller.setMapping(map); //设置按map配置进行映射
//注意这里使用的是marshaller对象的方法,而不是类的静态方法
marshaller.marshal(person); //搞定!
要让 Castor 使用这种格式而不用缺省的格式,首先需要定义一个描述这种格式的映射。映射描述本身就是(非常惊讶吧)一个 XML 文档。清单 3 显示了把 bean 组织为以前显示的格式的映射。清单 3. 用来压缩格式的映射
<!DOCTYPE databases PUBLIC
"-//EXOLAB/Castor Mapping DTD Version 1.0//EN "
"http://castor.exolab.org/mapping.dtd ">
<mapping>
<description>Basic mapping example</description>映射引用
您将需要使用映射文档的其它一些功能来支持您正在组织和解组的对象间的引用。清单 7 显示了完整的映射:清单 7. 整个时间表的映射
<!DOCTYPE databases PUBLIC
"-//EXOLAB/Castor Mapping DTD Version 1.0//EN "
"http://castor.exolab.org/mapping.dtd ">
<mapping>
<description>Reference mapping example</description>
<class name= "TimeTableBean ">
<map-to xml= "timetable "/>
<field name= "carriers " type= "CarrierBean " collection= "collection ">
<bind-xml name= "carrier "/>
MegaEntry 网络社区与信息交流平台!</field>
<field name= "airports " type= "AirportBean " collection= "collection ">
<bind-xml name= "airport "/>
</field>
<field name= "routes " type= "RouteBean " collection= "collection ">
<bind-xml name= "route "/>
</field>
</class>
<class name= "CarrierBean " identity= "ident " auto-complete= "true ">
<field name= "ident ">
<bind-xml name= "ident " node= "attribute "/>
</field>
</class>
<class name= "AirportBean " identity= "ident " auto-complete= "true ">
<field name= "ident ">
<bind-xml name= "ident " node= "attribute "/>
文章版权归原作者所有! (www.hehe.com)</field>
</class>
<class name= "RouteBean ">
<field name= "from " type= "AirportBean ">
<bind-xml name= "from " node= "attribute " reference= "true "/>
</field>
<field name= "to " type= "AirportBean ">
<bind-xml name= "to " node= "attribute " reference= "true "/>
</field>
<field name= "flights " type= "FlightBean " collection= "collection ">
<bind-xml name= "flight "/>
</field>
</class>
<class name= "FlightBean " auto-complete= "true ">
<field name= "carrier ">
<bind-xml name= "carrier " node= "attribute " reference= "true "/>
MegaEntry 网络社区与信息交流平台!</field>
<field name= "departureTime ">
<bind-xml name= "depart " node= "attribute "/>
</field>
<field name= "arrivalTime ">
<bind-xml name= "arrive " node= "attribute "/>
</field>
</class>
</mapping>
除被添加的 bean 之外,这里重要的改变是添加了 identity 和 reference 属性。class 元素的 identity 属性告诉 Castor 已命名的属性是该类的一个实例的唯一标识符。这里,我让 CarrierBean 和 AirportBean 都把它们的 ident 属性定义为标识符。bind-xml 元素的 reference 属性提供 Castor 进行映射所需的链接信息的另一部分。reference 设置为 true 的映射告诉 Castor 为引用的对象组织标识符,而不要对象自身的副本。我已经为路线两端从 RouteBean 到链接的 AirportBean 的引用,以及从 FlightBean 到链接的 CarrierBean 的引用使用了这种技术。当 Castor 使用这种类型的映射解组数据时,它自动把对象标识符转换为对实际对象的引用。您需要确保标识符的值是真正唯一的,即便是不同类型对象的标识符也不能重复。对于这个示例中的数据,这不是问题:运输商标识符是两个字符,机场标识符是三个字符,所以它们永远也不会相同。当确实有可能冲突的情况发生时,您可以轻易地避开这个问题,只要为每个标识符添加前缀,这个前缀是代表标识符所表示的对象类型的唯一代码。