Hibernate Synchronizer 是 Eclipse 上知名的 Hibernate 程式碼產生外掛,能從資料庫 Schema 反向產生 *.hbm.xml 對應檔、持久化實體類別與 DAO 介面/實作,並支援雙向同步與客製化模板。本文詳述安裝配置、核心功能、產出架構分析與實際使用範例。
hibernate.cfg.xml*.hbm.xml*.hbm.xml 產生持久化類別(Value Object)與 DAOhttps://www.binamics.com/hibernatesync(Eclipse 3.x 適用)。*.hbm.xml。hibernate.cfg.xml。以範例資料庫兩張表 T_Order、T_User(一對多關聯)為例,預設產出結構:
_BaseRootDAO、_BaseTUserDAO、_BaseTOrderDAO 等。BaseTUser、BaseTOrder):含 Hibernate 欄位對應、getter/setter,同步時覆蓋。TUser、TOrder):繼承基類,供客製商務邏輯,同步不覆蓋。
_BaseRootDAO (abstract) ← 封裝通用 Hibernate 操作
↑
_RootDAO (abstract) ← 專案層級通用擴展點
↑
BaseTUserDAO / BaseTOrderDAO ← 實體專用 DAO 抽象類
↑
TUserDAO / TOrderDAO ← 開發者實作類(空實作)
BaseTUser (abstract) ← 欄位對應、getter/setter
↑
TUser ← 客製邏輯擴展
「基類/實作類分離」模式完美解決程式碼產生器覆蓋客製代碼的經典難題,實現生成代碼與業務代碼零耦合。
// 1. 初始化 RootDAO(必須,建立 SessionFactory)
_RootDAO.initialize();
// 2. 取得 DAO 實例
TUserDAO dao = new TUserDAO(); // 實際型別為具體實作類
// 3. 載入實體
TUser user = dao.load("zhangyu");
// 4. 修改持久化物件(自動 dirty checking)
user.setMail("e-zhangyu@vip.sina.com");
// 5. 更新回資料庫
dao.update(user); // 內部處理 Session/Transaction
_RootDAO.initialize():啟動時呼叫一次,建立單例 SessionFactory。Session 開關、交易控制、查詢、儲存/更新/刪除,業務代碼極度精簡。templates/ 目錄覆蓋預設 Velocity 模板,可統一加入 Lombok 註解、Builder 模式等。dao/、vo/(具體類)、hbm/ 納入版控;base/ 由建置腳本重新產生。lazy="true"、batch-size、cache usage="read-write" 等。Hibernate Synchronizer 以「基類/實作類分離」架構,優雅解決代碼產生器最大痛點,配合視覺化 HBM 編輯器與雙向同步,使 Hibernate 專案從 Schema 到程式碼的開發週期大幅縮短。適合採用 Database-First 或 Model-First 流程的中小型專案;大型專案建議搭配 Maven + Hibernate Tools 進行建置整合。