代碼自動生成工具MyGeneration之一(程序員必備工具)

 

MyGeneration的官方網站:http://www.mygenerationsoftware.com/portal/default.aspx 上面有下載的鏈接地址 迅雷下載:http://software-files.cnet.com/sd/iJ8ZHSAG_IgvAvcTLoghUiT_nvXbHZg_B7gvY6hAqo6Y4pTF_9uueKgwehd6vBwoGN8-_usKiIBfOV7YuG0eqvekGtZa49MD/software/10783348/10343918/3/mygeneration_1303.exe?lop=link&ptype=1901&ontid=10250&siteId=4&edId=3&spi=d1cb4b8d1d2bdfd275dd67b01fabca33&pid=10783348&psid=10343918

 前段時間用C#做網站,用到了大量數據庫相關的東西。網站採用3層結構,即數據訪問層(Data Access Layer),業務邏輯層(Business Logic Layer),頁面表現層().做了一段時間,發現向數據訪問層和業務邏輯層加入新的類,數據庫的表結構改了,還要對應的修改數據訪問層和業務邏輯層的代碼,這個工作很是繁瑣,無聊,而且容易出錯。做了幾次之後就想有什麼辦法可以讓機器自動完成呢?

  聯想到以前看過Java似乎有個Hibernate,可以很方便的實現對象關係映射(ORM),即自動的從數據庫的表生成對應的對象,.Net也應該有類似的功能吧。於是找啊找,發現了很多.Net的ORM工具,不過都有缺點,就是代碼得依賴於那些ORM工具,我希望能夠讓機器按我的要求生成我自己的代碼,這樣就更加靈活了。

  於是乎,發現了CodeSmith和MyGeneration,CodeSmith是 網上傳的.NET 程序員十種必備工具之一,我們寫代碼時,經常需要重複完成某些特定的任務,例如編寫數據訪問代碼或者生成自定義集合。我們可以用CodeSmith編寫模板自動完成這些任務,從而不僅提高工作效率,而且能夠自動完成那些最爲乏味的任務。可惜,CodeSmith是需要註冊的,試用版只能用15天。而MyGeneration基本上和CodeSmith的功能差不多哦,但是他是開源的。我選軟件的原則是能開源免費的就用,實在沒替代了才選那些需要註冊的,有版權的軟件。所以就選MyGeneration了。

  用過一段時間後感覺MyGeneration主要是爲了自動生成數據庫相關的代碼的,可能C#用得比較多,其實我們可以用它生成任何代碼,C++,JavaScript...而且還不僅僅侷限於數據庫,其他方面的代碼也可以用MyGeneration自動生成。比如我們經常用數據訪問層和業務邏輯層,用MyGeneration就可以自動生成這些代碼,我們可以不用手動寫代碼了。比如數據訪問層,我們需要調用一個存儲過程,用MyGeneration我們只需要選擇生成存儲過程代碼的模板,執行一下腳本,然後在界面上選擇數據庫上某個存儲過程,然後就自動生成了數據庫訪問代碼,整個過程只需要點幾下鼠標,代碼就自動生成了。這對於需要大量操作數據庫的程序員來說,效率是多大的提升啊。

  廢話少說,還是來點實在的吧。首先聲明,我的MyGeneration版本是:1.3.0.3

  安裝完MyGeneration後,第一次啓動會要求進行一些數據庫相關的配置。如圖:

 

  ConnectionString: 就是指定連接哪個數據庫了,填好這個就可以點確定了。

  下面來看一看其他的項都是什麼。

  Language Mapping:就是指定數據庫和對象基本類型的映射關係。讓我們打開Languages.xml文件看一下吧:

    <Language From="SQL" To="C#">
        <Type From="bigint" To="long" />
        <Type From="binary" To="object" />
        <Type From="bit" To="bool" />
        <Type From="char" To="string" />
        <Type From="datetime" To="DateTime" />
        <Type From="decimal" To="decimal" />
        <Type From="float" To="double" />
        <Type From="image" To="byte[]" />
        <Type From="int" To="int" />
        <Type From="money" To="decimal" />
        <Type From="nchar" To="string" />
        <Type From="ntext" To="string" />
        <Type From="numeric" To="decimal" />
        <Type From="nvarchar" To="string" />
        <Type From="real" To="float" />
        <Type From="smalldatetime" To="DateTime" />
        <Type From="smallint" To="short" />
        <Type From="smallmoney" To="decimal" />
        <Type From="text" To="string" />
        <Type From="timestamp" To="byte[]" />
        <Type From="tinyint" To="byte" />
        <Type From="uniqueidentifier" To="Guid" />
        <Type From="varbinary" To="byte[]" />
        <Type From="varchar" To="string" />
        <Type From="xml" To="string" />
        <Type From="sql_variant" To="object" />
    </Language>
  這是裏面的一段內容,很明顯,是數據庫SQL的字段轉到C#是什麼類型,裏面沒有C++的,假如我們要讓它支持C++的話,需要在這裏加入SQL到C++的類型轉換。
  Database Target Mapping:先看裏面的內容吧:

    <DbTarget From="ACCESS" To="DAO">
        <Type From="Text" To="DAO.dbText" />
        <Type From="Memo" To="DAO.dbMemo" />
        <Type From="DateTime" To="DAO.dbDate" />
        <Type From="Currency" To="DAO.dbCurrency" />
        <Type From="Yes/No" To="DAO.dbBoolean" />
        <Type From="OLE Object" To="DAO.dbLongBinary" />
        <Type From="Hyperlink" To="DAO.dbMemo" />
        <Type From="Double" To="DAO.dbDouble" />
        <Type From="Replication ID" To="DAO.dbGUID" />
        <Type From="Long" To="DAO.dbLong" />
        <Type From="Single" To="DAO.dbSingle" />
        <Type From="Decimal" To="DAO.dbDecimal" />
        <Type From="Byte" To="DAO.dbByte" />
        <Type From="Integer" To="DAO.dbInteger" />
    </DbTarget>
  呵呵,一目瞭然,就是Access數據庫用DAO的方式訪問,數據庫的列的類型對應的DAO裏是什麼類型。

  UseMetaData目前沒什麼用。

  看看MyGeneration的界面吧:

    

   Template Browser 面板 列出了一些模板,這是自動生成代碼需要用到的模板。安裝的時候會自己帶很多模板。

   MyMeta Browser則列出了當前連接的數據庫上有些什麼庫,表,存儲過程。

   工作區則是具體模板對應的代碼。

  先讓我們體驗一下吧。

   展開Template Browser面板下"d00dads - C#", 雙擊 “d00dads - Invoke a Stored Procedure", 讓工作區顯示其內容,

然後點擊工具欄上的 "Execute" 按鈕,如圖紅框所示:

 

  彈出對話框。 

  選擇數據庫,存儲過程,存儲過程類型,點確定(OK)。 

  然後可以看到工作區 Output 裏輸出了代碼了。例如:

  這就是MyGeneration自動獲取了存儲過程的輸入參數,然後在代碼裏構造相應的參數,然後生成的代碼。
  這只是MyGeneration自帶的模板生成的,大家可以試一試其他的模板的效果。
  裏面有自動根據表結構生成BLL的類......看下效果:

    這就是自動獲得表結構,然後從字段映射成類裏面的成員,並且還有一些插入,更新,刪除的代碼。

   當然自帶的模板生成的代碼不一定符合我們的需要,但是我們可以根據需要自己寫一些模板來生成符合自己需要的代碼,這也是非常容易的事

發佈了79 篇原創文章 · 獲贊 14 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章