使用XDoclet简化hibernate配置文件
使用XDoclet简化hibernate配置文件
这只是一个简单的事例,用来展示如何运用XDclote来为hibernate生成配置文件.是XDoclote之旅的开端
更多信息可从http://xdoclet.sf.net/上获取。

XDoclet面向属性编程


目录结构c:\eclipse\workspace\hibernate\src\hb\Cat.java
c:\eclipse\workspace\hibernate\src\example.java
c:\eclipse\workspace\hibernate\src\hibernate.cfg.xml
c:\eclipse\workspace\hibernate\src\xdoclet-lib\放置你所要的所有的包
c:\eclipse\workspace\hibernate\build.xml

相关hibernate.cfg.xml请参看蜗牛乐园的java分类的 如何让猫活起来 这篇文章。

xdoclet.jar , xdoclet-hibernate-module.jar, xdoclet-xdoclet-module.jar, xdoclet-xjavadoc.jar
这四个jar文件是为了运行hibernatedoclet必备的。



下面举例具体说明,如何运用XDoclet来解决配置文件变化和重构升级带来的困难。
Cat.hbm.xml

<?xml version="1.0"?>

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

<hibernate-mapping>
<class
name=
"hb.Cat"
table=
"cat"
dynamic-update=
"false"
dynamic-insert=
"false"
>

<id
name=
"id"
column=
"CAT_ID"
type=
"java.lang.String"
unsaved-value=
"null"
>
<generator class=
"uuid.hex">
</generator>
</id>

<property
name=
"name"
type=
"java.lang.String"
update=
"true"
insert=
"true"
column=
"NAME"
/>

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

</class>

</hibernate-mapping>
这样一个简单的配置文件


下面让我们来看,如何运用XDoclet来自动生成他。
Cat.java是它的类,具体请注意其中加入的标识符。
package hb;
/**
* @hibernate.class table="cat"
*/

public class Cat {

private String id;
private String name;

public Cat() {
}
/**
* @hibernate.id column="CAT_ID" generator-class="uuid.hex" unsaved-value="null"
*/

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
/**
* @hibernate.property column="NAME"
*/

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String toString() {
String strCat = new StringBuffer()
.append(this.getId()).append(
", ")
.append(this.getName()).append(
", ")
.toString();

return strCat;
}
}
<------------------------------------------------------------>
example02.java

import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.tool.hbm2ddl.SchemaUpdate;
import contacts.ContactInfo;
import contacts.PhoneNumber;

public class Example {

public static void main(String[] args) throws Exception {



// load configuration
Configuration config = new Configuration();
config.configure();

// update database schema if required
new SchemaUpdate(config).execute(true);

// open a session
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();

// create a contact
Cat contact = new Cat();
contact.setName(
"Bart");


System.out.println(
"add contact to database...");
try {
session.save(contact);

session.flush();
session.connection().commit();
} catch (Exception e) {
session.connection().rollback();
}

System.out.println(
"contact:" + contact);


// close the session
session.close();
sessionFactory.close();

}
}


<------------------------------------------------------------->
ant文件,build.xml


<project name=
"hb" default="run">

<property name=
"src.java" location="src"/>

<property name=
"build.dir" location="build"/>

<path id=
"classpath.build">
<fileset dir=
"../lib"/>
<fileset dir=
"xdoclet-lib"/>
</path>

<path id=
"classpath.runtime">
<fileset dir=
"../lib"/>
<pathelement location=
"build"/>
</path>

<target name=
"java" description="Compile Java">
<mkdir dir=
"${build.dir}"/>
<javac srcdir=
"${src.java}"
destdir=
"${build.dir}"
classpathref=
"classpath.build"
debug=
"true"/>
<copy todir=
"${build.dir}">
<fileset dir=
"${src.java}">
<exclude name=
"**/*.java"/>
</fileset>
</copy>
</target>

<target name=
"config" depends="java" description="Generate hbm files">
<taskdef name=
"hibernatedoclet" classpathref="classpath.build"
classname=
"xdoclet.modules.hibernate.HibernateDocletTask"/>
<hibernatedoclet destDir=
"${build.dir}">
<fileset dir=
"${src.java}">
<include name=
"**/*.java"/>
</fileset>
<hibernate version=
"2.0"/>
</hibernatedoclet>
</target>

<target name=
"run" depends="clean,config">
<java classname=
"Example" classpathref="classpath.runtime" fork="true"/>
</target>

<target name=
"clean" description="Clean up built files">
<delete dir=
"${build.dir}"/>
<delete>
<fileset dir=
"." includes="dbdata*.*"/>
</delete>
</target>

</project>


air_tuyh   2005-05-14 21:10:42 评论:0   阅读:3126   引用:0

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

Copyright@2008 powered by YuLog