前两天调查了下自动生成工具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

CodeMatic动软自动生成Nhibernate的更多相关文章

  1. 动软代码生成器生成model

    model <#@ template language="c#" HostSpecific="True" #> <#@ output exte ...

  2. 手把手教你用动软.NET代码生成器实例教程

    动软实战攻略 手把手教你用动软 文档编号:20110421 版权所有 © 2004-2011 动软 在线帮助:http://help.maticsoft.com 目录   一.        产品介绍 ...

  3. 动软Model 模板 生成可空类型字段

    动软代码 生成可空类型 <#@ template language="c#" HostSpecific="True" #> <#@ outpu ...

  4. asp.net+mvc+easyui+sqlite 简单用户系统学习之旅(三)—— 简单登录页面+sqlite+动软代码生成器的使用

    上一节讲到利用easyui的layout.tree.tab和datagrid创建用户管理的页面,注意利用到easyui的页面一定要按顺序添加jQuery和easyUI的.js和.css样式,灵活查看e ...

  5. 【动软.Net代码生成器】连接MySQL生成C#的POCO实体类(Model)

    首先是工具的下载地址: 动软.Net代码生成器 该工具官网自带完整教程: 文档:http://www.maticsoft.com/help/ 例子:http://www.maticsoft.com/h ...

  6. 动软生成的WCP DAO层模板(不使用接口)

    本实战是博主初次学习Java,分析WCP源码时,学习HibernateTools部分的实战,由于初次接触,难免错误,仅供参考,希望批评指正. 开发环境: Eclipse Version: Photon ...

  7. 动软 生成 linq相关DAO

    第一步:新建自定义模板 <#@ template language="c#" HostSpecific="True" #> <#@ outpu ...

  8. 动软代码生成器 可用于生成Entity层,可更改模板 /codesmith 也可以

    动软代码生成器官方下载地址:http://www.maticsoft.com/download.aspx 教程:http://jingyan.baidu.com/article/219f4bf7dfd ...

  9. 使用Myeclipse10.0自动生成搭建SSH框架(数据库表自动反向转换成Hibernate实体)实现用户登陆

    我这里使用的数据库是mysql5.0 数据是上课用的.这些都不是重点,重要的是学会这个方法: 创建好数据库: create database jboadefault character set utf ...

随机推荐

  1. Temporal Ensembling for Semi-Supervised Learning

    Laine, Samuli, and Timo Aila. "Temporal Ensembling for Semi-Supervised Learning." arXiv pr ...

  2. 假设web应用的文档根目录为MyApp,那么可以从哪里找到database.jar文件。

    假设web应用的文档根目录为MyApp,那么可以从哪里找到database.jar文件. A. MyApp目录下 B. MyApp\images目录下 C. MyApp\WEB-INF目录下 D. M ...

  3. C#获取CPU编号

    //System.Management;//需要添加引用(系统自带) /// <summary> /// 获取cpu编号 /// </summary> /// <retu ...

  4. spark(1.1) mllib 源码分析(三)-朴素贝叶斯

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...

  5. Social Network 社交网络分析

    Social Network 社交网络分析 一:什么是SNA-社交网络分析 社交网络分析的威力何在?我想几个案例来说明. 案例1:对一个毫无了解的组织(这个组织可以是一个公司,亦或是一个组织),如果能 ...

  6. asp.net调用系统设置字体文本框的方法

    本文实例展示了asp.net调用系统设置字体文本框的方法,是进行web开发中很实用的技巧.具体实现步骤如下: 一.调用系统字体文本框 首先在bin文件夹右击-->添加引用-->.net标签 ...

  7. 【SR】正则化

    MAP框架:

  8. VC++6.0 打开原来工程突然特别慢或者打不开?

    VC++6.0打开原来工程突然特别慢或者打不开?    近几日,对原来工程做了一些修改,感觉打开特别慢,甚至打不开,在Loading Workspace时就卡住了. 解决办法:删除工程文件中的三个文件 ...

  9. JAVA基础面试(五5)

    41.a.hashCode() 有什么用?与 a.equals(b) 有什么关系?        hashCode() 方法对应对象整型的 hash 值.它常用于基于 hash 的集合类,如 Hash ...

  10. 【原】storm源码之巧用java反射反序列化clojure的defrecord获取属性值

    storm源码是clojure.java.python的混合体.在解决storm-0.8.2的nimbus单点问题的过程中需要从zookeeper上读取目前storm集群中正在运行的assignmen ...