數據字典生成工具之旅(7):NVelocity實現代碼生成器

      這個系統很久沒有更新了,人也慢慢變懶了,從如今開始每月至少寫三篇文章,歡迎你們監督。對了預告一下,該系列完成之後將爲你們帶來WebApp開發系列篇,敬請期待。先上幾張圖,放在文章最後面歡迎預覽!html

     本章開始將會爲你們講解NVelocity的用法,並帶領你們實現一個簡單的代碼生成器。數據庫

  NVelocity的基礎知識請參考上篇文章NVelocity語法介紹c#

閱讀目錄ide

NVelocity實現代碼生成器

    實現一款簡單的代碼生成器,須要先定義好代碼結構。這裏僅生成三層模式中的實體層,後續複雜結構代碼生成你們能夠本身動手寫一下。svn

    一、 模版定義工具

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Mysoft.Code.Entity
{
    #foreach($p in $T.Rows)##
         #if($velocityCount==1)##
         ///<summary>$p.get_item("table_name_c")</summary>
         public class  $p.get_item("table_name")
        {
        #end
       
       ///<summary>#if($p.get_item("field_name_c")!="")$p.get_item("field_name_c") #else $p.get_item("field_name") #end</summary>
       public#if($p.get_item("date_type")=="bigint") double#else string#end $p.get_item("field_name")
       {
	   get;
	   set;
        }
    #end
   }   
}

   能夠看到模版很簡單,最終生成的代碼相似下面學習

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Mysoft.Code.Entity
{
        ///<summary>階段設置表</summary>
    public class  Pack_Stage
    {
           
       ///<summary>更新包GUID </summary>
       public string StageGUID
       {
            get;
            set;
       }
                  
       ///<summary>更新包名稱 </summary>
       public string StageName
       {
            get;
            set;
       }
                  
       ///<summary>階段序號 </summary>
       public string OrderNo
       {
            get;
            set;
       }
                  
       ///<summary>是否開始合併包 </summary>
       public string IsHBPackage
       {
            get;
            set;
       }
       }   
}
View Code

 

二、從數據庫中讀取全部表和表的相關信息
    SQL Sever的內置表和視圖提供了許多有用信息,好比查詢全部的用戶表和表列信息說明。ui

    sys.tables:用戶表相關信息spa

    sys.extended_properties:表的和列的相關描述信息3d

 SELECT  T.name AS table_name ,T.OBJECT_ID,
        ISNULL(CONVERT(VARCHAR(MAX), E.value), '') AS table_name_c ,
        C.name AS field_name ,
        ISNULL(CONVERT(VARCHAR(MAX), D.value), '') AS field_name_c ,
        ROW_NUMBER() OVER(PARTITION BY T.name ORDER BY C.colid) AS field_sequence ,
        TYPE_NAME(C.xtype) AS date_type ,
        (CASE WHEN EXISTS ( SELECT   1
                           FROM     sysobjects
                           WHERE    xtype = 'PK'
                                    AND name IN (
                                    SELECT  name
                                    FROM    sysindexes
                                    WHERE   id = C.id
                                            AND indid IN (
                                            SELECT  indid
                                            FROM    sysindexkeys
                                            WHERE   id = C.id
                                                    AND colid = C.colid ) ) )
             THEN 1
             ELSE 0
        END) AS pk ,
        ISNULL(C.isnullable, 1) AS isnullable ,
        ISNULL(COLUMNPROPERTY(c.id, c.name, 'IsIdentity'), 0) AS isidentity
FROM   sys.tables AS T
        LEFT JOIN syscolumns AS C ON c.id = T.object_id
        LEFT JOIN sys.extended_properties AS D ON D.major_id = T.object_id
                                                  AND D.minor_id = C.colid
                                                  AND D.major_id = C.id
        LEFT JOIN sys.extended_properties AS E ON E.major_id = T.object_id
                                                  AND E.minor_id = 0
View Code

   你們能夠看下上面的SQL,基本上把表的相關信息都查詢出來了,下章將着重講解這個知識點。


 三、代碼生成

    有了模版和數據源就能夠生成最終代碼了,有不懂的能夠參考上篇,這裏上最終效果圖。你們能夠下載示例代碼自行查看。

  

 

    本章例子下載

本章總結

     整個代碼生成器作起來仍是不困難的,前臺界面搭建用到了最近比較流行的miniui,有興趣的本身能夠下載研究。實例中代碼文件輸出路徑和數據庫連接配置在了Web.Config中使用者可自行修改。

  另外開發過程當中遇到的幾個問題也分享一下:

     1.NVelocity中如何使用DataTable作爲數據源

       #foreach($p in $T.Rows)

          ($p.get_item("date_type")
       #end

     2.DataTable進行數據過濾

              DataView dv = dt.DefaultView;
              dv.RowFilter = "tableid='" + id + "'";
              DataTable dt2 = dv.ToTable();

   好了本章內容就這麼多了,但願讀完對你有所幫助!

新系列文章圖片預覽

   
     
     

 

工具源代碼下載

      目前總共有通過了七個版本的升級,如今提供最新版本的下載地址

數據字典生成工具V2.0安裝程序 最新安裝程序
數據字典生成工具源代碼 最新源代碼
http://code.taobao.org/svn/DataDicPub SVN最新源碼共享地址

學習使用

      若是你使用了該工具,或者想學習該工具,歡迎加入這個小組,一塊兒討論數據字典生成工具、把該工具作的更強,更方便使用,一塊兒加入147425783 QQ羣

      更多數據字典生成工具資料請點擊數據字典生成工具專題

相關文章
相關標籤/搜索