Oracle代码生成工具的数库表及字段名称转义

在上篇随笔《代码生成工具的界面快速转移》中介绍了了代码生成工具Database2Sharp是怎样快速变化所要的Web界面以及各种Winform界面,其中包生成即可运行的Web界面效果,Winform布局信息的变化。这些看似十分粗略的界面元素生成,其实是要加上的数据库初数据信息作基础之,而且对两样的数据库处理要有所不同。本文介绍不同数据库中元数据的处理差别,以及如何代码生成工具Database2Sharp如何配合处理这些题材之。

1、常规的多少库表、字段名称的转义

譬如,我们得取表底别名,对于SqlServer一般设计之早晚是用Pascal命名方式,所以表名称未待转义,但对于Oracle表名称,基本上都是以大写来命名,而且表名称未是采取Pascal方式,而是简单单词里采用下划线“_”来分隔的,如DEPT_NAME这样的称号。

貌似的话,我们吧每种的数据库定义一套转义规则,来为说明、字段名称增加一个变型名字段,如Oracle的DEPT_NAME我们设法为她别名显示为DeptName就可了,SQLServer的是因为一般名称还是Pascal的,我们得无用转义,数据库表、字段名称也DeptName,我们虽保存它看做别名DeptName即可。

自身的代码生成工具的头数据性就是这样的模式,有一个NameElement对象,就隐含Name和Alias两个属性,如下所示。

Oracle 1

2、特别状态下之阐明、字段名称转义

可是咱有时候反向工程的时光,可能数据库是从Oracle到SQLServer的,或者偶尔考虑多数据库兼容的气象,那么可能SQLServer的表明和字段的称呼或Oracle的命名规则之,如下SQLServer例子所示。

Oracle 2

于上述之数据库信息,如果无转义数据库名称,那么就是吃生成代码造成大怪之困扰,因为实体类属性名称,类名称都可能是Oracle风格的大写的表明,非常勿便于阅读。

可代码生成工具就长了智能识别字段名称的逻辑,对于这种由Oracle过来的数据库命名规则,我们为克成立生成对应的代码,如齐图的右,它既判定用了Oracle的命名规则来拍卖别名了。

Oracle 3

诸如此类我们转变的代码,就是大要好的命名风格了。

Oracle 4

3、自定义表、字段名称的别名

突发性,统一规则变更的别名不肯定是我们所用的,那么请动代码生成工具的别名设置操作即可将有表名、字段名设置为汝想要之称呼,如下操作所示。

1)表别名修改

Oracle 5

Oracle 6

2)字段别名修改

Oracle 7

4、在代码工具的自定义模板被利用字段转义信息

代码生成工具Database2Sharp提供了老好的自定义模板操作交互作用,我们只需要在模板文件中写NVelocity的模版代码就得出口各种五花八门的代码的,如下面图虽是自从定义模板列表界面,其中左侧列出一些基础之例证模板代码,大家可参见学习,在树形目录中建立好之模版文件以及模板代码。

Oracle 8

运由定义模板Oracle代码的目的,就是使动用数据库的状元数据信息来转复杂而发生规律的代码有或者文件之。

咱注意到模板代码,其中使用到之数据库信息以及遍历操作相当。

        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="info">实体类信息</param>
        private void InitData(${ClassName}Info info)
        {
#foreach($ColumnInfo in ${TableInfo.ColumnList.Values})        
#if(${ColumnInfo.AutoIncrement} == false)    
#if(${ColumnInfo.NetType} == "System.String" )
            this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()};
#elseif(${ColumnInfo.NetType} == "System.DateTime")
            this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()}.ToShortDateString();
#else
            this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()}.ToString();
#end
#end ##endif
#end
        }        

        /// <summary>
        /// 获取数据
        /// </summary> 
        private ${ClassName}Info GetData()
        { 
            ${ClassName}Info info = new ${ClassName}Info();
#foreach($ColumnInfo in ${TableInfo.ColumnList.Values})        
#if(${ColumnInfo.AutoIncrement} == false)     
#if(${ColumnInfo.NetType} == "System.Decimal" )
            info.${ColumnInfo.Name.Alias.ToCapit()} = Helper.SafeConvertDecimal(this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text);
#elseif(${ColumnInfo.NetType} == "System.DateTime")    
            info.${ColumnInfo.Name.Alias.ToCapit()} = Helper.SafeConvertDate(this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text);        
#else
            info.${ColumnInfo.Name.Alias.ToCapit()} = this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text;   
#end          
#end ##endif
#end
         }

内部的${ColumnInfo.Name.Alias.ToCapit()}为别名,而${ColumnInfo.Name.Name.ToCapit()}为数据库表字段真实名称。
上述模板,我们选数据库表生成代码,就可以得到下面的专业赋值及获得内容的代码了。

        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="info">实体类信息</param>
        private void InitData(GroupInfo info)
        {
             this.txtEditor.Text = info.Editor.ToString();
             this.txtEdittime.Text = info.Edittime;
             this.txtName.Text = info.Name;
             this.txtOutGroup.Text = info.OutGroup;
             this.txtGroupOrder.Text = info.GroupOrder;
             this.txtDeptName.Text = info.DeptName;
             this.txtUpperDept.Text = info.UpperDept.ToString();
             this.txtGrade.Text = info.Grade.ToString();
             this.txtRemark.Text = info.Remark;
         }        

        /// <summary>
        /// 获取数据
        /// </summary> 
        private GroupInfo GetData()
        { 
             GroupInfo info = new GroupInfo();
             info.Editor = this.txtEditor.Text;   
             info.Edittime = this.txtEdittime.Text;   
             info.Name = this.txtName.Text;   
             info.OutGroup = this.txtOutGroup.Text;   
             info.GroupOrder = this.txtGroupOrder.Text;   
             info.DeptName = this.txtDeptName.Text;   
             info.UpperDept = this.txtUpperDept.Text;   
             info.Grade = this.txtGrade.Text;   
             info.Remark = this.txtRemark.Text;   
          }

上述就是代码生成工具Database2Sharp的多寡库表及字段名称转义的智能处理以及采用,如果熟练使用NVelocity的着力语法,结合代码工具提供的数据库初次数据信息,我们好开的再次多,做的重复好。希望此家伙对你的支出有救助。

相关文章