`
sunqitang
  • 浏览: 77008 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Xdoclet 介绍

    博客分类:
  • SSH
阅读更多

Xdoclet 基本概念

我们可以在 java 代码中使用类似于 javadoc 的注释,来表达更多的内容。这些额外的注释,通过使用 xdoclet 工具,我们可以将它们转换为我们需要的各种配置文件。先看一个简单的例子:

比如有一个 java 文件的源代码如下:

   productType跟自己是一对多的关系:这种情况比较特殊,set和many-to-one对应的均为外键

package com.babasport.VO;

import java.util.Set;


/**
 * @hibernate.class 
 * table="productType"
 * @author sunqitang
 *
 */
public class ProductType {
	/**  商品类别Id  **/
	private Integer productTypeId;
	/**  商品类别名称  **/
	private String productTypeName;
	/**  商品类别google搜索内容  **/
	private String productTypeGoogle;
	/**  商品类别备注  **/
	private String productTypeNote;
	/**  商品类别的子类别  **/
	private Set<ProductType> subProductTypes;
	/**  商品类别的父类   **/
	private ProductType parentProductType;
	/**
	 * @hibernate.many-to-one 
	 * column="parentProductType" 
	 * class="com.babasport.VO.ProductType"
	 * @return
	 */
//这里也为目标对象的Id
	public ProductType getParentProductType() {
		return parentProductType;
	}
	public void setParentProductType(ProductType parentProductType) {
		this.parentProductType = parentProductType;
	}
	/**
	 * @hibernate.set 
	 * cascade="all" 
	 * inverse="true" 
	 * lazy="true"
	 * @hibernate.key column="parentProductType"
	 * @hibernate.one-to-many class="com.babasport.VO.ProductType"
	 * @return
	 */
//这里的key的column为目标对象的Id
	public Set<ProductType> getSubProductTypes() {
		return subProductTypes;
	}
	public void setSubProductTypes(Set<ProductType> subProductTypes) {
		this.subProductTypes = subProductTypes;
	}
	/**
	 * @hibernate.id 
	 * generator-class="native" 
	 * @return
	 */
	public Integer getProductTypeId() {
		return productTypeId;
	}
	public void setProductTypeId(Integer productTypeId) {
		this.productTypeId = productTypeId;
	}
	/**
	 * @hibernate.property 
	 * not-null="true" 
	 * length="16" 
	 * @return
	 */
	public String getProductTypeName() {
		return productTypeName;
	}
	public void setProductTypeName(String productTypeName) {
		this.productTypeName = productTypeName;
	}
	/**
	 * @hibernate.property 
	 * length="100"
	 * @return
	 */
	public String getProductTypeGoogle() {
		return productTypeGoogle;
	}
	public void setProductTypeGoogle(String productTypeGoogle) {
		this.productTypeGoogle = productTypeGoogle;
	}
	/**
	 * @hibernate.property 
	 * length="100"
	 * @return
	 */
	public String getProductTypeNote() {
		return productTypeNote;
	}
	public void setProductTypeNote(String productTypeNote) {
		this.productTypeNote = productTypeNote;
	}
	
	
}
 

 

通过 xdoclet ,我们可以得到关于这个类的 Hibernate 映射文件,如下:

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="VO.Producttype" table="producttype" catalog="test">
        <id name="id" type="java.lang.String">
            <column name="id" length="10" />
            <generator class="native" />
        </id>
        <many-to-one name="producttype" class="VO.Producttype" fetch="select">
            <column name="sub" length="10" />
        </many-to-one>
        <set name="producttypes" inverse="true">
            <key>
                <column name="sub" length="10" />
            </key>
            <one-to-many class="VO.Producttype" />
        </set>
    </class>
</hibernate-mapping>
 

另个例子:Type和user是一对多的关系:set对应的 key为userId,many-to-one对应的为typeID

type.java

package VO;

import java.util.Set;

/**
 * @hibernate.class table="Type"
 * @author sunqitang
 *
 */
public class Type {
	private Integer typeId;
	private Integer typeName;
	private Set<User> users;
	/**
	 * @hibernate.id generator-class="native"
	 * @return
	 */
	public Integer getTypeId() {
		return typeId;
	}
	public void setTypeId(Integer typeId) {
		this.typeId = typeId;
	}
	/**
	 * @hibernate.property 
	 * @return
	 */
	public Integer getTypeName() {
		return typeName;
	}
	public void setTypeName(Integer typeName) {
		this.typeName = typeName;
	}
	/**
	 * @hibernate.set 
	 * cascade="all"
	 * inverse="true"
	 * @hibernate.key column="userId"
	 * @hibernate.one-to-many class="VO.User" 
	 * @return
	 */
	public Set<User> getUsers() {
		return users;
	}
	public void setUsers(Set<User> users) {
		this.users = users;
	}
}

 user.java

package VO;
/**
 * @hibernate.class table="User"
 * @author sunqitang
 *
 */
public class User {
	private Integer userId;
	private String  userName;
	private Type type;
	/**
	 * @hibernate.id
	 * generator-class="native"
	 * @return
	 */
	public Integer getUserId() {
		return userId;
	}
	public void setUserId(Integer userId) {
		this.userId = userId;
	}
	/**
	 * @hibernate.property 
	 * @return
	 */
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	/**
	 * @hibernate.many-to-one column="typeId" class="VO.Type"
	 * @return
	 */
	public Type getType() {
		return type;
	}
	public void setType(Type type) {
		this.type = type;
	}
}

 生成的hbm为:

type.hbm.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="Type" name="VO.Type">
    <id name="typeId">
      <generator class="native"/>
    </id>
    <property name="typeName"/>
    <set inverse="true" cascade="all" name="users">
      <key column="userId"/>
      <one-to-many class="VO.User"/>
    </set>
  </class>
</hibernate-mapping>

 user.hbm.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class table="User" name="VO.User">
    <id name="userId">
      <generator class="native"/>
    </id>
    <property name="userName"/>
    <many-to-one column="typeId" name="type" class="VO.Type"/>
  </class>
</hibernate-mapping>
 

 

使用xdoclet来生成hbm文件。

 
<?xml version="1.0" encoding="UTF-8"?>
<project name="OA系统构建脚本" default="生成hibernate映射文件" basedir=".">

   	<property name="src.dir" value="${basedir}/src"/>
   	<property name="build.dir" value="${basedir}/bin"/>
	<property name="webapp.dir" value="${basedir}/src/webapp"/>
	<property name="xdoclet.home" value="D:\\JAVA电子资源\\组件\\Xdoclet\\xdoclet-plugins-1.0.3\\xdoclet-plugins-1.0.3"/>

   	<!-- Build classpath -->
   	<path id="xdoclet.task.classpath">
      	<fileset dir="${xdoclet.home}/lib">
         	<include name="**/*.jar"/>
      	</fileset>
      	<fileset dir="${xdoclet.home}/plugins">
         	<include name="**/*.jar"/>
      	</fileset>
   	</path>
	<taskdef 
		name="xdoclet"
		classname="org.xdoclet.ant.XDocletTask"
		classpathref="xdoclet.task.classpath"
	/>
	
	<target name="生成hibernate映射文件">
		<xdoclet>
			<fileset dir="${src.dir}/com/babasport/VO">
				<include name="**/*.java"/>
			</fileset>
			<component 
				classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin"
				version="3.0"
				destdir="${src.dir}"
			/>
		</xdoclet>
	</target>
</project>
分享到:
评论

相关推荐

    Xdoclet介绍及示例.........

    下面通过一个具体的例子来详细介绍Xdoclet标签的使用方法: ```java /** @hibernate.class table="T_Party" */ public class Party { /** @hibernate.id generator-class="native" */ private int id; /** @...

    Xdoclet介绍

    Xdoclet是一个开源工具,它允许开发者在Java源代码中使用特定的Javadoc注释来生成各种元数据,如配置文件、部署描述符等。这个工具对于自动化开发过程中的任务非常有用,特别是在Java持久化框架如Hibernate中,可以...

    Hibernate 的Xdoclet模板

    1. **Xdoclet介绍**:首先,文章可能会解释Xdoclet的基本原理,它是如何通过解析Java源代码中的Javadoc注释来生成相应的配置文件的。Xdoclet的工作流程,包括读取源码、解析注释、生成模板和最后的代码生成。 2. **...

    在eclipse中加入XDoclet templates方便书写hibernate元数据

    1. **XDoclet介绍**:XDoclet是一个基于Javadoc的代码生成工具,通过解析Java源代码中的特定注释,能够生成各种框架所需的配置文件或源代码,如Hibernate的hbm.xml文件和EJB的ejb-jar.xml文件。 2. **Eclipse集成**...

    xdoclet 生成hbm文件

    本文将详细介绍如何在MyEclipse环境中利用XDoclet生成HBM文件。 首先,确保你的开发环境是Eclipse 3.0.1和MyEclipse 3.8.3。这两个工具集成了对XDoclet的支持,使得生成HBM文件变得简单易行。根据Hibernate ...

    xdoclet in action 中文版

    第12章“自定义代码生成与XDoclet”主要介绍了如何利用XDoclet的模板、标签和任务来编写自己的代码生成逻辑。书中详细阐述了以下内容: 1. **编写模板**:XDoclet使用模板语言来生成Java代码。开发者可以根据需求...

    XDoclet入门教程

    ### XDoclet入门教程 #### 一、XDoclet简介 ...通过上述介绍,读者应该对XDoclet有了基本的认识,并了解了如何使用XDoclet来生成配置文件。在实际开发中,可以根据项目需求灵活地使用XDoclet来提高工作效率。

    xdoclet-plugins-1.0.3下载附doc

    本文将详细介绍XDoclet Plugins 1.0.3版本及其相关知识点。 首先,XDoclet Plugins是XDoclet的核心组件之一,它包含了一系列用于扩展XDoclet功能的插件。在Xdoclet-plugins-1.0.3这个版本中,开发者可以找到用于...

    Xdocle与Ant结合使用指南

    此外,压缩包中的"Xdoclet介绍.doc"和"Ant介绍.doc"提供了更详细的资料,包括这两个工具的基本概念、用法、配置示例以及常见问题解答。通过深入阅读这些文档,你将能更全面地理解Xdocle和Ant的特性,从而更好地将...

    xdoclet-1.2.1 ZIP包中包含了使用方法,供大家方便配置

    1. **使用详情.doc**:这是一个文档,详细介绍了如何在Eclipse项目中配置和使用XDoclet-1.2.1。通过阅读这个文档,开发者可以了解到安装步骤、配置过程以及如何在实际项目中应用XDoclet的各种功能。对于初学者来说,...

    精通XDoclet.doc

    #### 七、XDT模板语言介绍 **XDT模板语言**是XDoclet提供的用于生成文件的模板语言。它类似于JSP,但专为XDoclet设计。XDT模板可以访问由XDoclet解析器提取出来的Java源代码的元数据,并根据这些元数据生成最终的...

    用maven的xdoclet插件t生成hibernate配置文件

    本文旨在详细介绍如何使用Xdoclet插件配合Maven来生成Hibernate所需的配置文件。 #### 环境搭建 在开始之前,我们需要确保以下环境已经准备就绪: - **操作系统**:Windows Server 2003 Standard Edition - **Java...

    XDoclet In Action.pdf

    其次,书中详细介绍了如何集成XDoclet到开发环境中,包括使用Maven、Ant等构建工具配置XDoclet插件。对于Maven用户,可以在pom.xml文件中添加XDoclet的依赖和插件配置,而对于Ant用户,则需要在build.xml文件中编写...

    Hibernate使用xdoclet生成映射文件和sql语句

    这篇博客文章“Hibernate使用xdoclet生成映射文件和sql语句”可能详细介绍了如何结合这两个工具进行开发。 在早期的Java开发中,XDoclet是基于Javadoc注解的工具,它可以解析Java类中的特定注解,并根据这些注解...

    xdoclet-plugins-dist-1.0.4

    本文将详细介绍XDoclet Plugins Dist 1.0.4这一版本的特性、用途以及其包含的内容。 1. XDoclet概述: XDoclet最初由Hani Suleiman开发,于2000年发布,其核心功能在于通过解析Java源代码中的Javadoc注释,生成...

    xdoclet-plugins-1.0.3doc文档

    - 用户手册:详细介绍了如何使用XDoclet,包括安装步骤、基本用法和高级特性。 - API参考:列出了所有可用的注解和插件,以及它们的参数和行为说明。 - 示例代码:提供了实际的Java源代码示例,展示如何在项目中...

    xdoclet_appfuse打包

    2. "appfuse.doc":这是一个关于AppFuse的文档,可能详细介绍了AppFuse的架构、使用方法以及常见问题解答。 3. "XDoclet Tags.doc":这可能是关于XDoclet的标签文档,解释了如何使用XDoclet的注解来生成不同类型的...

    为xdoclet添加hibernate智能提示

    本文将详细介绍如何为XDoclet添加Hibernate智能提示,以便在开发过程中提供更高效的支持。 首先,我们需要理解XDoclet的工作原理。XDoclet通过解析源代码中的Javadoc注释来生成额外的代码或配置文件。当我们在Java...

Global site tag (gtag.js) - Google Analytics