`
lyunabc
  • 浏览: 551492 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

CodeSmith 使用教程(3): 自动生成Yii Framework ActiveRecord

 
阅读更多

上例介绍了使用CodeSmith编写代码模板的基本方法,本例实现一个较为实用的代码模板,通过数据库自动为Yii Framework生成所需要的ActiveRecord 类。
本例通过修改Yii Framework 开发教程(26) 数据库-Active Record示例,原例是手工编写Employee.php ActiveRecord。

首先为工程添加一个C#项目(任意类型,我们只是利用这个项目来包含CodeSmith项目),然后添加一个CodeSmith项目和一个CodeSmith模板。然后参考CodeSmith 使用教程(1): 概述使用Schema Explorer 添加一个数据连接,本例连接到Chinook数据库:

20130104001

创建的代码模板PhpActiveRecord.cst 定义个属性TableName(数据库表名),复制Yii Framework 开发教程(26) 数据库-Active Record示例中Employee.php的定义并使用属性,代码如下:

<%@ Template Language="C#" TargetLanguage="PHP" Debug="False" %>

<%@ Property Name="TableName" Type="System.String" Description="Table name" %>

<?php

class <%= TableName %> extends CActiveRecord
{
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	public function tableName()
	{
		return '<%= TableName %>';
	}
}

?>

<script runat="template">
  public override string GetFileName() {
    return TableName + ".php" ;
}
</script>


这时就可以通过定义TableName 的属性给任意数据表生成对应的ActiveRecord PHP类了。 不过这还是要手工来一个一个来配置表名。 本例通过一个主模板和一个从模板的方式通过连接数据库自动为所有的表生成对应的ActiveRecord
使用主从模板的具体用法后面再介绍,简单的说子模板相当于子函数,主模板类似于主函数可以调用子函数,主模板通过调用子模板,传给子模板属性从而可以生成多个文件。
创建一个代码模板YiiDataModel.cst 作为主模板,使用子模板首先需要在主模板中进行注册才能使用:

<%@ Register Name="ActiveRecord" Template="PhpActiveRecord.cst" MergeProperties="false"  %>

完整代码如下:

<%@ CodeTemplate Language="C#" TargetLanguage="Text"
  Description="List all database tables" %>
<%@ Import Namespace="System.IO" %>
<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema"
  Category="Context" Description="Database containing the tables." %>

<%@ Register Name="ActiveRecord" Template="PhpActiveRecord.cst"
 MergeProperties="false"  %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Import Namespace="SchemaExplorer" %>

<script runat="template">
public string FirstLetterToUpper(string str)
{
    if (str != null)
    {
        if(str.Length > 1)
            return char.ToUpper(str[0]) + str.Substring(1);
        else
            return str.ToUpper();
    }
    return str;
}

</script>

<% for (int i = 0; i < SourceDatabase.Tables.Count; i++) { %>
   <%  string name= FirstLetterToUpper(SourceDatabase.Tables[i].Name); %>
   <%  string filename= @"../ActiveRecordDemo/protected/models/"+name+".php"; %>
     // instantiate the sub-template
    <%  ActiveRecord activeRecord = this.Create<ActiveRecord>();%>
    <%  activeRecord.TableName= name; %>
    <%  activeRecord.RenderToFile(filename,true); %>
<% } %>

FirstLetterToUpper 为C#函数,主要是把数据库表名的第一个字母变为大写(纯C#代码)。 SchemaExplorer 为CodeSmith提供的数据库访问库,可以用来获取数据库Schema的信息,如包含的表名,字段属性,主键外键等(后面具体介绍)
在主模板中,通过ActiveRecord 来访问子模板(名字ActiveRecord为注册子模板时定义) ,使用this.create创建子模板实例,然后传入TableName属性,调用RenderToFile 将子模板的结果写道指定的文件中。

此时在CodeSmith.csp 中添加主模板,配置数据库为Chinook,然后生成代码

Rendering output 'YiiDataModel'...

  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Album.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Artist.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Customer.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Employee.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Genre.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Invoice.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Invoiceline.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Mediatype.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Playlist.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Playlisttrack.php
  Generated: D:\tmp\ActiveRecordDemo\ActiveRecordDemo\protected\models\Track.php
  Generated: D:\tmp\ActiveRecordDemo\CodeSmith\YiiDataModel.txt
Done rendering outputs: 1 succeeded, 0 failed, 0 skipped (1111ms).

刷新项目可以看到自动生成的代码文件

20130104002

本例只是为每个数据表生成最简单的ActiveRecord,如果需要生成关联ActiveRecord,可以进一步根据表之间的关系为每个ActiveRecord 生成所需的relations 方法,后面有时间进一步介绍。

本例下载


分享到:
评论

相关推荐

    CodeSmith使用教程 - v1.01

    ### 第 3 章:自动生成 Yii Framework ActiveRecord 类简单模板 针对特定框架,如 Yii Framework,CodeSmith 可以帮助生成对应的代码。在这个章节,我们将学习如何创建一个模板,用于自动生成 ActiveRecord 类。...

    CodeSmith 生成工具 6.5 (可生成Nhibernate)

    CodeSmith 6.5结合Nhibernate,意味着用户可以通过模板自定义生成Nhibernate所需的映射文件(.hbm.xml或使用Fluent NHibernate的配置)、实体类以及数据访问层接口和实现。 在使用CodeSmith 6.5时,用户首先需要...

    CodeSmith 使用手册 简易教程

    通过这两个文件的学习,开发者可以全面了解CodeSmith的使用方法,从创建简单的模板到构建复杂的代码生成流程,从而提升开发效率,减少手动编写重复代码的时间。同时,熟练掌握CodeSmith也能帮助团队保持代码一致性,...

    CodeSmith .net 三层自动生成模板

    使用CodeSmith自动生成这些层的代码,可以显著减少手动编写重复代码的工作量,使开发者能更专注于业务逻辑和用户体验的设计。通过调整和定制模板,可以适应不同的开发需求和规范,确保代码的一致性和可维护性。 在...

    CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf

    CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf CodeSmith教程[全].pdf ...

    CodeSmith开发使用教程资料

     CodeSmith使用教程,开发资料,PDF高清淅版,对CodeSmith熟悉的朋友都知道,CodeSmith是一个基于模板的代码生成工具,它使用类似于ASP.NET的语法来生成代码或文本,本教程将带你掌握CodeSmith的使用方法和原理等...

    CodeSmith的批量生成数据库表创建脚本的模板

    标题"CodeSmith的批量生成数据库表创建脚本的模板"暗示了我们将探讨如何使用CodeSmith的模板功能来自动化生成针对SQL Server数据库的建表语句。在数据库开发过程中,手动为每个表编写CREATE TABLE语句是一项繁琐的...

    codesmith 3层代码生成模板

    3. 生成代码:运行模板,Codesmith将自动生成对应层的代码文件。 4. 整合到项目:将生成的代码导入到你的项目中,调整和优化以满足实际需求。 五、模板的优势 1. 提升开发效率:通过自动化生成代码,减少了大量...

    CodeSmith 代码自动生成工具

    CodeSmith是一款强大的代码自动生成工具,它极大地提高了开发人员的生产力,特别是在处理大量重复性代码时。通过使用CodeSmith,开发者能够快速地生成实体类、数据访问层(DAL)以及业务逻辑层(BLL)的代码,从而将...

    CodeSmith开发使用教程资料 pdf

    总的来说,这份CodeSmith开发使用教程资料将全面覆盖CodeSmith的基本操作、高级特性以及实际应用案例,无论是新手还是老手,都能从中受益匪浅。通过学习和实践,你将能够充分利用CodeSmith的潜力,提升软件开发的...

    codeSmith自动生成三层中的代码

    "codeSmith自动生成三层中的代码"这一主题表明我们将探讨如何利用CodeSmith来生成软件架构中的三层架构代码,包括表示层、业务逻辑层和数据访问层。 首先,三层架构是一种常见的软件设计模式,它将应用程序分为三个...

    codesmith生成实体类简单模板

    《使用Codesmith生成C#实体类的简易模板详解》 在软件开发过程中,尤其是在与数据库交互的业务逻辑层,实体类的创建是一项繁琐且重复的工作。 Codesmith是一款强大的代码生成工具,它允许开发者通过定制模板来自动...

    codesmith 代码生成器和中文帮助文档

    CodeSmith是一款强大的代码生成工具,它能够帮助开发者自动化地生成大量重复性的源代码,从而极大地提高开发效率。这款工具尤其适合在大型项目中使用,因为它能够根据数据库模式或XML模板自动生成符合特定编码规范的...

    ASP.NET 中 CodeSmith可以自动生成三层代码

    CodeSmith可以生成ADO.NET实体、存储过程调用或Entity Framework等ORM框架的代码,以实现对数据库的高效访问。 在使用CodeSmith时,首先需要安装并激活CodeSmith Professional,例如提供的压缩包中的"CodeSmith....

    CodeSmith 代码生成教程

    本教程将深入介绍如何利用CodeSmith进行高效的代码生成。 一、CodeSmith概述 CodeSmith是一款基于模板驱动的代码生成器,它允许开发者使用模板语言来创建自定义的代码片段。通过预定义的模板或自定义模板,...

    CodeSmith使用基础教程

    首先,我们从“CodeSmith使用基础教程 一 — 模板”开始。模板是CodeSmith的核心,它定义了生成代码的结构和逻辑。你可以创建自定义模板,以满足特定项目或编程语言的需求。模板可以包含变量、循环、条件语句等,...

    CodeSmith初学者教程

    CodeSmith是一款强大的代码生成工具,尤其对于asp.net开发者而言,它极大地提高了开发效率,帮助程序员从繁琐的手动编码工作中解放出来。本教程专为初学者设计,旨在引导你快速掌握CodeSmith的基本用法和高级特性。 ...

    CodeSmith(代码生成器,个人觉得是最好用的)

    CodeSmith是一款强大的代码生成工具,被誉为“最好用”的代码生成器之一。它的主要功能是帮助开发者自动生成符合特定模式或规则的源代码,极大地提高了开发效率,减轻了编写重复性代码的工作负担。这款工具以其易用...

    C#版 -- 实用性CodeSmith模板(自动生成三层架构底层代码)

    使用CodeSmith模板,可以生成ADO.NET实体、Entity Framework实体或者Repository模式的接口和实现,以封装数据库操作。这使得业务逻辑层可以与具体的数据库技术解耦,方便更换或优化数据存储方案。 在使用这个模板时...

    CodeSmith入门教程

    通过以上介绍,我们可以看出CodeSmith是一个非常灵活且强大的代码生成工具,它减少了重复的编程工作,提高了开发效率,尤其适合于需要大量自动生成代码的项目。学习和掌握CodeSmith的使用,对于提升.NET开发效率具有...

Global site tag (gtag.js) - Google Analytics