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


      這個系統好久沒有更新了,人也慢慢變懶了,從現在開始每個月至少寫三篇文章,歡迎大家監督。對了預告一下,該系列完成以后將為大家帶來WebApp開發系列篇,敬請期待。先上幾張圖,放在文章最后面歡迎預覽!

     本章開始將會為大家講解NVelocity的用法,並帶領大家實現一個簡單的代碼生成器。

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

閱讀目錄

NVelocity實現代碼生成器

    實現一款簡單的代碼生成器,需要先定義好代碼結構。這里僅生成三層模式中的實體層,后續復雜結構代碼生成大家可以自己動手寫一下。

    1、 模版定義

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

 

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

    sys.tables:用戶表相關信息

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

 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,基本上把表的相關信息都查詢出來了,下章將着重講解這個知識點。


 3、代碼生成

    有了模版和數據源就可以生成最終代碼了,有不懂的可以參考上篇,這里上最終效果圖。大家可以下載示例代碼自行查看。

  

 

    本章例子下載

本章總結

     整個代碼生成器做起來還是不困難的,前台界面搭建用到了最近比較流行的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群

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM