CodeMatic动软自动生成Nhibernate

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

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

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

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

CodeMatic动软自动生成Nhibernate

CodeMatic动软自动生成Nhibernate

二、因为我用的是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

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

CodeMatic动软自动生成Nhibernate

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

你可能感兴趣的:(Hibernate)