本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7648673
建立时间:2006年5月29日




[Hibernate]從映射文件生成Java類別 - Hbm2JavaTask
软件技术

lhwork 发表于 2006/8/20 11:14:15

 您可以先撰寫好映射文件,然而使用Hbm2JavaTask從映射文件自動生成Java類別,Hbm2JavaTask是在Hibernate extensions中,所以您必須從官方網站上額外下載hibernate-extensions-*.zip。  解開hibernate-extensions-*.zip檔案,當中的tools目錄下有hibernate-tools.jar,請將之包括 在 CLASSPATH設定的位置,另外您還必須要JDOM,所以請將tools/lib目錄下的jdom.jar也包括在CLASSPATH設定中。  我們這次使用以下的User.hbm.xml,與之前主題中不同的是,這次在User.hbm.xml中包括了一些<meta/>標籤,用以告知Hbm2JavaTask在生成Java類別時,必須填入或生成的資訊: User.hbm.xml <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"><hibernate-mapping> <class name="onlyfun.caterpillar.User" table="USER"> <meta attribute="class-description"> User's basic information. @author caterpillar </meta> <id name="id" type="string" unsaved-value="null"> <meta attribute="scope-set">protected</meta> <column name="user_id" sql-type="char(32)"/> <generator class="uuid.hex"/> </id> <property name="name" type="string" not-null="true"> <meta attribute="field-description">User name</meta> <column name="name" length="16" not-null="true"/> </property> <property name="sex" type="char"> <meta attribute="field-description">User's Sex Symbol</meta> </property> <property name="age" type="int"> <meta attribute="field-description">User's age</meta> </property> </class></hibernate-mapping>  <property/>上的type屬性告訴Hbm2JavaTask生成屬性時,使用所指定的資料型態,not-null設定為 true,將會field上加上JavaDoc註解,表示這是一個不可為null的屬性,<meta/>的attribute可以設定的值有 許多個,scope-set告知Hbm2JavaTask,將setId()方法設定為protected,class-description與 field-description則會增加指定的JavaDoc註解文件。  更多的<meta/>標籤使用方式,可以查看參考文件的表 15.6。  我們使用以下的Ant建構檔案來使用Hbm2JavaTask: build.xml <project name="Hibernate" default="codegen" basedir="."> <!-- Set up properties containing important project directories --> <property name="source.root" value="src"/> <property name="class.root" value="classes"/> <property name="lib.dir" value="lib"/> <property name="data.dir" value="data"/> <!-- Set up the class path for compilation and execution --> <path id="project.class.path"> <!-- Include our own classes, of course --> <pathelement location="${class.root}" /> <!-- Include jars in the project library directory --> <fileset dir="${lib.dir}"> <include name="*.jar"/> </fileset> <pathelement path ="${classpath}"/> </path> <!-- Teach Ant how to use Hibernate's code generation tool --> <taskdef name="hbm2java" classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask" classpathref="project.class.path"/> <!-- Generate the java code for all mapping files in our source tree --> <target name="codegen" description="Generate Java source from the O/R mapping files"> <!-- Teach Ant how to use Hibernate's code generation tool --> <taskdef name="hbm2java" classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask" classpathref="project.class.path"/> <hbm2java output="${source.root}"> <fileset dir="${source.root}"> <include name="**/*.hbm.xml"/> </fileset> </hbm2java> </target></project>  同樣的,<taskdef/>定義一個新的task來使用Hbm2JavaTask,Hbm2JavaTask將會自動搜詢src下*.hbm.xml,並自動生成Java類別,我們來看看運行的過程: antBuildfile: build.xmlcodegen:[hbm2java] Processing 1 files.[hbm2java] Building hibernate objects[hbm2java] log4j:WARN No appenders could be found for logger (net.sf.hibernate.util.DTDEntityResolver).[hbm2java] log4j:WARN Please initialize the log4j system properly.BUILD SUCCESSFULTotal time: 4 seconds  以下是Hbm2JavaTask所自動生成的Java類別: User.java package onlyfun.caterpillar;import java.io.Serializable;import org.apache.commons.lang.builder.EqualsBuilder;import org.apache.commons.lang.builder.HashCodeBuilder;import org.apache.commons.lang.builder.ToStringBuilder;/*** User's basic information.* @author caterpillar* */public class User implements Serializable { /** identifier field */ private String id; /** persistent field */ private String name; /** nullable persistent field */ private char sex; /** nullable persistent field */ private int age; /** full constructor */ public User(String name, char sex, int age) { this.name = name; this.sex = sex; this.age = age; } /** default constructor */ public User() { } /** minimal constructor */ public User(String name) { this.name = name; } public String getId() { return this.id; } protected void setId(String id) { this.id = id; } /** * User name */ public String getName() { return this.name; } public void setName(String name) { this.name = name; } /** * User's Sex Symbol */ public char getSex() { return this.sex; } public void setSex(char sex) { this.sex = sex; } /** * User's age */ public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } public String toString() { return new ToStringBuilder(this) .append("id", getId()) .toString(); } public boolean equals(Object other) { if ( !(other instanceof User) ) return false; User castOther = (User) other; return new EqualsBuilder() .append(this.getId(), castOther.getId()) .isEquals(); } public int hashCode() { return new HashCodeBuilder() .append(getId()) .toHashCode(); }}  Hbm2JavaTask也自動為您重新定義了equals()、toString()、hasCode()等方法,關於Persistent Classes 的設計規則,您可以先查詢參考手冊的第4章。


阅读全文(2120) | 回复(-1) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 1.543 second(s), page refreshed 144807971 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号