XDoclet實(shí)現基本原理是,通過(guò)在Java代碼加入特定的JavaDoc tag,從而為其添加特定的附加語(yǔ)義,之后通過(guò)XDoclet工具對代碼中JavaDoc Tag進(jìn)行分析,自動(dòng)生成與代碼對應的配置文件,在Ejb、hibernate、struts中使用得比較廣泛了,ibatis比較草根,沒(méi)有這個(gè)棉襖穿,怎么辦呢,大過(guò)年的,為了讓ibatis也有新衣服穿,我只好弄一個(gè)了。如果你不了解xDoclet,推薦閱讀一下此文:
http://www-900.ibm.com/developerWorks/cn/java/j-xdoclet/index.shtml?ca=dwcn-newsletter-java 我的思路是力求簡(jiǎn)單,原先想寫(xiě)一個(gè)xdt模板文件,訂制一些標簽在POJO中使用,我偷個(gè)賴(lài),看見(jiàn)hibernate的衣服出自名設計師,很是羨慕,我來(lái)個(gè)仿版(所謂的A貨),借用它的標簽,另一個(gè)重要原因是,很多IDE已經(jīng)支持hibernate標簽的編輯工作了。
我只借用4個(gè)標簽,其中2和4要作少量擴展(后面實(shí)例說(shuō)明):
1 @hibernate.class
2 @hibernate.discriminator
3 @hibernate.property - 簡(jiǎn)單屬性,對應數據表字段
4 @hibernate.component - 復雜屬性,ibatis中對應另一個(gè)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方法
......
}
藍色標記的兩處為新增標簽,從字面意思大家就可以理解了吧,前面的那個(gè)是為了指明主鍵字段及對應屬性的,(上帝保佑,你采取唯一主鍵最好業(yè)務(wù)無(wú)關(guān))
后一個(gè)是為了標明update時(shí)需要參與更新的字段。
下面是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>
最后,給出這個(gè)xdt模板:
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。