• 模板代码生成器 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许可协议发布,欢迎转载,演绎,且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    linux环境开机自启动nginx
    linux下启动weblogic
    oracle 数据库服务名怎么查
    关于 CSS3 backface-visiable 与 overflow 属性的冲突
    iframe 通信之坑
    npm i --save & npm i --save-dev
    window.blur/focus & document.hasFocus()
    mac zip 命令行 终端压缩加密文件
    audio之autoplay
    JAVA 重写&重载/多态/抽象类/封装/接口/包
  • 原文地址:https://www.cnblogs.com/yongfeng/p/2848495.html
Copyright © 2020-2023  润新知