這個系統很久沒有更新了,人也慢慢變懶了,從如今開始每月至少寫三篇文章,歡迎你們監督。對了預告一下,該系列完成之後將爲你們帶來WebApp開發系列篇,敬請期待。先上幾張圖,放在文章最後面歡迎預覽!html
本章開始將會爲你們講解NVelocity的用法,並帶領你們實現一個簡單的代碼生成器。數據庫
NVelocity的基礎知識請參考上篇文章NVelocity語法介紹c#
閱讀目錄ide
實現一款簡單的代碼生成器,須要先定義好代碼結構。這裏僅生成三層模式中的實體層,後續複雜結構代碼生成你們能夠本身動手寫一下。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; } } }
二、從數據庫中讀取全部表和表的相關信息
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
你們能夠看下上面的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羣。
更多數據字典生成工具資料請點擊數據字典生成工具專題。