`
CnXiaowei
  • 浏览: 48032 次
社区版块
存档分类
最新评论

自做代码生成器(二)规则格式定义

阅读更多
   首先是数据表和java类之间的转换规则,数据库以oracle举例,我一般的命名方式是这样,表的名字是 表前缀_表含义 这种,比如手机杂志项目有个文章表,表的名字就叫做magazine_article,而类的名字就叫做MagazineArticle,字段也是一样,比如有个字段叫做article_title,相应的变量名就是articleTitle。当然这些规则以后是可以手动修改的。

    接着就是考虑生成代码需要获取的信息,这些信息当然是最好保存在配置文件里,比如可以定义如下xml文件:


<?xml version="1.0" encoding="GB2312"?>
<auto-coder comment="代码生成器配置文件">
 <file-path comment="生成代码保存的路径">gen</file-path>
 <database comment="数据库配置">
  <driver>oracle.jdbc.driver.OracleDriver</driver>
  <url>jdbc:oracle:thin:@192.168.0.186:1521:testdb</url>
  <username>wap</username>
  <password>a123</password>
  <dbflag comment="是否从数据库读取">false</dbflag>
 </database>
 <templates comment="单个数据表模板">
  <template>
   <template-type>java</template-type>
   <template-file>dao.vm</template-file>
   <java-package></java-package>
   <class-name>CLASSNAMEDAO.xml</class-name>
  </template>
 </templates>

 <table-templates comment="多个数据表模板">
  <template>
   <template-type>other</template-type>
   <template-file>create.vm</template-file>
   <java-package></java-package>
   <class-name>create.sql</class-name>
  </template> 
 </table-templates>
 <table-file comment="要生成的数据表文件">tables.txt</table-file>
</auto-coder>

    由于我们想要生成的不仅仅java代码,还可能是建表sql,配置文件等待,所以这里设定了两种模板,一种是一个数据表对应一个生成文件的模板,另外一种是所有数据表对应一个生成文件的模板。利用第一个模板,我们可以生成数据类、数据访问类等等代码,而利用第二个模板,可以生成建表语句、struts或者webwork的配置文件等等。

    数据库的属性里面有一项是“dbflag”,表示是否从数据库读取数据,这里默认,如果这项是true,则从数据库获取相应的字段信息,一般我用它来生成数据库结构对应的xml文件。如果这项是false,则从tables/xxx.xml文件中获取数据表的各种信息,我大多数是首先用读数据库的方式生成相应的数据库表结构的xml文件,接着修改生成的xml文件,比如加入注释等,然后再根据这些xml文件来生成代码和建表的sql语句。

    数据表的xml文件定义也是自己定义的,生成xml文件的模板是这样:


<?xml version="1.0" encoding="GB2312"?>
<table>
 <name>$table.TableName</name>
 <class-name>$table.TableClassName</class-name>
 <short-name>$table.TableShortName</short-name>
 <display>$table.TableClassName</display>
 <fields>
##各个字段
#set ($fields = $table.getTableFields())
#set ($pks = $table.getPrimaryKeys())
#foreach($field in $fields)
  <field>
   <label>$field.FieldClassName</label>
   <name>$field.FieldName</name>
   <class-name>$field.FieldClassName</class-name>
   <type>$field.FieldType</type>
   <class-type>$field.FieldClassType</class-type>
   <length>$field.FieldLen</length>
   <null>$field.FieldNull</null>
   <readonly>$field.ReadOnly</readonly>
   <form-type>text</form-type>
  </field>
#end
 </fields>
 <pks>
#foreach($pk in $pks)
  <pk>
   <name>$pk.FieldName</name>
  </pk>
#end
 </pks>
</table>

    其实完全可以利用hibernate的格式来定义表的结构,但相对来说难度稍微大了点,配置选项太多,所以只好简化很多东西,留下最基本的东西了。

    自己定义好了配置文件和表信息文件的格式,接下来的工作就是读取配置文件--->获取数据表信息---->根据配置模板生成代码。

 
分享到:
评论

相关推荐

    代码生成器

    编辑功能,会根据字段类型,验证规则生成不同的编辑模式,比如日期类型用datebox,数字类型就用numberbox,必填的验证可以实现 查询功能,会根据字段类型的不同生成不同的控件方便操作,datebox,combox Excel导入...

    TOPTP v1.0纯净版(for ThinkPHP2.1RC1)-ThinkPHP代码生成器

    TOPTP代码生成器的出现将给我们带来哪些方便? 大家也许都有同感。 ThinkPHP目录层次太多。 配置一个分组后,要在lib/Action下建立分组文件夹,又要在Tpl/default下建立分组文件夹。每建立一个模块 (Action文件)...

    dotnetcoding ORM 代码生成器

    最终开发人员一般只需要在业务规则层扩展相关业务规则的编码,对自动生成的界面进行少量的调整,在UI界面工程里添加少量的控制代码. 采用此开发平台,能够复用成熟的开发架构,自动生成所有非商业有关的代码,在公司...

    编译原理三地址代码生成C++实现

    这是一个关于C语言的一个编译器设计的一部分,生成了三地址中间代码,C++实现。应该是不错的,您下了不后悔。

    .net ORM 代码生成器 v1.1

    将一个解决方案分解为6个Project,分别是通用类库, 通用控件库,数据访问工程,业务规则工程,项目专用控件工程,UI界面工程,整个方案根据已经设计好的数据库自动生成,在生成的过程种可以灵活的定义生成参数 ...

    实体生成器:带有GUI的Laravel代码生成器

    生成字段验证规则 例 创建迁移 添加验证规则 将数据库架构转换为Laravel迁移 自动将文档添加到Model 在线部署PHP代码 仅在local环境中可用! 下载 将其解压缩到您的Laravel项目的公共文件夹中 访问 安装PHP 点击...

    Java代码生成器 — IDEA插件Easy Code

    |- 基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml); |-只要是与数据库相关的代码都可以通过自定义模板来生成;支持数据库类型与java类型映射关系配置; |-支持同时生成生成多...

    Java编写的一个类C语言编译器(词法分析,语法分析,语义分析和目标代码生成).zip

    - 实现目标代码生成器,将中间代码或AST转换为可执行代码。 - 生成目标代码。 **技术要求**: - 熟悉Java编程语言。 - 了解编译原理中的词法分析、语法分析、语义分析和目标代码生成概念。 - 熟悉自动机理论、形式...

    gengo:gengo库,用于代码生成

    发电机/ 程序包生成器定义了供代码生成器实现的接口以及将执行这些代码生成器的机器。类型/ 包类型包含类型系统定义。 它是按照Go的类型系统建模的,但是如果您要编写解析器/转换器,则可以通过解析其他内容来生成...

    华中科技大学 编译原理 面向过程的C语言的编译器设计 含有词法分析和语法分析、语义分析、中间代码生成的 源码.zip

    华中科技大学 编译原理 面向过程的C语言的编译器设计 功能包括:词法分析和语法分析、语义分析、中间代码生成的 源码 题目:c--语言编译器设计与实现(请为自己的编译器命名) 源语言定义:或采用教材中Decaf语言,...

    EasyCode是基于IntelliJ IDEA开发的代码生成插件

    EasyCode是基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。支持同时生成生成多...

    基于IntelliJ IDEA Ultimate版开发的一个代码生成插件,主要通过自定义模板来生成各种你想要的代码

    EasyCode是基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。支持同时生成生成多...

    Python程序设计:函数定义与调用.pptx

    我们将从本任务出发,较为系统的学习Python中函数的定义、调用、函数的形参定义、函数的参数传递以及匿名函数和生成器函数等内容,并掌握相关的配套案例。 任务 IQ智商测试 任务知识点 函数定义与调用 函数参数 匿名...

    基于Python的DbFaker数据生成器源码

    项目名称:DbFaker - 基于Python的数据生成器 项目简介: DbFaker是一个基于Python开发的数据生成工具,旨在数据库层面批量生成具有逻辑关联的仿真数据。该项目由纯Python代码编写,结合Shell脚本,提供了高效、...

    jeecg-framework-3.1.0.RELEASE

    简介 JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发平台,引领新开发模式(手工MERGE半智能开发),...待推出功能:分布式部署,云计算,移动平台开发,规则引擎,代码生成器(eclipse插件) 要求JDK1.6+

    基于C语言的词法分析器的生成程序.zip

    基于C语言的词法分析器的生成程序 基于C语言的词法分析器的生成程序是一个能够根据特定的词法规则生成词法分析器...此外,这个项目对于希望进入编译器设计、程序分析和代码生成等领域的人来说,是一个很好的实践机会。

    EasyCode是基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)

    EasyCode是基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。支持同时生成生成多...

    《编译原理》 清华 第二版

    8.10 TINY代码生成器的简单优化 366 8.10.1 将临时变量放入寄存器 366 8.10.2 在寄存器中保存变量 367 8.10.3 优化测试表达式 367 练习 368 编程练习 371 注意与参考 372 附录A 编译器设计方案 373 附录B 小型编译器...

    编译原理中文版

    8.10 TINY代码生成器的简单优化 366 8.10.1 将临时变量放入寄存器 366 8.10.2 在寄存器中保存变量 367 8.10.3 优化测试表达式 367 练习 368 编程练习 371 注意与参考 372 附录A 编译器设计方案 373 附录B 小型编译器...

Global site tag (gtag.js) - Google Analytics