渗透测试

黑客技术,网络黑客,黑客教程,24小时接单的黑客网站,黑客QQ

自定义代码生成器(代码自动生成器)

本文目录一览:

创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]

但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利。借助于T4 ToolBox这个开源工具箱,多文件的SQL Generator的实现变得异常简单。[文中的例子可以从这里下载]目录 二、创建自定义的Generator 三、ProcedureGenerator如何被使用?一、多文件代码生成器会带来多大的便利?我们先来直观的感受一下较之《上篇》提供的单一文件的代码生成器,基于多文件的代码生成解决方案会为开发人员带来多大的便利。 同样对于《上篇》创建的数据表T_PRODUCT,之前我们为了生成三个不同的存储过程,我们不得已需要创建3个不同的T4模板文件。实际上我们更需要的方式只需要创建一个T4模板,让我们的SQL Generator自动为我们生成3个包含相应存储过程的.sql附属文件,如左图所示(点击看大图)。有的时候,基于单个数据表的存储过程生成方式我们依然觉得不方便。如果我们能够在T4模板文件中指定的数据表的列表,让我们的SQL Generator为列表的每一个数据表都生成CUD三个存储过程,这样的方式更加具有吸引力。如右图所示(点击看大图),一个订单模块包含两个具有主子关系的两张表(T_ORDER和T_ORDER_DETAIL),现在我们在一个T4模板中指定这两个表明,通过SQL Generator可以帮助我们生成6个包含存储过程的.sql附属文件。甚至有的时候我们连数据表列表都无需指定,让SQL Generator为所有的表都生成相应的存储过程。我的例子中没有提供这样的功能,但是实现自来不会存在任何问题。二、创建自定义的Generator在《上篇》中我创建了一个抽象的ProcedureTemplate类,以及三个基于生成CUD存储过程的具体ProcedureTemplate:InsertProcedureTemplate、UpdateProcedureTemplate和DeleteProcedureTemplate。它们都将直接服务于我们今天将要提供的基于多文件的SQL Generator。在《上篇》中,这四个Template分别定义在4个不同的TT文件中,3个具体的ProcedureTemplate通过#@include指令将抽象ProcedureTemplate模板文件包含过来。由于我们将要创建的T4模板将会使用到这四个类,如果我们用四个#@include指令将四个TT文件包含过来,由于T4引擎将会导致对ProcedureTemplate的4次包含,最好将会导致变异问题。个人觉得这应该算是T4引擎解析包含关系的一个局限性,为了解决这个问题我们不得不抽象的ProcedureTemplate和三个具体的ProcedureTemplate都合并成一个TT文件。T4 ToolBox为类库中为了提供了一个抽象的T4Toolbox.Generator类用于实现多文件的代码生成。为此我们创建一个TT模板文件,定义了如下一个继承自该类的ProcedureGenerator。ProcedureGenerator的核心是通过属性Templates定义的类型为IEnumerableProcedureTemplate的ProcedureTemplate列表,这个列表在存储过程中进行初始化。而对于ProcedureGenerator的构造函数,处理定义了一个表示数据库连接字符串的databaseName的参数外,并以数组参数的形式指定了生成的存储过程基于的数据表名的列表。#@ import namespace="System.Collections.Generic" ##@ include file="ProcedureTemplate.tt" ##@ include file="T4Toolbox.tt" ##+publicclass ProcedureGenerator : Generator{public IEnumerableProcedureTemplate Templates{get; private set;}public ProcedureGenerator(string databaseName, paramsstring[] tableNames) {if(null == tableNames || tableNames.Length == 0) {thrownew ArgumentNullException("tableNames"); } this.Templates = InitlizeTemplates(databaseName,tableNames); }private IEnumerableProcedureTemplate InitlizeTemplates(string databaseName, string[] tableNames) { foreach(string tableName in tableNames) {yieldreturnnew InsertProcedureTemplate(databaseName, tableName);yieldreturnnew UpdateProcedureTemplate(databaseName, tableName);yieldreturnnew DeleteProcedureTemplate(databaseName, tableName); } }protectedoverridevoid RunCore() {foreach(ProcedureTemplate tempalte inthis.Templates) { tempalte.RenderToFile(tempalte.GetProcedureName() + ".sql"); } }}#真正的存储过程的T-SQL脚本实现在重写的RunCore中。由于具体的文本转化逻辑都定义在了ProcedureTemplate中了,所以在这里我们需要遍历的ProcedureTemplate集合中每一个Template对象,调用RenderToFile方法将相应的存储过程的脚本写入以存储过程命名同名的.sql文件中。三、ProcedureGenerator如何被使用?我们最后来看看我们创建的ProcedureGenerator最终如何被应用于具体的代码生成。其实很简单,我们只需要创建相应的模板文件,通过#@include将定义ProcedureGenerator类的TT文件包含近来,最后以代码语句调用块(#StatementCode#)的形式实力化该对象,并调用Run方法即可。在构造函数中指定数据库连接字符串的名称和数据表名的列表。下面是基于但表的T4模板。#@ template language="C#" hostSpecific="true" debug="true" ##@ include file="Templates\ProcedureGenerator.tt" ##new ProcedureGenerator("TestDb","T_PRODUCT").Run();#下面是基于多表的T4模板:#@ template language="C#" hostSpecific="true" debug="true" ##@ include file="Templates\ProcedureGenerator.tt" ##new ProcedureGenerator("TestDb","T_ORDER","T_ORDER_DETAIL").Run();#当你代码生成工作执行之后,会多出一个与TT文件同名的附属文件,你需要手工删除掉它。从数据到代码——通过代码生成机制实现强类型编程[上篇]从数据到代码——通过代码生成机制实现强类型编程[下篇]从数据到代码——基于T4的代码生成方式

如何在Visual Studio中开发自己的代码生成器插件

用Visual Studio 2012创建名为MyVisualStudioAddin的项目(根据向导进行设置,这里不赘述),界面如下:

 核心 Connect 类

插件入口就是Connect 类,先看一下Connect的类图:

Connect 实现外接程序对象的构造函数。请将您的初始化代码置于此方法内。

OnConnection 实现 IDTExtensibility2 接口的 OnConnection 方法。接收正在加载外接程序的通知。

OnDisconnection 实现 IDTExtensibility2 接口的 OnDisconnection 方法。接收正在卸载外接程序的通知。

OnAddInsUpdate 实现 IDTExtensibility2 接口的 OnAddInsUpdate 方法。当外接程序集合已发生更改时接收通知。

OnStartupComplete 实现 IDTExtensibility2 接口的 OnStartupComplete 方法。接收宿主应用程序已完成加载的通知。

OnBeginShutdown 实现 IDTExtensibility2 接口的 OnBeginShutdown 方法。接收正在卸载宿主应用程序的通知。

QueryStatus 实现 IDTCommandTarget 接口的 QueryStatus 方法。此方法在更新该命令的可用性时调用。

Exec 实现 IDTCommandTarget 接口的 Exec 方法。此方法在调用该命令时调用。

_applicationObject 是DTE2实例,是宿主应用程序的根对象。

_addInInstance是当前插件实例,表示此外接程序的对象。

首先定义一些内部的对象,主要是自定义的命令,如下所示:

1     /// summary用于实现外接程序的对象。/summary

2     /// seealso class='450a-b90c-4b3e-a181 IDTExtensibility2' /

3     public class Connect : IDTExtensibility2, IDTCommandTarget

4     {

5         #region 命令定义  除了FindInSolutionExplorer外,此处的命令不是根据功能来命令的,而是根据命令所出现的位置来命令的

6         private readonly string MY_COMMAND_FindInSolutionExplorer = "FindInSolutionExplorer";

7         private readonly string MY_COMMAND_Project = "cmdInProject";//在项目上

8         private readonly string MY_COMMAND_Solution = "cmdInSolution";//在解决方案上

9         private readonly string MY_COMMAND_MenuBar = "cmdInMenuBar";//在菜单栏上

10         private readonly string MY_COMMAND_CodeWindow = "cmdInCodeWindow";//代码窗口

11         private readonly string MY_COMMAND_Files = "cmdInFiles";

12         #endregion

13

14         private Command findCommand = null;

15         private CommandBarButton findCommandBarButtonButton = null;

16         private AddInLogger logger = null;

17

18         private DTE2 _applicationObject;

19         private EnvDTE.AddIn _addInInstance;

20 ......

21 }

JeeCGBoot低代码开发平台,强大的代码生成器前后端一起生成

今日推荐:JeeCGBoot低代码开发平台

推荐理由:

1、前后端实现分离架构,通过API调用,实现架构解耦

2、项目集成SpringBoot、SpringCloud的Spring全家桶

3、在线实现开发,表单开发设计、报表配置、在线图表设计、在线设计流程、流程自动化、插件能力等

4、系统集成了工作流,实现扩展任务接口。

5、解决java项目的70%的重复工作

6、最重要的是技术售后的完善,有完善的开发文档,常见问题,交流群

适用场景

1、内部办公系统OA

2、企业资源计划系统ERP

3、客户关系管理系统CRM

4、企业信息管理系统

5、电商SAAS系统

功能特色:

1、支持微服务SpringCloudAlibab全家桶

2、前后端高效代码生成器,单表,一对多模型,CRUD等功能一键生成

3、低代码图表功能,在线设计图表无需编码,实现曲线图,柱状图,数据报表等自定义排版布局

4、封装各种工具类,如定时任务,短信接口邮件发送,excel导入,文件上传下载等

5、支持查询过滤器,动态拼装SQL追加查询条件

6、实现数据权限,控制到行级,列表级,表单字段级,实现不同人看不同数据

7、支持SAAS服务模式,提供多租户的架构方案

8、数据库兼容主流Mysql、PostgreSql、Oracle、SQLServer、MariaDB等主流数据库,一套代码兼容主流

9、集成了Activiti工作流

10、支持单点登录CAS集成方案

11、接口统一采用restful接口方式,集成了Swagger-ui在线接口文档

技术架构:

后台环境:

Java8+Maven+Mysql+Redis

后台开发技术

springBoot2+SpringCloudAlibaba+MybatisPlus+Jimurport+ApacheShir

前端:

Vue2.6+Axios

微服务架构图:

后台操作图:

支持手机端

如何用动软代码生成器自定义

1

打开工具,点击如下图的连接SQL Server数据库服务器;

2

如图,填写好数据库相关配置,点击连接测试,可以看到你的数据库出现在了下拉列表中,点击选择你的数据库,点击下一步;

3

如图,选择要生成代码的数据库;

4

填写项目解决方案的名称和存储位置的信息;

5

选择要生成代码的表,选择你需要的模板,如图,根据需求填写;

6

点击开始生成,生成好了一个.NET的解决方案,里面的必要的代码已经自动生成好;

  • 评论列表:
  •  黑客技术
     发布于 2023-04-03 16:34:44  回复该评论
  • entCode#)的形式实力化该对象,并调用Run方法即可。在构造函数中指定数据库连接字符串的名称和数据表名的列表。下面是基于但表的T4模板。#@ template language="C#" hostSpecific="true" debug="true" ##@ inclu

发表评论:

«    2025年5月    »
1234
567891011
12131415161718
19202122232425
262728293031
文章归档
标签列表

    Powered By

    Copyright Your WebSite.Some Rights Reserved.