模板代码生成器 Template Code Creater

一 大概思路

1.1 工作原理

从数据库(这里主要用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、源代码

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

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

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

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

Top
关注
评论

博文分享:



许可协议:

Creative Commons License

本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

原文地址:https://www.cnblogs.com/yongfeng/p/2848495.html