XDoclet實現(xiàn)基本原理是,通過在Java代碼加入特定的JavaDoc tag,從而為其添加特定的附加語義,之后通過XDoclet工具對代碼中JavaDoc Tag進行分析,自動生成與代碼對應(yīng)的配置文件,在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的衣服出自名設(shè)計師,很是羨慕,我來個仿版(所謂的A貨),借用它的標簽,另一個重要原因是,很多IDE已經(jīng)支持hibernate標簽的編輯工作了。
我只借用4個標簽,其中2和4要作少量擴展(后面實例說明):
1 @hibernate.class
2 @hibernate.discriminator
3 @hibernate.property - 簡單屬性,對應(yīng)數(shù)據(jù)表字段
4 @hibernate.component - 復(fù)雜屬性,ibatis中對應(yīng)另一個select子句
現(xiàn)在請出例子貓豆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方法
......
}
藍色標記的兩處為新增標簽,從字面意思大家就可以理解了吧,前面的那個是為了指明主鍵字段及對應(yīng)屬性的,(上帝保佑,你采取唯一主鍵最好業(yè)務(wù)無關(guān))
后一個是為了標明update時需要參與更新的字段。
下面是build.xml中相關(guān)部分:
<target name="init">
<path id="xdoclet.path">
<fileset dir="${xdocletlib}">
<include name="*.jar" />
</fileset>
</path>
<taskdef classname="xdoclet.DocletTask" classpathref="xdoclet.path" name="doclet" />
</target>
<target name="sqlmap" depends="init">
<doclet destdir="${sqlmap.dir}" excludedtags="@version,@author,@todo" force="true" verbose="true">
<fileset dir="${src.dir}">
<include name="**/${pojo.java}.java" />
</fileset>
<template destinationFile="{0}.xml" templateFile="${template.dir}/gensqlmap.xdt" subTaskName="Generate SqlMap xml...">
</template>
</doclet>
</target>
最后,給出這個xdt模板:
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。