接上文:http://www.linuxidc.com/Linux/2011-10/44812.htm
EMF實際上定義了2種meta model,分別稱為Ecore和Genmodel。Ecore包含了模型的定義,我們在創建EMF模型的時候,也是通過新建和編輯Ecore文件來進行。Genmodel包含了自動生成Java代碼(模型的POJO類)的信息,比如怎樣生成POJO,生成的POJO放到哪裡。當對Ecore進行修改時,Genmodel自動獲得更新。
創建一個EMF項目(或者plugin項目也可),然後建立一個Ecore模型。
打開Properties視圖,自行定義model的名稱,namespace prefix,以及namespace url。
右鍵點擊新建好的csdn模型,添加child。
child有5種支持類型。
EAnnotation是與Teneo結合,用作和hibernate以及數據庫schema之間的mapping;
EClass是指模型裡面的一個類;
EData Type代表數據的類型,比如int,float,或者java.util.Date
筆者創建了一個叫Blog的EClass,通過Properties視圖可以修改這個EClass的屬性,通過右擊Blog,可以添加新的child或者sibling。
其中EReference是一個指向其他EClass的鏈接,比如可以用來定義Blog類中包含的類成員變量,或者可以理解為數據庫中的foreign key。
在Ecore創建完成後,新建一個genmodel (EMF Generator Model),在“New EMF Generator Model”這一步選擇Ecore model
選擇剛才建立的csdn.ecore,然後點擊Load
點擊Finish後,genmodel生成完畢。
在Properties視圖中可以配置genmodel,比如Base Package可以定義將生成的代碼放到哪個路徑底下。
右擊生成的genmodel,可以選擇生成各種代碼,其中“Generate Model Code”會生成模型類和其他相關Java類。
生成的Java代碼分為3個包,model.csdn,model.csdn.impl,model.csdn.util。
model包裡面主要有所有EClass的接口文件(所有接口均繼承自EObject,因此所有的EClass都是EObject的子類),以及非常重要的Factory文件(用來創建EClass文件的實例,Factory類的eInstance.createXXX()方法是創建實例的唯一方法);
model.impl包裡面主要是model包中接口文件的具體類;
model.util包裡面有AdapterFactory。