首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate hbm2java 實戰:從映射檔自動生成持久化類別 (Hibernate Extensions 2.1.2)

     編輯:Java 相關知識

工具簡介

hbm2java (Hibernate Extensions 組件) 依據 .hbm.xml 映射檔生成 Java 持久化類別 (POJO)。比 SchemaExport (生成 DDL) 簡單得多,適合「先建模、後生成碼」工作流。

環境準備

  • Hibernate 2.1.6 核心包
  • Hibernate Extensions 2.1.2 (hibernate-extensions.jar 含 Hbm2JavaTask)
  • Log4j 1.2.9
  • Ant 1.6+

所有 JAR 放入專案 lib/ 目錄。

專案目錄結構


Payment/
├── build.xml
├── hibernate.codegen.xml
├── log4j.properties
├── lib/                 ← 所有 jar
├── hbm/
│   └── payment/
│       └── Payment.hbm.xml
└── src/                 ← 生成的 Java 碼輸出目錄

核心配置檔

1. build.xml:Ant 任務定義


<project name="hbm2java-demo" basedir="." default="generate">
  <path id="classpath">
    <fileset dir="lib">
      <include name="**/*.jar"/>
    </fileset>
  </path>

  <target name="generate">
    <taskdef name="hbm2java" 
             classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask" 
             classpathref="classpath"/>
    
    <hbm2java output="src" config="hibernate.codegen.xml">
      <fileset dir="hbm">
        <include name="**/*.hbm.xml"/>
      </fileset>
    </hbm2java>
  </target>
</project>

2. hibernate.codegen.xml:渲染器配置


<codegen>
  <generate renderer="net.sf.hibernate.tool.hbm2java.BasicRenderer"/>
</codegen>

BasicRenderer 產生標準 getter/setter、toString()、equals()/hashCode() (基於主鍵)。

3. log4j.properties:查看生成日誌


log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

4. Payment.hbm.xml:映射檔範例


<hibernate-mapping>
  <class name="payment.Payment" table="PAYMENT">
    <id name="id" type="long" column="PAYMENT_ID">
      <generator class="native"/>
    </id>
    <property name="amount" type="long" column="AMOUNT"/>
  </class>
</hibernate-mapping>

關鍵:class 屬性 name="payment.Payment" 決定生成類別的**包名與類名**,輸出路徑為 src/payment/Payment.java。

執行與驗證


$ ant generate
Buildfile: build.xml
generate:
[hbm2java] Generating payment/Payment.java
BUILD SUCCESSFUL

檢查 src/payment/Payment.java:


package payment;

public class Payment {
    private Long id;
    private long amount;
    // 標準 getter/setter, equals, hashCode, toString
}

常見問題與技巧

問題解決
生成碼包名錯誤映射檔 class name 必須含完整包名,如 com.myapp.model.User
想自訂生成模板實作 Renderer 介面或繼承 BasicRenderer 覆寫方法,配置 generate renderer="..."
需生成 JDK 5 語法 (Generics, Annotation)使用 net.sf.hibernate.tool.hbm2java.Java5Renderer (Hibernate 3.2+)
映射檔分散多模組fileset dir 指向共同父目錄,**/*.hbm.xml 遞歸掃描

工作流建議

  1. 資料建模工具 (PowerDesigner, ERWin) 設計 ER 圖
  2. 導出或手寫 .hbm.xml
  3. 執行 ant generate 產生 POJO
  4. 人工補充業務方法、驗證邏輯、toString 等
  5. 版控管理生成碼,**不要手動修改映射檔對應的屬性區塊** (可加 // Generated 標記)

結語

hbm2java 讓「映射檔為主、Java 碼為從」成為可行流程,減少手寫 POJO 錯誤,保持映射與類別同步。配合 Ant 整合建置流程,一鍵生成,效率倍增。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved