彻底搞定用Xdoclet生成Hibernate所有配置文件-阿里云开发者社区

开发者社区> 技术小阿哥> 正文

彻底搞定用Xdoclet生成Hibernate所有配置文件

简介:
+关注继续查看
目标:
    利用XDoclet从Java持久化类生成hibernate mapping,hibernate.cfg.xml和mysql数据库脚本。
 
具体步骤:(省略环境配置过程)
 
第一步:先写实体类
 
package com.lavasoft.zfv.domain.zfv.book.entity;
import java.util.Date;
/**
 * File Name:   Book.java
 * Created by:  IntelliJ IDEA.
 * Copyright:   Copyright (c) 2003-2006
 * Author:      leizhimin
 * Modifier:    leizhimin
 * Date Time:   2006-12-16 12:54:50
 * Readme:      图书
 */
/**
 * 图书
 *
 * @hibernate.mapping default-lazy="false"
 * @hibernate.meta attribute="class-description" value="图书"
 * @hibernate.class table="bk_ts"
 */

public class Book {
    private Long id;            //标识
    private String code;        //代码
    private String name;        //名称*
    private String bookman;     //出版社
    private Date pubDate;       //出版日期
    private String author;      //作者
    private String translator;  //译者
    private Double price;       //单价*
    private int amount;         //采购数量*
    private String buyer;       //采购人
    private String assessor;    //审核人
    private Date dateMark;      //操作时间(登记日期)*
    private String operator;    //操作员(录入人)*
    private String sort;        //类别(XXYYZZ格式,对应大中细类别)*
    private String summary;     //摘要(内容简介)
    private String remark;      //备注
    public Book() {
    }
    /**
     * @hibernate.id generator-class="native" column="id"
     * @hibernate.meta attribute="field-description" value="标识"
     */

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    /**
     * @hibernate.property column="dm" type="string" length="20" not-null="false"
     * @hibernate.meta attribute="field-description" value="代码"
     */
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    /**
     * @hibernate.property column="mc" type="string" length="100" not-null="true"
     * @hibernate.meta attribute="field-description" value="名称"
     */

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @hibernate.property column="cbs" type="string" length="24"  not-null="false"
     * @hibernate.meta attribute="field-description" value="出版社"
     */
    public String getBookman() {
        return bookman;
    }
    public void setBookman(String bookman) {
        this.bookman = bookman;
    }
    /**
     * @hibernate.property column="cbrq" type="timestamp" not-null="false"
     * @hibernate.meta attribute="field-description" value="出版日期"
     */

    public Date getPubDate() {
        return pubDate;
    }
    public void setPubDate(Date pubDate) {
        this.pubDate = pubDate;
    }
    /**
     * @hibernate.property column="zz" type="string" length="24" not-null="false"
     * @hibernate.meta attribute="field-description" value="作者"
     */

    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    /**
     * @hibernate.property column="yz" type="string" length="24" not-null="false"
     * @hibernate.meta attribute="field-description" value="译者"
     */
    public String getTranslator() {
        return translator;
    }
    public void setTranslator(String translator) {
        this.translator = translator;
    }
    /**
     * @hibernate.property column="dj" type="big_decimal" precision="19" scale="6"  not-null="true"
     * @hibernate.meta attribute="field-description" value="单价"
     */
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
    /**
     * @hibernate.property column="sl" type="int" not-null="true"
     * @hibernate.meta attribute="field-description" value="数量"
     */

    public int getAmount() {
        return amount;
    }
    public void setAmount(int amount) {
        this.amount = amount;
    }
    /**
     * @hibernate.property column="cgr" type="string" length="12" not-null="false"
     * @hibernate.meta attribute="field-description" value="采购人"
     */

    public String getBuyer() {
        return buyer;
    }
    public void setBuyer(String buyer) {
        this.buyer = buyer;
    }
    /**
     * @hibernate.property column="shr" type="string" length="12" not-null="false"
     * @hibernate.meta attribute="field-description" value="审核人"
     */

    public String getAssessor() {
        return assessor;
    }
    public void setAssessor(String assessor) {
        this.assessor = assessor;
    }
    /**
     * @hibernate.property column="czsj" type="timestamp" not-null="true"
     * @hibernate.meta attribute="field-description" value="操作时间"
     */

    public Date getDateMark() {
        return dateMark;
    }
    public void setDateMark(Date dateMark) {
        this.dateMark = dateMark;
    }
    /**
     * @hibernate.property column="czy" type="string" length="12" not-null="true"
     * @hibernate.meta attribute="field-description" value="操作员"
     */

    public String getOperator() {
        return operator;
    }
    public void setOperator(String operator) {
        this.operator = operator;
    }
    /**
     * @hibernate.property column="lb" type="string" length="12" not-null="true"
     * @hibernate.meta attribute="field-description" value="类别"
     */

    public String getSort() {
        return sort;
    }
    public void setSort(String sort) {
        this.sort = sort;
    }
    /**
     * @hibernate.property column="zy" type="string" length="600" not-null="false"
     * @hibernate.meta attribute="field-description" value="摘要"
     */

    public String getSummary() {
        return summary;
    }
    public void setSummary(String summary) {
        this.summary = summary;
    }
    /**
     * @hibernate.property column="bz" type="string" length="200" not-null="false"
     * @hibernate.meta attribute="field-description" value="备注"
     */

    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
}

 
第二步:写xdoclet的ant脚本
 
说明,此脚本有四个目标,执行后的结果分别是:
generate-configuration:生成hibernate.cfg.xml
generate-mapping:生成hibernate实体类映射文件
generate-schema-mysql:生成MySQL数据库脚本
注意:在生成MySQL数据库脚本之前应该先生成生成hibernate实体类映射文件。
 
 
<?xml version="1.0" encoding="gb2312"?>
<project name="xdoclet-hibernate-zfv" default="xdoclet" basedir="../../../../../">
    <property name="xdoclet.lib.dir" value="${basedir}/lib"/>
    <property name="project.lib.dir" value="${basedir}/lib"/>
    <property name="project.src.dir" value="${basedir}/src"/>
    <property name="project.resources.dir" value="${basedir}/doc/dbscript"/>
    <property name="tomcat.lib.dir" value="E:\myserver\zfv-tomcat-5.5.20\common\lib"/>
    <property name="hibernate.cfg.dialect" value="org.hibernate.dialect.MySQLDialect"/>
    <property name="hibernate.cfg.driver" value="com.mysql.jdbc.Driver"/>
    <property name="hibernate.cfg.username" value="zfvims"/>
    <property name="hibernate.cfg.password" value="leizhimin"/>
    <property name="hibernate.cfg.jdbcurl" value="jdbc:mysql://localhost:3306/zfvims"/>
    <property name="hibernate.cfg.showsql" value="true"/>
    <target name="xdoclet">
        <path id="xdoclet.task.classpath">
            <pathelement path="${tomcat.lib.dir}/*.jar"/>
            <fileset dir="${xdoclet.lib.dir}">
                <include name="**/*.jar"/>
            </fileset>
            <fileset dir="${project.lib.dir}">
                <include name="**/*.jar"/>
                <exclude name="**/hibernate2.jar"/>
            </fileset>
        </path>
        <taskdef name="hibernatedoclet"
            classname="xdoclet.modules.hibernate.HibernateDocletTask"
            classpathref="xdoclet.task.classpath"
        />
    </target>
    <target name="generate-mapping" depends="xdoclet">
        <hibernatedoclet destdir="${project.src.dir}" verbose="true" force="false">
            <fileset dir="${project.src.dir}">
                <include name="**/domain/**/*.java"/>
            </fileset>
            <hibernate version="3.0" xmlencoding="gb2312"/>
        </hibernatedoclet>
    </target>
    <target name="generate-configuration" depends="xdoclet">
        <hibernatedoclet destdir="${project.src.dir}" verbose="true" force="true">
            <fileset dir="${project.src.dir}">
                <include name="**/domain/**/*.java"/>
            </fileset>
            <hibernatecfg
                destinationFile="hibernate.cfg.xml"
                dialect="${hibernate.cfg.dialect}"
                driver="${hibernate.cfg.driver}"
                username="${hibernate.cfg.username}"
                password="${hibernate.cfg.password}"
                jdbcurl="${hibernate.cfg.jdbcurl}"
                showsql="${hibernate.cfg.showsql}"
                destdir="${project.resources.dir}"
                xmlencoding="gb2312"
                />
        </hibernatedoclet>
    </target>
  <target name="generate-schema-mysql" depends="xdoclet">
        <taskdef name="schemaexport"
            classname="org.hibernate.tool.hbm2ddl.SchemaExportTask"
            classpathref="xdoclet.task.classpath"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.use_sql_comments true" value="true"/>
        <schemaexport
            quiet="no"
            text="yes"
            drop="no"
            delimiter=";"
            output="${project.resources.dir}/zfvims-mysql-schema.sql">
            <fileset dir="${project.src.dir}">
                <include name="**/domain/**/*.hbm.xml"/>
            </fileset>
        </schemaexport>
    </target>
</project>
 
第三步:生成的结果如下
 
生成的配置文件
 
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 2.0//EN" "
[url]http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd[/url]">
<!-- Generated file - Do not edit! -->
<hibernate-configuration>
 <!-- a SessionFactory instance listed as /jndi/name -->
 <session-factory>
  <!-- properties -->
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="show_sql">true</property>
  <property name="use_outer_join">false</property>
   <property name="connection.username">zfvims</property>
   <property name="connection.password">leizhimin</property>
   <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
   <property name="connection.url">jdbc:mysql://localhost:3306/zfvims</property>
  <!-- mapping files -->
  <mapping resource="com/lavasoft/zfv/domain/zfv/book/entity/Book.hbm.xml"/>
  <mapping resource="com/lavasoft/zfv/domain/zfv/book/entity/Reader.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

 
生成的映射文件
 
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "
[url]http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd[/url]">
<hibernate-mapping
        default-lazy="false"
>
    <class
        name="com.lavasoft.zfv.domain.zfv.book.entity.Book"
        table="bk_ts"
    >
        <meta attribute="class-description">图书</meta>
        <id
            name="id"
            column="id"
            type="java.lang.Long"
        >
            <meta attribute="field-description">标识</meta>
            <generator class="native">
              <!--  
                  To add non XDoclet generator parameters, create a file named 
                  hibernate-generator-params-Book.xml 
                  containing the additional parameters and place it in your merge dir. 
              --> 
            </generator>
        </id>
        <property
            name="code"
            type="string"
            update="true"
            insert="true"
            column="dm"
            length="20"
            not-null="false"
        >
            <meta attribute="field-description">代码</meta>
        </property>
        <property
            name="name"
            type="string"
            update="true"
            insert="true"
            column="mc"
            length="100"
            not-null="true"
        >
            <meta attribute="field-description">名称</meta>
        </property>
        <property
            name="bookman"
            type="string"
            update="true"
            insert="true"
            column="cbs"
            length="24"
            not-null="false"
        >
            <meta attribute="field-description">出版社</meta>
        </property>
        <property
            name="pubDate"
            type="timestamp"
            update="true"
            insert="true"
            column="cbrq"
            not-null="false"
        >
            <meta attribute="field-description">出版日期</meta>
        </property>
        <property
            name="author"
            type="string"
            update="true"
            insert="true"
            column="zz"
            length="24"
            not-null="false"
        >
            <meta attribute="field-description">作者</meta>
        </property>
        <property
            name="translator"
            type="string"
            update="true"
            insert="true"
            column="yz"
            length="24"
            not-null="false"
        >
            <meta attribute="field-description">译者</meta>
        </property>
        <property
            name="price"
            type="big_decimal"
            precision="19"
            scale="6"
            update="true"
            insert="true"
            column="dj"
            not-null="true"
        >
            <meta attribute="field-description">单价</meta>
        </property>
        <property
            name="amount"
            type="int"
            update="true"
            insert="true"
            column="sl"
            not-null="true"
        >
            <meta attribute="field-description">数量</meta>
        </property>
        <property
            name="buyer"
            type="string"
            update="true"
            insert="true"
            column="cgr"
            length="12"
            not-null="false"
        >
            <meta attribute="field-description">采购人</meta>
        </property>
        <property
            name="assessor"
            type="string"
            update="true"
            insert="true"
            column="shr"
            length="12"
            not-null="false"
        >
            <meta attribute="field-description">审核人</meta>
        </property>
        <property
            name="dateMark"
            type="timestamp"
            update="true"
            insert="true"
            column="czsj"
            not-null="true"
        >
            <meta attribute="field-description">操作时间</meta>
        </property>
        <property
            name="operator"
            type="string"
            update="true"
            insert="true"
            column="czy"
            length="12"
            not-null="true"
        >
            <meta attribute="field-description">操作员</meta>
        </property>
        <property
            name="sort"
            type="string"
            update="true"
            insert="true"
            column="lb"
            length="12"
            not-null="true"
        >
            <meta attribute="field-description">类别</meta>
        </property>
        <property
            name="summary"
            type="string"
            update="true"
            insert="true"
            column="zy"
            length="600"
            not-null="false"
        >
            <meta attribute="field-description">摘要</meta>
        </property>
        <property
            name="remark"
            type="string"
            update="true"
            insert="true"
            column="bz"
            length="200"
            not-null="false"
        >
            <meta attribute="field-description">备注</meta>
        </property>
        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-Book.xml
            containing the additional properties and place it in your merge dir.
        -->
    </class>
</hibernate-mapping>

 
生成的数据库脚本
 
    drop table if exists bk_ts;
    create table bk_ts (
        id bigint not null auto_increment comment '标识',
        dm varchar(20) comment '代码',
        mc varchar(100) not null comment '名称',
        cbs varchar(24) comment '出版社',
        cbrq datetime comment '出版日期',
        zz varchar(24) comment '作者',
        yz varchar(24) comment '译者',
        dj numeric(19,6) not null comment '单价',
        sl integer not null comment '数量',
        cgr varchar(12) comment '采购人',
        shr varchar(12) comment '审核人',
        czsj datetime not null comment '操作时间',
        czy varchar(12) not null comment '操作员',
        lb varchar(12) not null comment '类别',
        zy text comment '摘要',
        bz varchar(200) comment '备注',
        primary key (id)
    ) comment='图书' type=InnoDB;

 
概括结合Xdoclet来做hibernate应用会给你带来非常高效率和价值,但是配置脚本和实体标签的写法不容易掌握,需要大量实践才可以。这个例子虽然是针对MySQL的,可是稍作修改(数据库方言),就可以用于Oracle、DB2、Sybase下的Hibernate应用,你可以稍作修改将此脚本植入你的项目中,非常的方便。欢迎和我再次交流!


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/12545,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9482 0
用Spring的mappingDirectoryLocations来配置Hibernate映射文件
在Spring的applicationContext.xml中配置映射文件的方法:         com/almaer/model/Person.hbm.xml     com/almaer/model/Car.hbm.xml     com/almaer/model/Engine.hbm.xml     com/almaer/model/Toy.hbm.xml     当配置文件变得越来越多,修改起来也越来越烦人,而且基于XML的配置也可能带来输入的错误,导致你可能因为一个字符的错误而找上半天。
816 0
MyEclipse自动生成hibernate映射文件
http://blog.csdn.net/blacklin520/article/details/6854163
435 0
hibernate映射xml文件配置之一对多,多对多
一对多配置 【1】班级和学生模型       --->班级可容纳多个学生       --->学生只能属于一个班级 【2】一对多配置中的关系维护(inverse)       --->一端放弃关系的维护       --->多端进行关系维护。
882 0
SSH(STRUTS2+SPRING+HIBERNATE)实现文件上传功能
首先是上传页面(upload.jsp) 主要代码如下,其中文件字段按自己所需可以改,但在Action中也必须增减相应字段来接受, [java] view plaincopy         ...
828 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13166 0
hibernate之xml映射文件关系维护,懒加载,级联
    一:关系维护    --->inverse默认值false,表示不放弃关系的维护。     --->inverse="true"配置在那一端,表示那一端xml对应的po放弃关系的维护(交由hibernate内部进行维护),由另一端进行关系维护。
1071 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11502 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6885 0
13694
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载