zoukankan      html  css  js  c++  java
  • CodeMatic动软自动生成Nhibernate

    前两天调查了下自动生成工具MyGenerationcodesmith前一个版本已经不更新了后面一个太高级生成

    的代码包含了太多东西,没整明白。不过生成的xmlmapping很强大。所以干脆整合一下codesmith和动

    软的pojo。现版本的动态默认带了nhibernate的模版表设计的时候最好不要带下划线之类的

    一、配置下要用的namespace和表名大小写

    二、因为我用的是mysql所以表名默认在windows环境下是小写,不符合编码的规范,所以小改了下模版把首字母大写其它小写参照

    View plaincopyprint?
    
    <#@ template language="c#" HostSpecific="True" #> 
    <#@ output extension= ".cs" #> 
    <# 
    TableHost host = (TableHost)(Host); 
    host.Fieldlist.Sort(CodeCommon.CompareByintOrder); 
    #>
    using System; 
    
    //Nhibernate Code Generation Template 1.0
    //author:MythXin
    //blog:www.cnblogs.com/MythXin
    //Entity Code Generation Template
    namespace <#= host.NameSpace #>.Entity<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #> 
    { 
    <# if( host.TableDescription.Length > 0) {#> 
    //<#= host.TableDescription #>
    <# } #> 
    [Serializable] 
    public class <#= host.GetModelClass(host.TableName.Substring(0, 1).ToUpper() + host.TableName.Substring(1).ToLower()) #> : EntityBase 
    { 
    
    <# foreach (ColumnInfo c in host.Fieldlist) 
    { #>/// <summary>
    /// <#= string.IsNullOrEmpty(c.Description) ? c.ColumnName : c.Description #>
    /// </summary>
    public virtual <#= CodeCommon.DbTypeToCS(c.TypeName) #><# if(c.Nullable) { #><#if(CodeCommon.isValueType(CodeCommon.DbTypeToCS(c.TypeName 
    ))){ #>?<# }#><# }#> <#= c.ColumnName.Substring(0, 1).ToUpper() + c.ColumnName.Substring(1).ToLower() #> 
    { 
    get; 
    set; 
    } 
    <# } #> 
    } }
    <#@ template language="c#" HostSpecific="True" #>
    <#@ output extension= ".cs" #>
    <#
        TableHost host = (TableHost)(Host);
        host.Fieldlist.Sort(CodeCommon.CompareByintOrder);
    #>
    using System;
    
    //Nhibernate Code Generation Template 1.0
    //author:MythXin
    //blog:www.cnblogs.com/MythXin
    //Entity Code Generation Template
    namespace <#= host.NameSpace #>.Entity<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #>
    {
        <# if( host.TableDescription.Length > 0) {#>
         //<#= host.TableDescription #>
        <# } #>
        [Serializable]
        public class <#= host.GetModelClass(host.TableName.Substring(0, 1).ToUpper() + host.TableName.Substring(1).ToLower()) #> : EntityBase
        {
        
              <# foreach (ColumnInfo c in host.Fieldlist)
            { #>/// <summary>
            /// <#= string.IsNullOrEmpty(c.Description)  ? c.ColumnName : c.Description #>
            /// </summary>
            public virtual <#= CodeCommon.DbTypeToCS(c.TypeName) #><# if(c.Nullable) {  #><#if(CodeCommon.isValueType(CodeCommon.DbTypeToCS(c.TypeName
    ))){ #>?<# }#><# }#> <#= c.ColumnName.Substring(0, 1).ToUpper() + c.ColumnName.Substring(1).ToLower() #>
            {
                get; 
                set; 
            }        
            <# } #>
       
        }
    }
    c#的substring带2个参数的方法和java不太一样,
    java和c#中的substring
    如果只有一个参数,意思是一样,取该索引之后的全部字符

    如果有2个参数。Java 的substring第二个参数表示索引号,实际取值是索引号的前一位; C# 的Substring方法第二个参数表示取子字符串的长度

    host.GetModelClass()方法是动软命名规则里面的设置。比如命名规则设置首字母大写那生成的时候就会首字母大写,但是不满足驼峰形类名所以又修改了下:如果前面没有配置命名规则则把下面的host.GetModelClass()去掉自己ToUpper就可以了

    [csharp] view plaincopyprint?

    <#@ template language="c#" HostSpecific="True" #> 
    <#@ output extension= ".cs" #> 
    <# 
    TableHost host = (TableHost)(Host); 
    host.Fieldlist.Sort(CodeCommon.CompareByintOrder); 
    #>
    using System; 
    
    //Nhibernate Code Generation Template 1.0
    
    namespace <#= host.NameSpace #>.Entity<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #> 
    { 
    [Serializable] 
    public class <#= host.GetModelClass(host.TableName.Substring(0, 1).ToUpper()) 
    #><# int index=host.TableName.IndexOf("_"); 
    #><# if(index!=-1){ 
    if(host.TableName.Length>(index+1)){ 
    #><#=host.TableName.Substring(1,index-1)+host.TableName.Substring(index+1,1).ToUpper()+host.TableName.Substring(index+2) 
    #><# }else { 
    } 
    }else { 
    #><#=host.TableName.Substring(1).ToLower() #><# } #> : EntityBase 
    { 
    
    <# foreach (ColumnInfo c in host.Fieldlist) 
    { #>/// <summary>
    /// <#= string.IsNullOrEmpty(c.Description) ? c.ColumnName : c.Description #>
    /// </summary>
    public virtual <#= CodeCommon.DbTypeToCS(c.TypeName) #><# if(c.Nullable) { #><#if(CodeCommon.isValueType(CodeCommon.DbTypeToCS(c.TypeName 
    ))){ #>?<# }#><# }#> <#= c.ColumnName.Substring(0, 1).ToUpper() + c.ColumnName.Substring(1) #> 
    { 
    get; 
    set; 
    } 
    <# } #> 
    
    } 
    } 
    <#@ template language="c#" HostSpecific="True" #>
    <#@ output extension= ".cs" #>
    <#
        TableHost host = (TableHost)(Host);
        host.Fieldlist.Sort(CodeCommon.CompareByintOrder);
    #>
    using System;
    
    //Nhibernate Code Generation Template 1.0
    
    namespace <#= host.NameSpace #>.Entity<# if( host.Folder.Length > 0) {#>.<#= host.Folder #><# } #>
    {
        [Serializable]
        public class <#= host.GetModelClass(host.TableName.Substring(0, 1).ToUpper())
        #><# int index=host.TableName.IndexOf("_");
        #><# if(index!=-1){ 
                 if(host.TableName.Length>(index+1)){ 
                 #><#=host.TableName.Substring(1,index-1)+host.TableName.Substring(index+1,1).ToUpper()+host.TableName.Substring(index+2)
        #><#     }else {
                 }
           }else { 
        #><#=host.TableName.Substring(1).ToLower() #><# }  #>  : EntityBase
        {
        
              <# foreach (ColumnInfo c in host.Fieldlist)
            { #>/// <summary>
            /// <#= string.IsNullOrEmpty(c.Description)  ? c.ColumnName : c.Description #>
            /// </summary>
            public virtual <#= CodeCommon.DbTypeToCS(c.TypeName) #><# if(c.Nullable) {  #><#if(CodeCommon.isValueType(CodeCommon.DbTypeToCS(c.TypeName
    ))){ #>?<# }#><# }#> <#= c.ColumnName.Substring(0, 1).ToUpper() + c.ColumnName.Substring(1) #>
            {
                get; 
                set; 
            }        
            <# } #>
       
        }
    }
    三、用codesmith生成的xml配置文件要注意,默认是会忽略表中字段名的前缀的类似 表名product 字段名为productid 生成的xml文件中的属性就会变成 id

    还有一个问题就是生成的文件名还是小写的。。。可能要改动软的生成文件的地方

    参考:http://www.cnblogs.com/freshman0216/archive/2010/10/02/1840750.html

  • 相关阅读:
    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程
    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介
    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学
    001 Android Studio 首次编译执行项目过程中遇到的几个常见问题
    Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器
    Dora.Interception,为.NET Core度身打造的AOP框架 [1]:更加简练的编程体验
    监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile
    轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
    轻量级ORM框架——第一篇:Dapper快速学习
    CF888G Xor-MST(异或生成树模板)
  • 原文地址:https://www.cnblogs.com/hornet/p/4076051.html
Copyright © 2011-2022 走看看