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("[email protected]");
dao.update(user);
_RootDAO.initialize()是必須的。Hibernate Synchronizer生成的持久對象是標准的Hibernate持久對象,包含一組set和get方法。DAOs負責操作持久對象,包括對session和事務管理、load和釋放對象、save或update、查詢等功能。有了DAOs,客戶代碼十分簡潔。
作者簡介:
張昱,可以通過[email protected] 與作者取得聯系。