程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> NHibernate之旅(18):初探代碼生成工具使用

NHibernate之旅(18):初探代碼生成工具使用

編輯:關於.NET

本節內容

引入

代碼生成工具

結語

引入

我們花了大量的篇幅介紹了相關NHibernate的知識,一直都是帶著大家手動編寫代碼,首先創建數據庫架構,然後編寫持久化類和映射文件,最後編寫數據操作方法,測試方法。這是典型的數據庫驅動開發(DbDD,Database-Driven Developent)技術,但是自己不是這樣做的,我先編寫持久化類和映射文件,然後偷偷的使用SchemaExport工具把數據庫生成了,按上面的步驟寫文章的,關於SchemaExport工具就是下一篇的事情了,這篇說說利用數據庫架構用代碼生成工具生成持久化類和映射文件。

所謂數據庫驅動模型是指對象模型隨著數據庫架構改變而改變,那麼我們為什麼還使用這個技術呢?有兩種原因:你的數據庫是遺留下來的系統使用的,數據庫中已經存在大量有用數據,不可以更換數據庫就將就著使用了;你的數據庫架構按照需求分析基本上確定了,不要做任何改動,在系統設計初期已經把數據庫建好了。

讓我們用一張圖片來大致展示典型的數據庫驅動開發模型。以數據庫架構為核心。

使用數據庫驅動模型流程就是當數據庫架構修改時候,映射文件和持久化類通過代碼生成工具重新生成一下。我們只要修改應用程序即可。

這裡延伸一個問題:數據庫是否需要在項目開始前設計?

如果我們進行數據庫設計,那麼就產生一系列問題:我們在面向對象領域設計持久化對象必須考慮事先設計好的數據庫表結構以及表關系,在編寫映射文件時候也要考慮,在面向對象中的繼承、多態等特性根本沒法使用。所以我不推薦在項目開始設計數據庫,大家認為如何?所以使用代碼生成工具是下下策。

代碼生成工具

顧名思義,代碼生成工具大家都使用過,有商業的CodeSmith開源的MyGeneration等,這篇我們介紹如何使用開源MyGeneration代碼生成工具根據數據庫架構生成映射文件和持久化類。如果你機器上還沒有安裝MyGeneration,請到這裡下載,然後安裝MyGeneration,安裝之後,打開MyGeneration,配置“默認設置”、打開“模板浏覽器”窗口,這些步驟如果不清楚的話請轉向NHibernate之旅(15):探索NHibernate中使用存儲過程(上)文章中吧,具體介紹了上面的步驟和方法。

再提示一下:如果你的操作系統是Windows Vista,請右擊“以管理員身份運行”MyGeneration。

這篇我們接著做:

Step1:點擊“模板浏覽器”窗口的第三個“在線更新”按鈕:來在線下載模板。

Step2:出現“在線模板庫”窗口,在“在線模板庫”中提供了各種各樣的模板,找到NHibernate節點:

Step3:展開NHibernate節點,找到“NHibernate Sharp 1.4 [sharpm64]”模板,右鍵點擊“保存”。這個模板就自動保存到本地模板文件夾中。

Step4:點擊“模板浏覽器”窗口的第一個“刷新”按鈕,這個模板就在“模板浏覽器”可以看見了,展開NHibernate節點,右擊“執行”NHibernate Sharp1.4模板。

Step5:這就是NHibernate OHM界面窗口,右面顯示表、視圖、操作標簽,在表標簽界面上,右邊有不映射、映射等按鈕,在表中不同的顏色代表字段不同的屬性。

Step6:點擊“CustomerId”列,右邊顯示了這個表,並在狀態欄顯示了“CustomerId”列的屬性:int類型、主鍵。另外可以自己摸索一下:

Step7:點擊“視圖”標簽,設置CustomerId為主鍵。

Step8:點擊“操作”標簽,我們具體設置程序集名稱和命名空間名稱,這裡我設置GenDomainModel,設置生成工程,由於這個模板不支持VS2008,所以選擇生成IDE版本為VS2005。設置輸出路徑。點擊OK按鈕。

Step9:這時打開文件夾,代碼生成工具根據數據庫架構生成了相應的持久化類和映射文件。

Step10:用VS2008打開,VS2008自動升級GenDomainModel.csproj解決方案文件,解決方案項目文件如下:

Step11:這時就可以使用了,可以把這個類庫利用添加現有項目功能添加到我們的項目中作為實體持久層,我們利用這個實體持久層編寫數據訪問層方法實現對數據庫的CRUD操作,當然在使用前要搞清楚這個項目的類庫架構,另外由於模板本身還不是很完善(例如這個模板不支持版本控制映射、不支持多對多直接映射),所以我們還需要按照實際情況去修改持久化類和映射,顯然無形中增加了一些負擔。

注意不要忘記在hibernate.cfg.xml中修改<mapping assembly="DomainModel"/>為<mapping assembly="GenDomainModel"/>。

結語

本身對於代碼生成工具的使用很簡單的,就是下一步下一步的按,這節就是多圖展示一下怎麼快速使用代碼生成工具,在MyGeneration中還有很多模板用於生成NHibernate的持久化類和映射文件,每個模板都有自己的缺點和優點,生成不同的結構,這在於大家去發現了~~但是我發現還是自己手寫代碼才是霸道!思路清晰,代碼簡單!

至今不明白這個問題:代碼生成工具到底給誰用的?新手?老鳥?唯一的好處就是快?不用寫代碼。但是你知道它生成的架構嗎?它的思路嗎?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved