zoukankan      html  css  js  c++  java
  • 使用Ant自动化发开Hibernate

    在开发使用Hibernate框架应用程序中,无外乎要创建hibernate.cfg.xml,xxx.hbm.xml,pojos和databaseSchema这些文件,框架这东西刚开始学会的时候,都是心情舒畅,热情高涨,所有文件都是自己手写不管这样重复性的工作有多么的乏味,爱情都会由低潮期更别说重复Coding了,久而久之在编写一个个xml、pojo和schema的过程中,不由从心中产生一种不舒畅之气。我曾经有一段时间见到代码文件就有想吐的冲动,不过还好我还是挺过来,嘛也就是像爱情麻木期一样,怎么都无所谓了。直到最近了解到Ant这个工具,让我看到了另一种发开Hibernate应用程序的方式,并不是说这样的开发方式就一定好于纯手工编写,适合自己才是最好的,但我是一个比较爱偷懒的,自动化构建非常的吸引我。开头字数凑够了就进入正题了,首先直接上build.xml,这个文件是ant所需要的

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

    <project name="hibernatetools" basedir="." default="useHibernateTool">

    <!-- 导入build.properties文件,该文件定义一些常量,这些常量也可以是用<property name="" value="">的形式定义 -->
    <property file="build.properties"></property>

    <!-- 定义依赖包所在的位置,"${reference_libs_dir}"表示引用名为"reference_libs_dir"的常量 -->
    <path id="referencelib">
    <fileset dir="${reference_libs_dir}">
    <!-- 匹配模式,表示该目录下所有jar文件 -->
    <include name="**/*.jar"/>
    </fileset>
    </path>

    <!-- 自定义Ant Task,但是使用的自定义类为Hibernate为我们提供的 -->
    <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="referencelib"></taskdef>

    <!-- 使用hibernatetool -->
    <target name="useHibernateTool">
    <hibernatetool>
    <!-- 指定资源搜索位置 -->
    <classpath>
    <path location="${source_folder_dir}"></path>
    <path location="bin"></path>
    </classpath>

    <!-- 指定Hibernate的配置文件 -->
    <configuration configurationfile="${source_folder_dir}/hibernate.cfg.xml"/>

    <!-- 根据hbm生成java代码 -->
    <hbm2java jdk5="true" destdir="${source_folder_dir}"/>
    <!-- 根据hbm生成databaseSchema -->
    <hbm2ddl destdir="${database_schema_dir}" export="true" outputfilename="sqlStatement.sql" format="true"/>
    </hibernatetool>
    </target>
    </project>

    build.properties文件:

    source_folder_dir=src
    reference_libs_dir=referencelibs
    database_schema_dir=dbschema

    这是项目最开始的状态:

    此时项目中仅仅只是定义了cfg和hbm文件,数据库schema和pojo都没有定义,"referencelibs"中存放的是该程序要成功需要的依赖库文件。运行Ant,此时项目的状态:

    可以看到,我们的需要的pojo类和schema都生成好了,其实按照我的build.xml设置,数据库已经直接设置到了两张表了。验证器正确性:

    Customer.hbm.xml:

    <?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">
    <hibernate-mapping>
    <class name="com.beliefbetrayal.hibernate.pojos.Customer" table="customer">
    <!-- 主键设置 -->
    <id name="id" type="string">
    <column name="id"></column>
    <generator class="uuid"></generator>
    </id>
    <!-- 属性设置 -->
    <property name="username" column="username" type="string"></property>
    <property name="balance" column="balance" type="integer"></property>

    <set name="orders" inverse="true" cascade="all">
    <key column="customer_id" ></key>
    <one-to-many class="com.beliefbetrayal.hibernate.pojos.Order"/>
    </set>
    </class>
    </hibernate-mapping>

    Customer.java

    package com.beliefbetrayal.hibernate.pojos;
    // Generated 2012-2-8 1:10:59 by Hibernate Tools 3.3.0.GA

    import java.util.HashSet;
    import java.util.Set;

    /**
    * Customer generated by hbm2java
    */
    public class Customer implements java.io.Serializable {


    private String id;
    private String username;
    private Integer balance;
    private Set<Order> orders = new HashSet<Order>(0);

    public Customer() {
    }

    public Customer(String username, Integer balance, Set<Order> orders) {
    this.username = username;
    this.balance = balance;
    this.orders = orders;
    }

    public String getId() {
    return this.id;
    }

    public void setId(String id) {
    this.id = id;
    }
    public String getUsername() {
    return this.username;
    }

    public void setUsername(String username) {
    this.username = username;
    }
    public Integer getBalance() {
    return this.balance;
    }

    public void setBalance(Integer balance) {
    this.balance = balance;
    }
    public Set<Order> getOrders() {
    return this.orders;
    }

    public void setOrders(Set<Order> orders) {
    this.orders = orders;
    }
    }

    可以看到,我们借助Ant生成的POJO完全没问题。看看数据库Schema:

        create table customer (
    id varchar(255) not null,
    username varchar(255),
    balance integer,
    primary key (id)
    );

    create table orders (
    id varchar(255) not null,
    orderNumber varchar(255),
    cost integer,
    customer_id varchar(255),
    primary key (id)
    );

    alter table orders
    add index FKC3DF62E51E0069B1 (customer_id),
    add constraint FKC3DF62E51E0069B1
    foreign key (customer_id)
    references customer (id);

    使用Ant自动化开发Hibernate需要hibernate-tools.jar包。我将项目整理了一下可以下载参考项目下载。

  • 相关阅读:
    [充电][ios]ios充电接口
    [ios]app后台运行
    [ios][opengles]GLKit如何搭一个app的框架
    [UML]转:UML类图集中关系的总结
    [UML]转:浅谈UML的概念和模型之UML九种图
    [ios][swift]使用swift闭包进行viewcontroller反向传值
    [ios]纯代码实现UITableViewCell的自定义扩展
    [ios][opengles]opengles纹理贴图
    [ios][swift]swift 怎么去除 optional
    mysql数据库指定ip远程访问
  • 原文地址:https://www.cnblogs.com/xuhn/p/2627220.html
Copyright © 2011-2022 走看看