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

Hibernate 入門實戰(一):核心架構與四大核心步驟詳解

     編輯:Java 相關知識

Hibernate 是 Java 應用程式與關聯式資料庫之間的橋樑,負責將 Java 物件自動映射為關聯式資料,內部封裝了 JDBC 操作細節,向上層提供面向物件的資料存取 API。本文透過一個簡單的 helloapp 範例應用,完整示範從環境建置到 CRUD 操作的全流程,幫助讀者快速建立 Hibernate 開發的核心概念。

一、Hibernate 在應用中的定位

Hibernate 架構定位圖

如圖所示,Hibernate 位於業務邏輯層與資料庫之間,屏蔽了底層 SQL 差異。helloapp 範例功能包含:透過 Hibernate 對 Customer 物件進行儲存、更新、刪除、載入與查詢。該應用既可作為獨立 Java 程式執行,也可部署為 Java Web 應用,原始碼位於配套光碟的 sourcecode/chapter2/helloapp 目錄。

二、四大核心開發步驟

  1. 建立 Hibernate 組態文件(hibernate.properties 或 hibernate.cfg.xml)
  2. 建立持久化類別(POJO)
  3. 建立對象關係映射文件(.hbm.xml)
  4. 撰寫 Hibernate API 程式碼操作資料庫

三、建立 Hibernate 組態文件

組態文件需放置於應用程式的 classpath 中,支援兩種格式:

  • Java 屬性檔:預設檔名 hibernate.properties,採鍵值對格式
  • XML 格式:預設檔名 hibernate.cfg.xml,結構化程度更高

3.1 hibernate.properties 範例(連接 MySQL)

hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/SAMPLEDB
hibernate.connection.username=root
hibernate.connection.password=1234
hibernate.show_sql=true

3.2 核心屬性說明表

屬性名稱說明
hibernate.dialect指定資料庫 SQL 方言,Hibernate 据此生成特定資料庫的 SQL
hibernate.connection.driver_classJDBC 驅動程式完整類別名稱
hibernate.connection.urlJDBC 連線字串
hibernate.connection.username資料庫登入帳號
hibernate.connection.password資料庫登入密碼
hibernate.show_sqltrue 時在主控台輸出執行的 SQL,利於開發除錯;正式環境建議設為 false 提升效能

Hibernate 支援 MySQL、Oracle、Sybase 等多種資料庫,雖然多數支援標準 SQL,但各有專屬方言(如分頁語法、鎖定語法差異)。hibernate.dialect 確保生成的 SQL 相容目標資料庫。Hibernate 安裝包 etc 目錄下提供各資料庫的組態範例可供參考。

四、建立持久化類別

持久化類別是指其實例需被 Hibernate 持久化至資料庫的類別,通常對應領域模型中的實體類別。持久化類別需符合 JavaBean 規範:

  • 提供無參數的預設建構子(供 Hibernate 透過反射實例化)
  • 屬性採私有封裝,提供公開的 getXxx()/setXxx() 存取方法
  • 存取方法命名嚴格遵循規範:get/set + 屬性名首字大寫(如 name 對應 getName()/setName()),否則拋出 PropertyNotFoundException
  • boolean 型別屬性的 getter 可用 isXxx() 或 getXxx() 皆可
  • 建議實作 java.io.Serializable 介面,支援分散式環境與 HttpSession 序列化

4.1 Customer.java 完整範例

package mypack;
import java.io.Serializable;
import java.sql.Date;
import java.sql.Timestamp;

public class Customer implements Serializable {
 private Long id;
 private String name;
 private String email;
 private String password;
 private int phone;
 private boolean married;
 private String address;
 private char sex;
 private String description;
 private byte[] image;
 private Date birthday;
 private Timestamp registeredTime;

 public Customer() {}

 public Long getId() { return id; }
 public void setId(Long id) { this.id = id; }

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

 // 其餘 getter/setter 省略...
}

4.2 物件識別碼(OID)

id 屬性為物件識別碼(OID),唯一標識每個 Customer 實例。若 customerA.getId().equals(customerB.getId()) 為 true,則代表兩者對應資料表中同一筆記錄。OID 通常為整數型別,亦可使用其他型別。

4.3 關鍵設計原則:非侵入性

Customer 類別完全不依賴任何 Hibernate API,無需繼承特定基類或實作特定介面。這意味著:

  • 持久化類別可在任何 Java 環境運行(不限於 EJB 容器)
  • 未來若遷移至其他 ORM 框架(如 OJB、JPA),無需修改實體類別程式碼
  • 符合 POJO 程式設計模型,提高程式碼可測試性與可維護性

這與傳統 EJB(CMP/BMP)必須運行於 EJB 容器形成鮮明對比,也是 Hibernate 輕量級、廣受歡迎的核心原因之一。

五、本章小結與下一步

本文完整介紹了 Hibernate 的定位、組態檔建立、持久化類別設計規範與非侵入性優勢。下一章將深入探討對象關係映射文件(.hbm.xml)的撰寫細節,包含主鍵映射、屬性型別對應、集合映射等核心主題,並透過完整範例示範如何將 Customer 類別映射至 CUSTOMERS 資料表。

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