Hibernate是一個開放原始碼的O/R Mapping (對象關係映射架構),它對JDBC進行了輕量級的對象封裝,使Java程式員可以使用對象編程思維來操縱資料庫。
Hibernate Synchronizer是一個Eclipse外掛程式,可以自動產生*.hbm檔案、持久化類和DAOs。瞭解Hibernate Synchronizer外掛程式的詳細資料可以訪問:http://www.binamics.com/hibernatesync/ 。
一、Hibernate Synchronizer的功能包括:
l 通過一個嚮導配置並產生Hibernate Configuration File;
l 通過一個嚮導同步產生資料庫表的*.hbm檔案;
l 通過*.hbm檔案同步產生Hibernate持久化類和DAOs;
l 提供Hibernate Synchronizer editor編輯*.hbm檔案;
l 用一種叫做Velocity的語言定製個人化的代碼和資源產生模板(通常沒有必要);
二、使用Hibernate Synchronizer外掛程式的步驟:
1、 通過Eclipse的軟體更新功能安裝外掛程式(Eclipse 3.X的外掛程式更新網址:: http://www.binamics.com/hibernatesync);
2、 配置外掛程式的屬性。可以分別在工作台層級和項目層級配置。通常使用預設值。可配置的項目包括:
l 修改並儲存hbm時是否自動更新值對象(value object);
l 是否自動產生DAOs或值對象(value object);
l 配置產生DAOs和值對象(value object)時的包名。
3、 通過外掛程式產生Hibernate Configuration File;
4、 通過外掛程式產生*.hbm (Hibernate Mapping File)檔案;
5、 必要時用外掛程式提供的Editor編輯*.hbm檔案;
6、 通過外掛程式把重新設定Hibernate Configuration File的mapping resource;
7、 通過*.hbm同步產生DAOs和值對象(value object);
三、淺析Hibernate Synchronizer外掛程式產生的程式碼。
在這個例子中,使用Hibernate Synchronizer外掛程式同步了資料庫中的兩個表:T_Order和T_User。T_User和T_Order是一對多的關係。
在預設設定的情況下,外掛程式產生的包圖如下:
base包中存放外掛程式產生的五個抽象類別,在Hibernate Synchronizer“再同步”時會覆蓋base包中的類,因此使用者不要把客戶代碼放在base中的類裡。換句話說,任何時候不要修改這些類。
dao包中存放的三個類,分別繼承自base包中相應的三個類。dao包中的三個類完全是空的實現,客戶可以在這裡插入自己的代碼。採用這樣的結構,就把客戶代碼從外掛程式產生的程式碼中分離出來,即實現了客戶對外掛程式產生代碼的定製,又不會在外掛程式“再同步”時影響到客戶代碼。
在預設設定的情況下,外掛程式產生的類圖如下:
左邊的六個類是DAOs,右邊的四個類是持久類。
所有的DAOs繼承自_BaseRootDAO,這個抽象類別封裝了公用的Hibernate操作方法。抽象類別_RootDAO直接繼承自_BaseRootDAO,客戶可以在這裡對_BaseRootDAO進行定製,把公用層級的Hibernate操作放在這裡。_BaseRootDAO下級的Base…DAO是持久類的DAO,它仍然是抽象類別,目的是讓它的子類實現定製的方法。
所有的值對象(value object)都分為兩個層次,抽象的基類(如BaseTOrder、BaseTUser)和實作類別(TOrder、TUser)。抽象層次包含Hibernate Synchronizer外掛程式產生的持久類,實現層次可以包含客戶的定製代碼。
四、使用Hibernate Synchronizer外掛程式產生的程式碼。
在自己的代碼中使用Hibernate Synchronizer產生的程式碼非常簡單。
_RootDAO.initialize();
TUserDAO dao = new UserDAO();
TUser user = dao.load("zhangyu");
user.setMail(e-zhangyu@vip.sina.com);
dao.update(user);
_RootDAO.initialize()是必須的。Hibernate Synchronizer產生的持久對象是標準的Hibernate持久對象,包含一組set和get方法。DAOs負責操作持久對象,包括對session和交易管理、load和釋放對象、save或update、查詢等功能。有了DAOs,客戶代碼十分簡潔。