强大的代码生成工具MyGeneration

MyGeneration是一个功能很强大的代码生成工具。通过编写包含各种类型脚本(C#,VB.Net,JScript,VBScript)的模板,通过数据库的表内容,生成你需要的各种代码。你可以用它来生成ORM的实体类,存储过程,SQL语句等等。我甚至用它来生成Asp.Net的页面(呵呵,我很懒)。

MyGeneration提供了强大的在线模版库,你可以通过访问其网站或者使用Template
Browser中的在线模版功能按钮寻找你需要的模版。当然你也可以根据需要自己写模板。

我的NHibernate模板已经公布,并写了个随笔专门介绍它。详见“用我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many) ”。

你可以从这里下载它的最新版本。

重要组件介绍

它由几个重要的外部组件组成,其中常用的有以下两个

MyMeta包含数据库中的信息。我们可以从这个库中获得想要的和数据库相关的信息。例如:数据库名,数据库里面的表,表里面的主键等等。

Zeus为MyGeneration提供了一个的框架,里面最常用的就是一组对WinFrom组件封装后的一套组件,通过这套组件我们可以动态的生成我们需要的界面(我们可以在这个界面中让模版使用者选择使用的参数),然后界面里面的信息可以为生成模版服务。

工作原理分析

MyGeneration的支持用多种脚本模式,其工作原理是一致的,只是通过不同的语言来表达。

我最常用的是C#
Template。Template分为两个步骤运行,首先是通过脚本引擎执行Template Code和Interface Code中的脚本,生成Template
Source和Interface Source的C#代码,然后执行Template Source,生成需要的代码。如下图

Template Code模版简介

C# Template Code的语法和Asp的语法十分的类似(注意Source是不能写代码的,那是根据你的Code生成的)。

<%=%>表示绑定某一个字段或属性。

<%%>表示脚本段,我们可以在这里写符合C#语法的任何语句。

其他的内容不进行解析。直接用output写到最后的结果里。

一般C#脚本会从DotNetScriptTemplate继承,DotNetScriptTemplate里面在Template
Source里面可以看到他是从_DotNetScriptTemplate继承而来。Interface也类似。


 1 public abstract class DotNetScriptTemplate : _DotNetScriptTemplate
2 {
3 protected Zeus.UserInterface.GuiController ui;
4 protected MyMeta.dbRoot MyMeta;
5 protected Dnp.Utils.Utils DnpUtils;
6 public DotNetScriptTemplate(IZeusContext context) : base(context)
7 {
8 this.ui = context.Objects["ui"] as Zeus.UserInterface.GuiController;
9 this.MyMeta = context.Objects["MyMeta"] as MyMeta.dbRoot;
10 this.DnpUtils = context.Objects["DnpUtils"] as Dnp.Utils.Utils;
11 }
12 }

DotNetScriptTemplate里面把模版需要使用到的数据库信息和界面信息也引用进来了,我们可以通过MyMeta来获得数据库里面的信息,而从ui里面获得和Template相关的参数设置信息。

代码写在模版Render方法里。页面代码写在Setup方法里。

使用配置文件

MyGeneration支持配置文件的使用,在Edit里面的Default
Settings...我们可以看到。

Language Mapping定义了数据库和语言(C#,VB.Net等)的字段对应关系。

Database Target Mapping定义了数据库和ADO.Net里面的字段对应关系。

User Meta-Date允许用户设置自定义的配置文件。

在模版中我们可以通过类似input["__dbDriver"]的语法来访问其中的内容。

常见的有如下:

__defaultOutputPath
__dbDriver 
__dbTarget
__language
__dbTargetMappingFileName
__dbLanguageMappingFileName
__userMetaDataFileName

你可以看看模版目录里面的Tutorials/C#里面的Charpt1里面的示例(Charpt2也是个不错的例子,但写得有些繁琐)。

快捷按钮详解

Template Browser可以看到所有的模版。

第一个按钮作用是刷新。

第二个按钮作用是切换显示模式。按照目录浏览和按照命名空间浏览。

第三个按钮作用是查看在线模版库。

第四个按钮作用是打开模版。

第五个按钮和第六个按钮配合使用,点第六个运行时,参数将记录到你指定的znip文件里(其实是XML格式)中,下次运行时点第五个按钮,然后选到你保存的znip文件,将自动加载你的配置。

第七个按钮是运行模版。

第一个按钮作用是打开一个文件。

第二个按钮作用是显示Template Browser窗口。

第三个按钮作用是显示MyMeta Browser窗口,查看数据库信息。

第四个按钮作用是新建一个项目。你可以使用多个模版完成你的任务(我一般不用)。

第五个按钮作用是打开默认的输出路径。

第六个按钮作用是新建JScript Template

第七个按钮作用是新建VBScript Template

第八个按钮作用是新建C# Template

第九个按钮作用是新建VB.Net Template

第十个按钮作用是查看MyMeta Property(不知道怎么用,会使用的还请指教下我)

第十一个按钮作用是查看Language Mapping。

第十二个按钮作用是查看DbTarget Mapping。

第十三个按钮作用是查看User Meta Data。

第十四个按钮作用是查看Global User Meta Data。

第一个按钮作用是保存

第二个按钮作用是另存

第三个按钮作用是查看模版信息

第四个按钮作用是显示控制台

第五个按钮作用是运行模版

试着写第一个模版

在主菜单中选择File-->New-->C# Template。MyGeneration将会给你生成以下的模版代码。这是Template
Code里面的内容。


 1 <%
2 public class GeneratedTemplate : DotNetScriptTemplate
3 {
4 public GeneratedTemplate(ZeusContext context) : base(context) {}
5
6 //---------------------------------------------------
7 // Render() is where you want to write your logic
8 //---------------------------------------------------
9 public override void Render()
10 {
11 %>
12 You can toggle in out of script like this
13 <%
14 output.writeln("Hello world.");
15 }
16
17 }
18 %>

我们运行此模版可以看到输出。%><%里面的内容直接输出到结果,output.writeln的内容也输出到结果了。output是Interface里面自带的属性。有很多的功能。请参见Zeus的帮助文件。

 You
can toggle in out of script like this
  Hello
world.

我们找到Interface Code,发现里面注释了些代码。我们把注释去掉后代码如下


 1 public class GeneratedGui : DotNetScriptGui
2 {
3 public GeneratedGui(ZeusContext context) : base(context) {}
4
5 //-----------------------------------------
6 // The User Interface Entry Point
7 //-----------------------------------------
8 public override void Setup()
9 {
10 // ** UNCOMMENT CODE BELOW TO SEE UI **
11 ui.Width = 100;
12 ui.Height = 100;
13 GuiLabel lblDemo = ui.AddLabel("lblDemo", "Demo", "Demo Tooltip");
14 ui.ShowGui = true;
15 }
16
17 }

运行模板。将会看到一个有Demo字体标签和Ok按纽的窗体。其中Demo字体标签是我们在代码中添加的。Ok按纽是模板自动设置,用来表示确定。

我们来写一个模板来实现一个简单功能。界面上用一个下拉列表绑定数据库名称列表,选择数据库后生成数据库中的表的列表。代码如下


 1 public class GeneratedGui : DotNetScriptGui
2 {
3 public GeneratedGui(ZeusContext context) : base(context) {}
4
5 //-----------------------------------------
6 // The User Interface Entry Point
7 //-----------------------------------------
8 public override void Setup()
9 {
10 // ** UNCOMMENT CODE BELOW TO SEE UI **
11 ui.Width = 180;
12 ui.Height = 120;
13 ui.Title="First Template";//窗体的标题
14 GuiLabel lblDatabase = ui.AddLabel("lblDatabase", "选择数据库", "选择数据库");
15 GuiComboBox chooseDatabase = ui.AddComboBox( "chooseDatabase", "选择数据库" );
16 chooseDatabase.Width=150;
17 setupDatabaseDropdown(chooseDatabase);
18
19 ui.ShowGui = true;
20 }
21
22 //绑定数据库
23 public void setupDatabaseDropdown( GuiComboBox checkbox )
24 {
25 if( MyMeta.IsConnected )//如果MyMeta连接成功
26 {
27 checkbox.BindData( MyMeta.Databases );
28 }
29 }
30 }


 1 <%
2 public class GeneratedTemplate : DotNetScriptTemplate
3 {
4 public GeneratedTemplate(ZeusContext context) : base(context) {}
5
6 //---------------------------------------------------
7 // Render() is where you want to write your logic
8 //---------------------------------------------------
9 public override void Render()
10 {
11 string _dbName = input["chooseDatabase"].ToString();
12
13
14
15 foreach(ITable table in MyMeta.Databases[_dbName].Tables)
16 {
17 output.writeln(table.Alias);
18 }
19
20 output.writeln("**************************");
21
22 foreach(ITable table in MyMeta.Databases[_dbName].Tables)
23 {
24 %><%=table.Alias%>
25 <%
26 }
27 }
28
29 }
30 %>

两个foreach可以作用是相同的,我这里写两个是为了展示<%=%>的绑定功能。你可能会问绑定的两行为什么顶行了,因为其中的空格会显示在结果中,你可以自己试试效果。
其他代码很简单,我想大家都看得懂。

运行它看看结果

sysdiagrams
T_Child
T_Employee
T_Employee1
T_Parent
T_Person
T_Person1
T_Role
T_User
T_User_Role
**************************
sysdiagrams
T_Child
T_Employee
T_Employee1
T_Parent
T_Person
T_Person1
T_Role
T_User
T_User_Role

呵呵,成功了。

这只是个简单的示例。MyGeneration功能十分强大可以生成ORM的实体类,存储过程,SQL语句等等。
如果你也想自己写模板,你可以多看看Zeus和MyMeta的帮助文件,多看别人写得模板。相信你很快也能写出功能强大的模版。

文章地址:http://www.cnblogs.com/renrenqq/archive/2006/08/23/483988.html

时间: 2024-08-05 04:56:26

强大的代码生成工具MyGeneration的相关文章

20代码生成工具

1.1 CodeSmith 一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://www.codesmithtools.com 官方论坛:http://forum.codesmithtools.com/default.aspx 版权形式:30天试用 开源:否 需要先注册确认后才能下载 1.2 MyGenerator MyGenerator是又一个国外很不错的代码生成工具,有人觉得比CodeSmith简单.好用.所有api可以在帮助菜单中找到. 官方网站:http://www

NHibernate之旅(18):初探代码生成工具使用

本节内容 引入 代码生成工具 结语 引入 我们花了大量的篇幅介绍了相关NHibernate的知识.一直都是带着大家手动编写代码,首先创建数据库架构.然后编写持久化类和映射文件,最后编写数据操作方法.測试方法. 这是典型的数据库驱动开发(DbDD,Database-Driven Developent)技术.可是自己不是这样做的,我先编写持久化类和映射文件,然后偷偷的使用SchemaExport工具把数据库生成了.按上面的步骤写文章的,关于SchemaExport工具就是下一篇的事情了,这篇说说利用

Visual Studio强大的帮助工具--Resharper安装与使用

ReSharper是一个JetBrains公司出品的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.使用ReSharper,你可以进行深度代码分析,智能代码协助,实时错误代码高亮显示,解决方案范围内代码分析,快速代码更正,一步完成代码格式化和清理.Resharper可完成自动代码重构.高级的集成单元测试方案和强大的解决方案内导航和搜索.实质上,ReSharper特征可用于C#,VB.NET,XML,ASP.NET,XAML,和构建脚本.ReSharper

基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持

在我们开发系统界面,包括Web和Winform的都一样,主要的界面就是列表展示主界面,编辑查看界面,以及一些辅助性的如导入界面,选择界面等,其中列表展示主界面是综合性的数据展示界面,一般往往需要对记录进行合理的分页,集成各种增删改查的按钮等功能.随着开发项目的需求辩护,对数据记录分页展示.排序等功能都是常态的要求,因此在代码生成工具中调整了主列表界面的列表展示插件为Bootstrap-table插件,本篇随笔主要介绍在代码生成工具Database2Sharp中集成对Bootstrap-table

十款好用的在线 CSS3 代码生成工具

今天这篇文章向大家推荐十款非常有用的在线 CSS3 代码生成工具,这些工具能够帮助你方便的生成 CSS3 特效.CSS3 是对 CSS 规范的改善和增强,增加了圆角.旋转.阴影.渐变和动画等众多强大的特性,它使得 Web 开发人员可以很容易的在网站中加入时尚的效果.以前很多需要编写 JavaScript 才能实现的效果,如今只需几句简单的 CSS3 代码就能实现. CSS3 Maker 这款工具非常强大,可在线演示渐变.阴影.旋转.动画等非常多的效果,并生成对应效果的代码, Border Rad

一个简单易用的代码生成工具

大约5年前,我利用3周业余时间写一个CodeBuilder代码生成工具,虽然市场上也有很多代码生成工具,而且有些IDE里也集成了相关的代码生成.当时就是觉得好玩练手,希望写一个简单实用的.就是能通过数据库中表或视图结构生成公共CRUD代码,而且希望能支持各种数据库(MySql,sqlserver,oracle等)及各种程序设计语言(java,C#,ruby,python,php,xml等).最近有各路朋友与兄弟问我有什么不错的代码生成功工具,虽然我已经多年不用代码生成,但是发现每过一段时间就有人

bboss自动代码生成工具使用指南

本文介绍bboss自动代码生成工具使用方法 工具在线浏览效果: http://gencode.bbossgroups.com 在介绍之前首先了解一下bboss自动代码生成工具能帮助我们做哪些事情. 通过自动代码生成框架,根据模板可以自动生成数据库表的增.删.改.分页查询.列表查询.国际化功能对应的java.jsp程序和配置文件,包括: 1.mvc控制器 2.业务组件 3.PO实体类 4.jsp文件 可以定制不同风格的界面模板,目前提供了一套bboss平台的基础ui风格和一套bboss普通ui风格

数据库逆向框架代码生成工具:MyBatis Generator的使用

MyBatis Generator的详细介绍http://mybatis.github.io/generator/index.html MyBatis Generator  With Maven http://mybatis.github.io/generator/running/runningWithMaven.html 1前言 前段时间根据工作需要,使用Spring+Mybatis完成了一个功能模块,领导推荐了MyBatis Generator(以下简称为MBG),可以逆向生成持久层的基本代

ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.6

摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)[ECG]是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于OO.ADO.NET.分层架构.ORM及反射+工厂设计模式等.支持.Net1.1及以上版本,可用于Oracle.SqlServer.Sybase.DB2.MySQL.Access.SQLite.PostgreSQL.DM(达梦).PowerDesigner文件.Informix.Firebird.MaxDB.Exc