https://github.com/darknessitachi/xdocletHibernate
这次我们用OA中常用的 人员、组织、用户三个对象来做测试,组织的对象模型为:
public class Organization {
/**
* @hibernate.id generator-class="native"
*/
private int id;
/**
* @hibernate.property
*/
private String name;
/**
* @hibernate.property
*/
private String sn;
/**
* @hibernate.property
*/
private String description;
/**
* @hibernate.many-to-one column="pid"
*/
private Organization parent;
/**
* @hibernate.set inverse="true" lazy="extra"
* @hibernate.key column="pid"
* @hibernate.one-to-many class="org.darkness.oa.model.Organization"
*/
private Set<Organization> children;
}
人员的对象模型为:
public class Person {
/**
* @hibernate.id generator-class="native"
*/
private int id;
/**
* @hibernate.property
*/
private String name;
/**
* @hibernate.property
*/
private String sex;
/**
* @hibernate.property
*/
private String address;
/**
* @hibernate.property
*/
private String duty;
/**
* @hibernate.property
*/
private String phone;
/**
* @hibernate.property
*/
private String description;
/**
* @hibernate.many-to-one
*/
private Organization org;
/**
* Person 1-----1 User
*
* @hibernate.one-to-one property-ref="person"
*/
private User user;
}
系统用户的对象模型为:
public class User {
/**
* @hibernate.id generator-class="native"
*/
private int id;
/**
* 登录帐号
*
* @hibernate.property not-null="true" unique="true"
*/
private String username;
/**
* 登录密码
*
* @hibernate.property not-null="true"
*/
private String password;
/**
* 帐号创建时间
*
* @hibernate.property update="false"
*/
private Date createTime;
/**
* 帐号失效时间
*
* @hibernate.property
*/
private Date expireTime;
/**
* 对应的人员信息 User 1----1 Person
*
* @hibernate.many-to-one unique="true"
*/
private Person person;
}
注意到我们编写的这几个类中在属性上都有@hibernate标志开头的一些注释,这个上hibernate提供给xdoclet用来生成对应hbm文件的标注语言,有了它,我们就可以通过xdoclet将我们的标注提取出来生成hbm文件来,这样有两点好处:
1、节约了我们手动编写hbm映射文件的时间,提高了编程效率
2、以后一旦改动来代码,我们不需要烦心我们的映射文件与对应的类不匹配,减小来维护带来的成本,提高了系统的可维护性
下面我们来看一下对应的ant脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project name="系统构建脚本" default="build" basedir=".">
<property name="src.dir" value="${basedir}/src" />
<property name="xdoclet.home" value="D:/java/xdoclet-plugins-1.0.3" />
<!-- Build classpath -->
<path id="xdoclet.task.classpath">
<fileset dir="${xdoclet.home}/lib">
<include name="**/*.jar" />
</fileset>
<fileset dir="${xdoclet.home}/plugins">
<include name="**/*.jar" />
</fileset>
</path>
<path id="classpath">
<fileset dir="${basedir}/lib">
<include name="**/*.jar" />
</fileset>
</path>
<target name="build">
<delete dir="${basedir}/bin/org" />
<mkdir dir="${basedir}/bin/org" />
<javac srcdir="." destdir="${basedir}/bin" debug="true" debuglevel="lines,vars,source">
<!--<compilerarg value="-encoding gb2312 "/>-->
<classpath refid="classpath" />
</javac>
</target>
<taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask" classpathref="xdoclet.task.classpath" />
<target name="生成Hibernate配置文件">
<xdoclet>
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
<component classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin" destdir="${src.dir}" version="3.0" hbm2ddlauto="update" jdbcurl="jdbc:mysql://127.0.0.1/test" jdbcdriver="com.mysql.jdbc.Driver" jdbcusername="root" jdbcpassword="root" dialect="org.hibernate.dialect.MySQLDialect" showsql="true" />
</xdoclet>
</target>
<target name="生成hibernate映射文件">
<xdoclet>
<fileset dir="${basedir}/src/org/darkness/oa/model">
<include name="**/*.java" />
</fileset>
<component classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin" version="3.0" destdir="${src.dir}" />
</xdoclet>
</target>
</project>
需要注意一点的就上xdoclet.home对应到下载的xdoclet的根目录就可以了
这样我们运行一下ant,model对应的hbm文件就自动生成了。