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

时间:2023-01-05 11:43:34

这个系统好久没有更新了,人也慢慢变懒了,从现在开始每个月至少写三篇文章,欢迎大家监督。对了预告一下,该系列完成以后将为大家带来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;
}
}
}

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

大家可以看下上面的SQL,基本上把表的相关信息都查询出来了,下章将着重讲解这个知识点。

 3、代码生成

    有了模版和数据源就可以生成最终代码了,有不懂的可以参考上篇,这里上最终效果图。大家可以下载示例代码自行查看。

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

    本章例子下载

本章总结

整个代码生成器做起来还是不困难的,前台界面搭建用到了最近比较流行的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();

好了本章内容就这么多了,希望读完对你有所帮助!

新系列文章图片预览

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

 

工具源代码下载

目前总共有经过了七个版本的升级,现在提供最新版本的下载地址

数据字典生成工具V2.0安装程序 最新安装程序
数据字典生成工具源代码 最新源代码
http://code.taobao.org/svn/DataDicPub SVN最新源码共享地址

学习使用

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

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

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我

如果,想给予我更多的鼓励,求打

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

感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是焰尾迭 。

数据字典生成工具之旅(7):NVelocity实现代码生成器的更多相关文章

  1. 数据字典生成工具之旅&lpar;6&rpar;:NVelocity语法介绍及实例

    本章开始将会为大家讲解NVelocity的用法,并带领大家实现一个简单的代码生成器. NVelocity是一个基于.NET的模板引擎(template engine).它允许任何人仅仅简单的使用模板语 ...

  2. 数据字典生成工具之旅&lpar;5&rpar;:DocX组件读取与写入Word

    由于上周工作比较繁忙,所以这篇文章等了这么久才写(预告一下,下一个章节正式进入NVelocity篇,到时会讲解怎么使用NVelocity做一款简易的代码生成器,敬请期待!),好了正式进入本篇内容. 这 ...

  3. 数据字典生成工具之旅&lpar;3&rpar;:PowerDesign文件组成结构介绍及操作

    从这篇开始将正式讲解整个重要部分的实现细节,本篇讲解Pdm文件的解析.其实PDM文件就是XML文件,可以用Editplus或者VS打开查看.了解到这一点之后大家就能猜到,可以用解析XML的方式读取PD ...

  4. 数据字典生成工具之旅&lpar;4&rpar;:NPOI操作EXECL

    这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...

  5. 数据字典生成工具之旅&lpar;8&rpar;:SQL查询表的约束默认值等信息

    上一篇代码生成工具里面已经用到了读取表结构的SQL,这篇将更加详细的介绍SQL SERVER常用的几张系统表和视图! 阅读目录 系统表视图介绍 实际应用 本章总结 工具源代码下载 学习使用 回到顶部 ...

  6. 数据字典生成工具(生成Excel&comma; Word&comma;PDF&comma;html)

    转自:http://www.cnblogs.com/yanweidie/p/3838765.html 数据字典生成工具之旅系列文章导航 数据字典生成工具之旅系列文章导航 宣传语 数据字典生成工具.数据 ...

  7. 【C&num;附源码】数据库文档生成工具支持(Excel&plus;Html)

    [2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...

  8. 微软开源全新的文档生成工具DocFX

    微软放弃Sandcastle有些年头了,微软最近开源了全新的文档生成工具DocFX,目前支持C#和VB,类似JSDoc或Sphinx,可以从源代码中提取注释生成文档之外,而且还有语法支持你加入其他的文 ...

  9. css sprite,css雪碧图生成工具V3&period;0更新

    V3.0主要改进 1.增加了单独添加单张图片以及删除单张图片的功能 2.增加了生成.sprite文件用以保存雪碧图信息 3.增加了打开.sprite文件功能 什么是css sprite CSS spr ...

随机推荐

  1. ASP&period;NET Core 中文文档 第四章 MVC(3&period;1)视图概述

    原文:Views Overview 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩(Jack) ASP.NET MVC Core 的控制器可以利用 视图 返回格式化结果. 什么 ...

  2. webstorm&plus;react&plus;webpack-demo

    序言:通过这个小例子你也许.大概.可能会掌握以下几点 1.webstorm如何使用命令行 2.如何使用webpack的loaders把json格式的文件转化为javascript文件 3.如何使用不同 ...

  3. http&colon;&sol;&sol;linuxme&period;blog&period;51cto&period;com&sol;1850814&sol;372960

    http://linuxme.blog.51cto.com/1850814/372960 http://os.51cto.com/art/201404/435129.htm

  4. 抽奖随机算法的技术探讨与C&num;实现

    一.模拟客户需求 1.1 客户A需求:要求每次都按照下图的概率随机,数量不限,每个用户只能抽一次,抽奖结果的分布与抽奖概率近似. 1.2 客户B需求:固定奖项10个,抽奖次数不限,每个用户只能抽一次, ...

  5. Configuring My Site in SharePoint 2010

    Configuring the User Profile Service in SharePoint 2010 http://sharepointgeorge.com/2010/configuring ...

  6. 进程环境之main函数

    C程序总是从main函数开始执行.main函数的原型是: int main( int argc, char *argv[] ); 其中,argc是命令行参数的数目,argv是指向参数的各个指针所构成的 ...

  7. IOS SDK相机的详细解释&sol;画廊(默认+他们的高清摄像头接口)

    原版的blog,转载请注明出处 blog.csdn.net/hello_hwc 前言: 新NSURLSession的UploadTask的,结果写那个Demo的时候想要写成拍照上传.然后就想到先写一个 ...

  8. CSS简介模块

    CSS3完全向后兼容. 选择器 盒模型 背景和边框 文字和特效 2D.3D特效 动画 多列布局 用户界面 今天先做个开始,今后每一天学习一点点.

  9. HDU 2732 Leapin&&num;39&semi; Lizards

    网络最大流+拆点.输出有坑!!! #include<cstdio> #include<cstring> #include<string> #include<c ...

  10. 用户不在 sudoers 文件中,此事将被报告

    在使用Linux系统过程中,通常情况下,我们都会使用普通用户进行日常操作,而root用户只有在权限分配及系统设置时才会使用,而root用户的密码也不可能公开.普通用户执行到系统程序时,需要临时提升权限 ...