模板代码生成器 Template Code Creater

一 大概思路

1.1 工作原理

模板代码生成器 Template Code Creater

 

从数据库(这里主要用Oracle数据库),读取相应的表结构(如表名、列名、列类型、列注释等),然后读取模板(用txt写的模板),最后通过匹配生成目标代码。

二 代码解释

2.1 文件解释

clip_image004

2.2 解析方式

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace [XXX]

{

public class [table_name]

{

public [table_name]()

{

}

/// <summary>

/// [table_name]构造函数

/// </summary>

<!--/// <param name="v_[col_name]">[col_name]</param>

-->

public [table_name](<!--[col_type] v_[col_name][,]-->)

{

<!--this._[col_name] = v_[col_name];

-->

}

<!--

/// <summary>

/// [col_name]

/// </summary>

private [col_type] _[col_name];

public [col_type] [col_name]

{

get { return this._[col_name]; }

set { this._[col_name] = value; }

}

-->

}

}

App.config(配置数据库连接),以T_[filename].txt为模板,规则如下:

[XXX]暂时不考虑

<!-- -->标识符里的为可循环内容

[table_name][col_name][col_type][col_comment][create_time][,][col_comment]为可替换内容

解析顺序:

1. 读取数据库所有表 或 根据SQL语句,将表结构放入一个List<TableObject>结构里

2. 读取全文

3. 读取<!-- -->内容,以取代 [table_name][col_name][col_type][col_comment][create_time][,]

4. 继续读取,以取代[table_name]<!-- -->

5. 输出[table_name].cs文件

2.3 以T_为开头的模板文件

/*****************************************



-- create by: zhyongfeng



-- create date: [create_time]



-- fun:



-- P_CONDITION:where条件



-- P_TYPE:是否分页



-- P_CUR_PAGE:第几页



-- P_PAGE_SIZE:每页记录数



-- X_TOT_REC:总记录数



-- X_TOT_PAGE:总页数



-- X_CUR:输出



*****************************************/



procedure [table_name]_Info_Select(P_CONDITION in Varchar2,



P_TYPE varchar2,



P_CUR_PAGE integer,



P_PAGE_SIZE integer,



P_SORT varchar2,



P_DIR varchar2,



X_TOT_REC out integer,



X_TOT_PAGE out integer,



X_CUR out curtype) as



V_SQL long;



V_TOT_REC integer;



V_TOT_PAGE integer;



begin



V_SQL := 'select <!--e.[col_name][,] -->



from [table_name] e';



exception



When others then



rollback;



dbms_output.put_line('异常提示:'||sqlcode||':'||sqlerrm);



end;



/*****************************************



-- create by: zhyongfeng



-- create date: [create_time]



-- fun:增加



<!-- -- P_[col_name]:[col_comment]



-->



-- X_RE:输出



-- X_MSG:输出



*****************************************/



procedure [table_name]_Add(



<!-- P_[col_name] in [col_type],



--> X_RE out integer,



X_MSG out varchar2) is



V_COUNT integer;



begin



--新增数据



insert into [table_name](<!--[col_name][,]-->)



values(SEQ_EXAM_QUESTION.Nextval<!--[,]-->);



X_RE := 1;



X_MSG := '提示:新增成功!';



commit;



exception



when others then



rollback;



X_RE := 9;



X_MSG := '操作失败:['||sqlcode||':'||sqlerrm||']';



dbms_output.put_line('异常提示:'||sqlcode||':'||sqlerrm);



end;



/*****************************************



-- create by: zhyongfeng



-- create date: [create_time]



-- fun:编辑



<!-- -- P_[col_name]:[col_comment]



-->



-- X_RE:输出



-- X_MSG:输出



*****************************************/



procedure [table_name]_Edit(



<!-- P_[col_name] in [col_type],



--> X_RE out integer,



X_MSG out varchar2) is



V_COUNT integer;



begin



--更新数据



update [table_name] set



<!-- [col_name]= P_[col_comment][,]



-->



where 1=1;



X_RE := 1;



X_MSG := '提示:更新成功!';



commit;



exception



when others then



rollback;



X_RE := 9;



X_MSG := '操作失败:['||sqlcode||':'||sqlerrm||']';



dbms_output.put_line('异常提示:'||sqlcode||':'||sqlerrm);



end;



/*****************************************



-- create by: zhyongfeng



-- create date: [create_time]



-- fun: 删除



-- 编号:编号



-- X_RE:输出



-- X_MSG:输出



*****************************************/



procedure [table_name]_Delete(编号 in number,



X_RE out integer,



X_MSG out varchar2) is



V_COUNT integer;



begin



--删除



delete from [table_name] where 编号=编号;



X_RE := 1;



X_MSG := '提示:删除成功!';



commit;



exception



when others then



rollback;



X_RE := 9;



X_MSG := '操作失败:['||sqlcode||':'||sqlerrm||']';



dbms_output.put_line('异常提示:'||sqlcode||':'||sqlerrm);



end;

 

 

三 效果演示

clip_image006

clip_image008

clip_image010

四 总结

原理比较简单,主要通过自己制定一些可识别的字符串,并进行正则匹配,生成相应的目标代码。这样子做的好处是:

在编写数据库包、触发器、存储过程中,均可以提高编写代码效率、提高编写代码的准确度。

在Web UI or DotNet众多技术框架中,实现了以数据库为主,代码字段or对象实例的动态创建,节约了开发者的时间和效率。

五 源代码提供

5.1、运行环境

系统:win7/windows xp

IDE工具:VS2008

版本:.net framework3.5

5.2、源代码

源代码下载:http://files.cnblogs.com/yongfeng/OracleDataBase_Object_Creater.rar

可执行文件:http://files.cnblogs.com/yongfeng/OracleTemplateCodeCreater.rar

视频预览:http://v.youku.com/v_show/id_XNDk4MjIwNzIw.html

注意:需要设置一下OracleDataBase_Object_Create.exe.config的Oracle数据库数据源,否则连接不上数据库,里面有源代码、执行文件。

你可能感兴趣的:(template)