zoukankan      html  css  js  c++  java
  • 代码生成器 CodeSmith 的使用(二)

    在第一篇中,简单的介绍了 CodeSmith 的使用方法,这次做一个生成简单的数据库字段属性的模板。以下只粘贴主要的代码片段。

    <%-- 
    Name:  Copyright © Sun 2013-2014 All rights reserved  
    Contact me:  Sunnydayhu@163.com
    Author:  SpringFileld
    Description: 遍历数据库中的表,并映射成类的属性 Camel规则的写法
    DateTime: 2014-07-31
    --%>
    <%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
    <%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>
    
    <% foreach (ColumnSchema column in this.SourceTable.Columns) {  %>
    private <%= CSharpAlias[column.SystemType.FullName] %> _<%=StringUtil.ToCamelCase(column.Name) %>;
    
    public <%= CSharpAlias[column.SystemType.FullName] %> <%= StringUtil.ToCamelCase( column.Name) %>
    {
    	get { return _<%=StringUtil.ToCamelCase(column.Name) %>; }
    	set { _<%=StringUtil.ToCamelCase(column.Name) %> = value; }
    }
    
    <% } %>


    生成的效果如下:(Camel规则的写法)

    private string _sheetNo;
    
    public string sheetNo
    {
    	get { return _sheetNo; }
    	set { _sheetNo = value; }
    }
    
    private decimal _sheetAmt;
    
    public decimal sheetAmt
    {
    	get { return _sheetAmt; }
    	set { _sheetAmt = value; }
    }
    
    private System.DateTime _operDate;
    
    public System.DateTime operDate
    {
    	get { return _operDate; }
    	set { _operDate = value; }
    }
    
    private string _settleFlag;
    
    public string settleFlag
    {
    	get { return _settleFlag; }
    	set { _settleFlag = value; }
    }
    
    private string _transNo;
    
    public string transNo
    {
    	get { return _transNo; }
    	set { _transNo = value; }
    }
    
    

    Pascal 规则模板代码:

    <%-- 
    Name:  Copyright © Sun 2013-2014 All rights reserved  
    Contact me:  Sunnydayhu@163.com
    Author:  SpringFileld
    Description: 遍历数据库中的表,并映射成类的属性 Pascall 规则
    DateTime: 2014-07-31
    --%>
    <%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
    <%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>
    
    <% foreach (ColumnSchema column in this.SourceTable.Columns) {  %>
    private <%= CSharpAlias[column.SystemType.FullName] %> _<%=StringUtil.ToPascalCase(column.Name) %>;
    
    public <%= CSharpAlias[column.SystemType.FullName] %> <%= StringUtil.ToPascalCase( column.Name) %>
    {
    	get { return _<%=StringUtil.ToPascalCase(column.Name) %>; }
    	set { _<%=StringUtil.ToPascalCase(column.Name) %> = value; }
    }
    
    <% } %>


     

    Pascal 规则生成结果:

    private string _SheetNo;
    
    public string SheetNo
    {
    	get { return _SheetNo; }
    	set { _SheetNo = value; }
    }
    
    private decimal _SheetAmt;
    
    public decimal SheetAmt
    {
    	get { return _SheetAmt; }
    	set { _SheetAmt = value; }
    }
    
    private System.DateTime _OperDate;
    
    public System.DateTime OperDate
    {
    	get { return _OperDate; }
    	set { _OperDate = value; }
    }
    
    private string _SettleFlag;
    
    public string SettleFlag
    {
    	get { return _SettleFlag; }
    	set { _SettleFlag = value; }
    }
    
    private string _TransNo;
    
    public string TransNo
    {
    	get { return _TransNo; }
    	set { _TransNo = value; }
    }
    
    

    原生的属性写法(生成的属性字段的大小写与数据库中的字段的大小写完全相同)

    <%-- 
    Name:  Copyright © Sun 2013-2014 All rights reserved  
    Contact me:  Sunnydayhu@163.com
    Author:  SpringFileld 
    Description: 遍历数据库中的表,并映射成类的属性 原生的写法
    DateTime: 2014-07-31
    --%>
    <%@ CodeTemplate Language="C#" TargetLanguage="C#" Debug="False" Description="Create a list of properties from database table." %>
    <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="Table that the object is based on." %>
    <%@ Map Name="CSharpAlias" Src="System-CSharpAlias" Description="System to C# Type Map" %>
    <%@ Assembly Name="SchemaExplorer" %>
    <%@ Import Namespace="SchemaExplorer" %>
    
    <% foreach (ColumnSchema column in this.SourceTable.Columns) {  %>
    private <%= CSharpAlias[column.SystemType.FullName] %> _<%= column.Name %>;
    
    public <%= CSharpAlias[column.SystemType.FullName] %> <%= column.Name %>
    {
    	get { return _<%= column.Name %>; }
    	set { _<%= column.Name %> = value; }
    }
    
    <% } %>


    原生的属性写法生成的效果:

    private string _sheet_no;
    
    public string sheet_no
    {
    	get { return _sheet_no; }
    	set { _sheet_no = value; }
    }
    
    private decimal _sheet_amt;
    
    public decimal sheet_amt
    {
    	get { return _sheet_amt; }
    	set { _sheet_amt = value; }
    }
    
    private System.DateTime _oper_date;
    
    public System.DateTime oper_date
    {
    	get { return _oper_date; }
    	set { _oper_date = value; }
    }
    
    private string _settle_flag;
    
    public string settle_flag
    {
    	get { return _settle_flag; }
    	set { _settle_flag = value; }
    }
    
    private string _trans_no;
    
    public string trans_no
    {
    	get { return _trans_no; }
    	set { _trans_no = value; }
    }
    

    总结:


     如果要改成 Pascal 规则的写法, 只要将StringUtil.ToCamelCase(column.Name) 改成 StringUtil.ToPascalCase(column.Name)即可, 若不想用这两种规则,生成原生的字段属性,可以写成column.Name 去掉 StringUtil.ToCamelCase() 和 StringUtil.ToPascalCase() 方法

  • 相关阅读:
    Oracle Core 学习笔记二 Transactions 和 Consistency 说明
    Oracle AUTO_SPACE_ADVISOR_JOB 说明
    Windows 下 ftp 上传文件 脚本
    Oracle 11g 中 Direct path reads 特性 说明
    Linux 使用 wget 下载 Oracle 软件说明
    Oracle 10g read by other session 等待 说明
    Oracle 11g RAC INS06006 Passwordless SSH connectivity not set up between the following node(s) 解决方法
    SecureCRT 工具 上传下载数据 与 ASCII、Xmodem、Ymodem 、Zmodem 说明
    Oracle RAC root.sh 报错 Timed out waiting for the CRS stack to start 解决方法
    Oracle RESETLOGS 和 NORESETLOGS 区别说明
  • 原文地址:https://www.cnblogs.com/wisdo/p/4205343.html
Copyright © 2011-2022 走看看