如何用XDoclet生成hbm.xml文件

 在数据库建立后,可以用Middlegen生成每个表对应的hbm.xml文件,并用hibernate-extensions生成对应的Java类。在后期开发时,如果要修改表,修改完后再走一遍这样的流程,那就显得有些繁琐。用XDoclet可以直接根据修改后的Java类生成对应的hbm.xml文件,这样可以减少维护的工作量。下面是我的一个简单例子。
      我使用的数据库是MySQL 4.1.11,在数据库test中有这样一个用户表:

1 CREATE TABLE IF NOT EXISTS User
2 (
3    Guid                           INT                            NOT NULL AUTO_INCREMENT,
4    Account                        VARCHAR(64)                    NOT NULL,
5    Password                       VARCHAR(16)                    NOT NULL,
6    Email                          VARCHAR(128)                   NOT NULL,
7    PRIMARY KEY (Guid)
8 ) TYPE=InnoDB;

      根据该表写了一个User类,并且加上了XDoclet的tag。XDoclet有关hibernate的tag可以参考: http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html

  1 package sample.hibernate;
  2
  3 import java.io.Serializable;
  4
  5 /**//**
  6  * <p>Title: </p>
  7  *
  8  * <p>Description: </p>
  9  *
 10  * <p>Copyright: Copyright (c) 2005</p>
 11  *
 12  * <p>Company: </p>
 13  *
 14  * @author George Hill
 15  * @version 1.0
 16  */
 17
 18 /**//**
 19  * @hibernate.class
 20  *  table="User"
 21  *  dynamic-update="true"
 22  *  dynamic-insert="true"
 23  */
 24 public class User implements Serializable  {
 25
 26   // identifier field
 27   private int guid;
 28
 29   // persistent field
 30   private String account;
 31
 32   // persistent field
 33   private String password;
 34
 35   // persistent field
 36   private String email;
 37
 38   /**//**
 39    * default constructor
 40    */
 41   public User()  {}
 42
 43   /**//**
 44    * full constructor
 45    */
 46   public User(String account, String password, String email)  {
 47     this.account = account;
 48     this.password = password;
 49     this.email = email;
 50   }
 51
 52   /**//**
 53    * @hibernate.id
 54    *  generator-class="native"
 55    *  type="int"
 56    *  column="Guid"
 57    */
 58   public int getGuid()  {
 59     return guid;
 60   }
 61
 62   public void setGuid(int guid)  {
 63     this.guid = guid;
 64   }
 65
 66   /**//**
 67    * @hibernate.property
 68    *  column="Account"
 69    *  length="64"
 70    *  not-null="true"
 71    */
 72   public String getAccount()  {
 73     return account;
 74   }
 75
 76   public void setAccount(String account)  {
 77     this.account = account;
 78   }
 79
 80   /**//**
 81    * @hibernate.property
 82    *  column="Password"
 83    *  length="16"
 84    *  not-null="true"
 85    */
 86   public String getPassword()  {
 87     return password;
 88   }
 89
 90   public void setPassword(String password)  {
 91     this.password = password;
 92   }
 93
 94   /**//**
 95    * @hibernate.property
 96    *  column="Email"
 97    *  length="128"
 98    *  not-null="true"
 99    */
100   public String getEmail()  {
101     return email;
102   }
103
104   public void setEmail(String email)  {
105     this.email = email;
106   }
107
108 }
109

      为了生成hbm.xml文件,需要用到ant,下面是我的build.xml文件的内容:

 1 <?xml version="1.0" encoding="ISO-8859-1"?>
 2
 3 <project name="Hibernate XDoclet Examples" default="hibernate" basedir=".">
 4   <property name="xdoclet.root.dir" value="D:/lib/xdoclet-1.2.3"/>
 5   <property name="xdoclet.lib.dir" value="${xdoclet.root.dir}/lib"/>
 6
 7   <path id="sampleclasspath">
 8     <fileset dir="${xdoclet.lib.dir}">
 9       <include name="*.jar"/>
10     </fileset>
11   </path>
12
13   <taskdef
14     name="hibernatedoclet"
15     classname="xdoclet.modules.hibernate.HibernateDocletTask"
16     classpathref="sampleclasspath"
17     />
18
19   <target name="hibernate" description="Generate mapping documents">
20
21     <echo>+---------------------------------------------------+</echo>
22     <echo>|                                                   |</echo>
23     <echo>| R U N N I N G   H I B E R N A T E D O C L E T     |</echo>
24     <echo>|                                                   |</echo>
25     <echo>+---------------------------------------------------+</echo>
26
27     <hibernatedoclet
28       destdir="./src"
29       excludedtags="@version,@author,@todo,@see"
30       addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"
31       force="false"
32       verbose="true">
33
34       <fileset dir="./src">
35         <include name="sample/hibernate/*.java"/>
36       </fileset>
37
38       <hibernate version="2.1"/>
39
40     </hibernatedoclet>
41   </target>
42 </project>
43

      build.xml文件中的第四行是指定XDoclet的根路径,需要根据解压的路径做相应的修改。XDoclet的下载地址: http://xdoclet.sourceforge.net/xdoclet/install.html。在taskdef里面需要指定classname为xdoclet.modules.hibernate.HibernateDocletTask。在34行的fileset里面需要指定你的Java类所在的包路径。
      运行ant,可以看到生成的User.hbm.xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping
>
    <class
        name="sample.hibernate.User"
        table="User"
        dynamic-update="true"
        dynamic-insert="true"
    >

        <id
            name="guid"
            column="Guid"
            type="int"
        >
            <generator class="native">
              <!--  
                  To add non XDoclet generator parameters, create a file named 
                  hibernate-generator-params-User.xml 
                  containing the additional parameters and place it in your merge dir. 
              --> 
            </generator>
        </id>

        <property
            name="account"
            type="java.lang.String"
            update="true"
            insert="true"
            column="Account"
            length="64"
            not-null="true"
        />

        <property
            name="password"
            type="java.lang.String"
            update="true"
            insert="true"
            column="Password"
            length="16"
            not-null="true"
        />

        <property
            name="email"
            type="java.lang.String"
            update="true"
            insert="true"
            column="Email"
            length="128"
            not-null="true"
        />

        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-User.xml
            containing the additional properties and place it in your merge dir.
        -->

    </class>

</hibernate-mapping>
posted
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值