由于新发布的Hibernate Tools是一个比较庞大的工具包 而且已经是作为Eclipse3.2 的插件发布的
然而以前的很有用的工具hbm2java和hbm2ddl都是非常有用的工具
所以我们应该把这些有用的工具找出来继续使用
环境
jdk-1_5_0_07
ant 1.6.5
Hibernate 3.2 cr2
Hibernate Tools-3.2.0.beta6
mysql-5.0.22
首先下载Hibernate Tools的包
在HIbernate的主页上有连接 下载是在sourceforge.net
地址:http://prdownloads.sourceforge.net/jboss/HibernateTools-3.2.0.beta6a.zip?download
下载完了以后解压缩HibernateTools-3.2.0.beta6a\plugins\org.hibernate.eclipse_3.2.0.beta6a\lib\tools
里找到hibernate-tools.jar 放到你的工程的lib里
目录结构
.
+src
+ your package
*.java
*.hbm.xml
...
hibernate.config.xml
...
+lib
......
+data
build.xml
把hibernate的目录里的lib里的jar 还有hibernate3.jar copy到lib里别忘了hibernate-tools.jar
注意hibernate3.jar要用HibernateTools-3.2.0.beta6a\plugins\org.hibernate.eclipse_3.2.0.beta6a\lib\hibernate里的hibernate3.jar
还有mysql-connector-java-5.0.0-beta-bin.jar 这个连接驱动也少不了
另外还要把HibernateTools-3.2.0.beta6a\plugins\org.hibernate.eclipse_3.2.0.beta6a\lib\tools的freemarker.jar也copy到lib里
尽管HIbernate的自动产生代码的方式有很多
比如
1 写java 代码用Xdoclet来产生hbm.xml
2 写hbm.xml来产生java代码
3 写hbm.xml来产生ddl
4 从数据库来产生hbm.xml和ddl
这里先讲解hbm2java 和 hbm2ddl
1 --hbm2java
把写好的代码*.hbm.xml放在你的src的包里
比如这样的Customer.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="ergal.Customer" table="CUSTOMERS" lazy="false">
<id name="id" type="long" column="ID">
<generator class="increment" />
</id>
<property name="name" type="string">
<column name="NAME" length="15" />
</property>
<set
name="orders"
cascade="save-update"
inverse="true"
>
<key column="CUSTOMER_ID" />
<one-to-many class="ergal.Order" />
</set>
</class>
</hibernate-mapping>
还有Order.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="ergal.Order" table="ORDERS">
<id name="id" type="long" column="ID">
<generator class="increment" />
</id>
<property name="orderNumber" type="string">
<column name="ORDERNUMBER" length="15" />
</property>
<many-to-one
name="customer"
column="CUSTOMER_ID"
class="ergal.Customer"
not-null="true"
cascade="save-update"
/>
</class>
</hibernate-mapping>
再然后写Hibernate的配置文件
hibernate.config.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/ahtest</property>
<property name="connection.username">root</property>
<property name="connection.password">********</property>
<!-- JDBC connection pool (use the built-in)-->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management-->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup-->
<property name="hbm2ddl.auto">create</property>
<mapping resource="ergal/Customer.hbm.xml"/>
<mapping resource="ergal/Order.hbm.xml"/>
</session-factory>
</hibernate-configuration>
最后写build.xml
<?xml version="1.0" encoding="GBK"?>
<project name="hibernate-tutorial" default="compile">
<property name="sourcedir" value="${basedir}/src"/>
<property name="targetdir" value="${basedir}/bin"/>
<property name="librarydir" value="${basedir}/lib"/>
<property name="schema.dir" value="${basedir}/data"/>
<path id="libraries">
<fileset dir="${librarydir}">
<include name="*.jar"/>
</fileset>
</path>
<path id="project.class.path">
<!-- Include our own classes, of course -->
<pathelement location="${targetdir}" />
<!-- Include jars in the project library directory -->
<fileset dir="${librarydir}">
<include name="*.jar"/>
</fileset>
</path>
<target name="clean">
<delete dir="${targetdir}"/>
<mkdir dir="${targetdir}"/>
</target>
<target name="copy-resources">
<copy todir="${targetdir}">
<fileset dir="${sourcedir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="compile" depends="clean, copy-resources">
<javac srcdir="${sourcedir}"
destdir="${targetdir}"
classpathref="libraries"/>
</target>
<target name="run" depends="compile">
<java fork="true" classname="ergal.BusinessService" classpathref="libraries">
<classpath path="${targetdir}"/>
<arg value="${action}"/>
</java>
</target>
<!-- create .java form *.hbm.xml -->
<target name="hbm2java" depends="compile"
description="Generate Java source from the O/R mapping files">
<taskdef name="hbm2java"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="project.class.path"/>
<hbm2java destdir="${targetdir}">
<configuration configurationfile="${targetdir}/hibernate.cfg.xml" />
<hbm2java jdk5="true"/>
<!-- <cfg2hbm/> -->
</hbm2java>
</target>
<!-- create ddl form *.hbm.xml -->
<target name="hbm2ddl" depends="compile"
description="Generate DB schema from the O/R mapping files">
<taskdef name="hbm2ddl"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="project.class.path"/>
<hbm2ddl destdir="${schema.dir}">
<configuration configurationfile="${targetdir}/hibernate.cfg.xml" />
<hbm2ddl export="true" console="false" create="true" update="false" drop="false" outputfilename="ahtest.sql"/>
</hbm2ddl>
</target>
</project>
其中的 target name="hbm2java" 就是这次用来产生代码的任务
然后用cmd进入你的build.xml的根目录
运行ant hbm2java
会在你的根目录下多了一个bin文件夹里面就自动产生了一个project的源文件
包含以下代码
Customer.java
package ergal;
// Generated 2006-8-15 2:26:03 by Hibernate Tools 3.2.0.beta6a
import java.util.HashSet;
import java.util.Set;
/**
* Customer generated by hbm2java
*/
public class Customer implements java.io.Serializable {
// Fields
private long id;
private String name;
private Set<Order> orders = new HashSet<Order>(0);
// Constructors
/** default constructor */
public Customer() {
}
/** full constructor */
public Customer(String name, Set<Order> orders) {
this.name = name;
this.orders = orders;
}
// Property accessors
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Set<Order> getOrders() {
return this.orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
}
Order.java
package ergal;
// Generated 2006-8-15 2:26:03 by Hibernate Tools 3.2.0.beta6a
/**
* Order generated by hbm2java
*/
public class Order implements java.io.Serializable {
// Fields
private long id;
private String orderNumber;
private Customer customer;
// Constructors
/** default constructor */
public Order() {
}
/** minimal constructor */
public Order(Customer customer) {
this.customer = customer;
}
/** full constructor */
public Order(String orderNumber, Customer customer) {
this.orderNumber = orderNumber;
this.customer = customer;
}
// Property accessors
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getOrderNumber() {
return this.orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public Customer getCustomer() {
return this.customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
2 hbm2ddl
现在用映射文件来产生ddl和数据表
现在数据库里create database ahtest;
然后在根目录下运行
ant hbm2ddl(因为前面的build.xml里已经定义了hbm2ddl --“target name="hbm2ddl" ”)
就会在数据库的ahtest里自动建好了customers和orders两个表
还会在data文件夹下产生
ahtest.sql这个ddl文件
create table CUSTOMERS (
ID bigint not null,
NAME varchar(15),
primary key (ID));
create table ORDERS (
ID bigint not null,
ORDERNUMBER varchar(15),
CUSTOMER_ID bigint not null,
primary key (ID));
alter table ORDERS
add index FK8B7256E5479EC1E3 (CUSTOMER_ID),
add constraint FK8B7256E5479EC1E3 foreign key (CUSTOMER_ID) references CUSTOMERS (ID);
这就是hbm2java和hbm2ddl这两个方便的工具的基本用法
分享到:
相关推荐
HibernateTools-3.2.4,Hibernate工具包,开发使用,欢迎下载
hibernate-3.2.0源码和hibernate-3.2.0所有的jar包。
Hibernate Tools 3.2.0 beta 8 经测试可在Eclipse3.2下正常使用不报错 由于文件较大 分成2个部分上传
hibernate-tools3.2的user guid
Hibernate Tools 3.2.0 beta 8 经测试可在Eclipse3.2下正常使用不报错 由于文件较大 分成两个部分上传 这是第二部分
您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其中对应T_FILE表的领域对象Tfile.java为: 代码 1 领域对象Tfile 1. ...
本设计的开发工具使用MyEclipse,数据库使用的MySQL,框架是struts整合hibernate。 关键词:J2EE; 成绩管理; MySQL; MyEclipse Abstract College student grade management is a very important aspect ...
3.2. 创建一个简单的项目 3.3. 构建一个简单的项目 3.4. 简单的项目对象模型 (Project Object Model) 3.5. 核心概念 3.5.1. Maven插件和目标 (Plugins and Goals) 3.5.2. Maven生命周期 (Lifecycle) 3.5.3. ...
hibernate-validator-4.2.0.Final.jar hsqldb-1.7.1.jar htmlunit-1.9.jar httpclient-4.0.1.jar httpclient-4.1.2.jar httpclient-4.2.5.jar httpclient-4.4.jar httpcore-4.0.1.jar httpcore-4.1.2.jar jackson-...
spring-hibernate3-2.0.8.jar spring-jdbc-3.1.1.RELEASE.jar spring-jdbc-4.1.4.RELEASE.jar spring-mock.jar spring-test-3.0.5.RELEASE.jar spring-tx-3.1.1.RELEASE.jar spring-web-3.0.5.RELEASE.jar spring-...
20. Developer Tools 20.1. Property Defaults 20.2. Automatic Restart 20.2.1. Logging changes in condition evaluation 20.2.2. Excluding Resources 20.2.3. Watching Additional Paths 20.2.4. Disabling ...