Java 持久化技術歷經多代演進,形成豐富的技術棧。本文梳理四大主流流派脈絡,分析優劣與適用場景,提供架構選型參考。
統一了資料庫存取介面,獲得幾乎所有廠商支援。核心價值:標準 SQL + 標準介面 = 資料庫可移植性,呼應「Compile Once, Run Everywhere」。
演進:1.0/1.1(極度複雜)→ 2.0(本地介面、EJB QL、關係映射)→ 3.0(JPA 統一、POJO 化、註解驅動)。
核心貢獻:完全 OO 支援(繼承、多型)、無需容器、類別增強而非繼承、Schema 自動生成(Class 即 Schema)。
| 場景特徵 | 推薦技術 | 核心理由 |
|---|---|---|
| 關聯式報表、統計、批次、SQL 導向 | JDBC / Spring JdbcTemplate / MyBatis | 直接掌控 SQL、效能可預測、無物件映射開銷 |
| 領域模型豐富、繼承/多型、圖狀物件圖 | JPA (Hibernate/EclipseLink) / JDO | 透明持久化、OO 映射、快取、延遲載入 |
| 需宣告式分散式交易、高可用叢集、嚴格安全 | EJB 3.0+ (JPA) / Spring + JTA | 容器管理交易/安全/生命週期、叢集透明 |
| 輕量微服務、快速開發、團隊熟悉度高 | Spring Data JPA / MyBatis-Plus / JDBI | 生態成熟、學習曲線平緩、雲原生友善 |
| 非關聯資料、文件/圖/鍵值儲存 | JDO / Spring Data MongoDB/Redis/Neo4j | 統一存取抽象、多模型支援 |
「沒有最好的技術,只有最合適的技術。」選型依據:團隊能力、專案規模、效能需求、維護週期、技術債容忍度。避免為了技術而技術,持久化層應對業務層隱藏實作細節,保留遷移彈性。
1997 JDBC 1.0 Java 資料庫連線標準誕生 1999 EJB 1.0 企業級組件規範,Entity Bean 登場 2001 Hibernate 1.0 Gavin King 開源 O/R 映射框架 2002 JDO 1.0 物件持久化標準化嘗試 2003 EJB 2.1 / JDO 1.0.1 並行發展,各有陣營 2006 EJB 3.0 (JPA 1.0) 統一持久化 API,POJO 化 2009 JPA 2.0 Criteria API、驗證、鎖定 2013 JPA 2.1 標準化 Schema 生成、轉換器 2017 JPA 2.2 / Java EE 8 Java EE 移交 Eclipse 基金會 2020+ Jakarta EE 9/10 命名空間 javax→jakarta,持續演進