本文為系列第三篇,聚焦 Hibernate 核心機制、映射驅動開發、工具鏈、適用場景判斷與遷移實戰。(系列前兩篇分別介紹 Struts/Swing 與 Spring,此處不贅述。)
.hbm.xml 或註解 (@Entity/@Table 等) 定義 對象-關係映射;session.save(entity)、session.createQuery("from User")、修改後 session.flush() 自動同步;| 模式 | 輸入 | 產出 | 適用階段 |
|---|---|---|---|
| 正向工程 | 實體類 + 映射 | DDL (建表/修表) | 綠地專案、領域驅動設計 |
| 反向工程 | 現有資料庫 | 映射文檔 + 實體類 | 棕地專案、遷移重構 |
| 圖形化設計 | Eclipse 外掛 | 映射文檔 | 團隊協作、複雜關聯維護 |
| 場景特徵 | 推薦方案 | 核心理由 |
|---|---|---|
| 極簡 Key-Value 存儲 (偏好設定等) | Java Preferences API / Redis | 無需關係型資料庫、ORM 過重 |
| 團隊精通 SQL、有強 DBA、大量存儲過程、極致性能調優 | iBATIS / MyBatis | SQL 為中心,手寫 SQL 靈活可控 |
| 企業強制 EJB / 特殊持久化規範 (XML DTD 等) | 遵循企業標準 | 外部約束優先 |
| 豐富領域模型、繼承/關聯複雜、需跨資料庫、重生產力 | Hibernate (首選) | 自動化映射、緩存、延遲加載、方言屏蔽差異 |
fetch="join" / HQL LEFT JOIN FETCH / @BatchSize;session.merge() / session.update() / 長會話模式;Dialect 擴展;公司專案因廠商變更被迫 MySQL → Oracle 遷移,僅修改 hibernate.cfg.xml:
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="connection.url">jdbc:oracle:thin:@host:1521:sid</property>
<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
業務代碼、映射文檔、查詢邏輯完全無修改,驗證 Hibernate 「屏蔽資料庫差異」的核心承諾。
Hibernate 非銀彈,但對「豐富領域模型 + 關係型資料庫」是最高性價比選擇。掌握映射機制、緩存策略、查詢優化三大核心,即可駕馭 90% 場景。