XDoclet实现基本原理是,通过在Java代码加入特定的JavaDoc tag,从而为其添加特定的附加语义,之后通过XDoclet工具对代码中JavaDoc Tag进行分析,自动生成与代码对应的配置文件,在Ejb、hibernate、struts中使用得比较广泛了,ibatis比较草根,没有这个棉袄穿,怎么办呢,大过年的,为了让ibatis也有新衣服穿,我只好弄一个了。如果你不了解xDoclet,推荐阅读一下此文: http://www-900.ibm.com/developerWorks/cn/java/j-xdoclet/index.shtml?ca=dwcn-newsletter-java 我的思路是力求简单,原先想写一个xdt模板文件,订制一些标签在POJO中使用,我偷个赖,看见hibernate的衣服出自名设计师,很是羡慕,我来个仿版(所谓的A货),借用它的标签,另一个重要原因是,很多IDE已经支持hibernate标签的编辑工作了。 我只借用4个标签,其中2和4要作少量扩展(后面实例说明): 1 @hibernate.class
2 @hibernate.discriminator 3 @hibernate.property - 简单属性,对应数据表字段 4 @hibernate.component - 复杂属性,ibatis中对应另一个select子句 现在请出例子猫豆MM,User.java: package org.chage.pojo;
import java.util.List; /** * @hibernate.class table="D_USER" * @hibernate.discriminator column="USERID" property="id type="long" */ public class User { private Long id; private String username; private List roles; /*** * @hibernate.property column="USER_ID" */ public Long getId() { return id; } /*** * @hibernate.property column="USER_NAME" */ public Long getUsername() { return username; } /*** * @hibernate.component column="USER_ID" select="selectRoles" */ public List getRoles(){ return roles; } //以下省略了setter方法 ...... }
下面是build.xml中相关部分: <target name="init"> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <sqlMap namespace="<XDtClass:className/>"> <typeAlias alias="<XDtClass:className/>" type="<XDtClass:fullClassName/>"/> <resultMap id="<XDtClass:className/>Result" class="<XDtClass:className/>"> <select id="get<XDtClass:className/>" resultMap="<XDtClass:className/>Result" parameterClass="<XDtClass:classTagValue tagName=‘hibernate.discriminator‘ paramName=‘type‘/>"> |
|
来自: smoking_boy > 《我的图书馆》