您的位置:首页 > 编程语言

数据字典生成工具之旅(7):NVelocity实现代码生成器

2015-03-16 16:08 483 查看
这个系统好久没有更新了,人也慢慢变懒了,从现在开始每个月至少写三篇文章,欢迎大家监督。对了预告一下,该系列完成以后将为大家带来WebApp开发系列篇,敬请期待。先上几张图,放在文章最后面欢迎预览!

本章开始将会为大家讲解NVelocity的用法,并带领大家实现一个简单的代码生成器。

  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
}
}


可以看到模版很简单,最终生成的代码类似下面

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/DataDicPubSVN最新源码共享地址
回到顶部

学习使用

如果你使用了该工具,或者想学习该工具,欢迎加入这个小组,一起讨论数据字典生成工具、把该工具做的更强,更方便使用,一起加入147425783 QQ群

更多数据字典生成工具资料请点击数据字典生成工具专题

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。

如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我

因为,我的写作热情也离不开您的肯定支持。

感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是焰尾迭 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: