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

自做代码生成器(四)举例实践

阅读更多
   我们先定义一个数据表的xml文件,比如系统用户的表system_user,定义的xml文件如下:

system_user.xml

<?xml version="1.0" encoding="GB2312"?>
<table>
 <name>system_user</name>
 <class-name>SystemUser</class-name>
 <short-name>systemUser</short-name>
 <display>系统用户</display>
 <fields>
  <field>
   <label>用户名</label>
   <name>user_name</name>
   <class-name>userName</class-name>
   <type>VARCHAR2</type>
   <class-type>String</class-type>
   <length>20</length>
   <null>0</null>
   <readonly>false</readonly>
   <form-type>text</form-type>
  </field>
  <field>
   <label>密码</label>
   <name>user_password</name>
   <class-name>userPassword</class-name>
   <type>VARCHAR2</type>
   <class-type>String</class-type>
   <length>20</length>
   <null>0</null>
   <readonly>false</readonly>
   <form-type>text</form-type>
  </field>
  <field>
   <label>用户姓名</label>
   <name>user_realname</name>
   <class-name>userRealName</class-name>
   <type>VARCHAR2</type>
   <class-type>String</class-type>
   <length>50</length>
   <null>0</null>
   <readonly>false</readonly>
   <form-type>text</form-type>
  </field>
 </fields>
 <pks>
  <pk>
   <name>user_name</name>
  </pk>
 </pks>
</table>

    这个文件的生成其实可以做成有界面配置的,速度会快一些,只是有些懒所以还没做出来,所以还是得手写了。

    定义好这个数据表,我们先要生成sql语句,生成sql语句的模板文件如下:

create_table.vm

##创建表的SQL语句
#foreach ($table in $list)
##各个字段
#set ($fields = $table.getTableFields())
#set ($pks = $table.getPrimaryKeys())
/*
 创建数据表$table.TableName.toUpperCase()
*/
CREATE TABLE $table.TableName.toUpperCase()
(
#foreach ($field in $fields)
 $field.FieldName.toUpperCase() $field.FieldType.toUpperCase()#if($field.FieldType.toUpperCase().equals("NUMBER") || $field.FieldType.toUpperCase().equals("VARCHAR2") || $field.FieldType.toUpperCase().equals("CHAR"))($field.FieldLen)#end#if($field.FieldNull == 0) NOT NULL#end,  -- $field.FieldLabel
#end
 CONSTRAINT PK_$table.TableName.toUpperCase() PRIMARY KEY (#set($c=0)#foreach($pk in $pks)#if($c!=0),#set($c=1)#end$pk.FieldName.toUpperCase()#end)
);
#foreach($field in $fields)
COMMENT ON COLUMN ${table.TableName.toUpperCase()}.$field.FieldName.toUpperCase() IS '$field.FieldLabel';
#end

#end

#foreach($table in $object)
#set ($fields = $table.getTableFields())
#set ($pks = $table.getPrimaryKeys())
#foreach ($field in $fields)
#if(!$field.FieldSeq.equals(""))
CREATE SEQUENCE $table.TableName.toUpperCase()_SEQ;
#end
#end
#end

    接着需要编写创建sql文件的配置文件:

make_sql.xml

<?xml version="1.0" encoding="GB2312"?>
<auto-coder comment="代码生成器配置文件,创建数据表以及生成java代码">
 <file-path comment="生成代码保存的路径">code\sql</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="单个数据表模板">
 </templates>
 <table-templates comment="多个数据表模板">
  <template comment="生成建表SQL">
   <template-type>other</template-type>
   <template-file>templates\create_table.vm</template-file>
   <java-package></java-package>
   <class-name>create_table.sql</class-name>
  </template> 
 </table-templates>
 <table-file comment="要生成的数据表文件">tables.txt</table-file>
</auto-coder>

    这样,几个配置文件都编写完毕,就可以生成代码了,生成的代码如下:

/

*
 创建数据表SYSTEM_USER
*/
CREATE TABLE SYSTEM_USER
(
 USER_NAME VARCHAR2(20) NOT NULL,  -- 用户名
 USER_PASSWORD VARCHAR2(20) NOT NULL,  -- 密码
 USER_REALNAME VARCHAR2(50) NOT NULL,  -- 用户姓名
 CONSTRAINT PK_SYSTEM_USER PRIMARY KEY (USER_NAME)
);
COMMENT ON COLUMN SYSTEM_USER.USER_NAME IS '用户名';
COMMENT ON COLUMN SYSTEM_USER.USER_PASSWORD IS '密码';
COMMENT ON COLUMN SYSTEM_USER.USER_REALNAME IS '用户姓名';

这里生成的sql可以直接运行创建数据库表。

除了这个,还可以生成java代码,甚至html页面。

[点这里下载例子]

 
分享到:
评论

相关推荐

    DSP:C源程序举例

    总结,学习“DSP:C源程序举例”可以帮助我们掌握C语言在数字信号处理中的应用,通过分析和实践源代码,我们可以深入理解各种DSP算法的实现,并提升我们的编程技能。在实践中,不断学习和迭代,才能更好地应对复杂...

    Java语言程序设计(完整版)第六版 教程示例源码

    Java语言程序设计(完整版)第六版教程示例源码是一个宝贵的资源,为学习者提供了丰富的实践材料。这本书涵盖了从基础到高级的Java编程概念,通过35个章节的示例代码,帮助读者深入理解Java语言的核心特性。下面将详细...

    LEX应用举例 LEX

    LEX 应用举例是 Lex 语言的应用实践,涉及到 Lex 语言的基本概念、语法规则和应用场景。下面我们将详细解释 LEX 应用举例中的知识点。 第一部分:%{和}%中的内容 在 LEX 应用举例中,第一部分是用 %{ 和 }% 包围的...

    java词法分析举例

    总结起来,这个"java词法分析举例"是一个实践性的教学资源,帮助开发者深入理解Java源代码是如何被分解成可操作的单元,为后续的语法分析和代码生成奠定基础。通过这个例子,你可以学习到如何定义和实现词法规则,...

    概括设计模式,举例详解抽象工厂模式

    它们是开发者在长期实践中提炼出来的智慧结晶,旨在提高代码的可读性、可维护性和可扩展性。设计模式大致可以分为三类:创建型模式、结构型模式和行为型模式。 #### 创建型模式 创建型模式关注的是对象的创建机制...

    C#事件 举例

    - 事件是一种特殊的委托类型,通常由类的实例(源对象)生成,由其他对象(订阅者)处理。事件可以防止非订阅者直接访问源对象的方法,确保了代码的安全性和封装性。 - 事件的声明通常包含两个部分:事件委托...

    单片机实践-高速脉冲模式应用举例.pptx

    单片机实践中的高速脉冲模式应用主要集中在利用单片机的PCA(脉宽调制比较器阵列)模块来生成高速方波信号。在这个案例中,我们将关注STC15W4K58S4单片机,它是一款具有LQFP44封装的微控制器,常用于各种嵌入式系统...

    条件编译应用举例.zip

    总的来说,"条件编译应用举例.zip"这个压缩包提供了一个学习和实践条件编译的实例。通过查看源代码(ex41.c)、项目配置(ex41.DSN)以及编译结果(ex41.hex),并参考“重要说明.txt”中的指南,我们可以深入理解...

    uCOS-II所有驱动应用举例

    uCOS-II,全称为Micro C/OS-II,是一款广泛应用的、开源的实时操作系统(RTOS),专为微控制器设计。它以其小巧、高效、可移植性强的特点,在嵌入式开发领域备受青睐。 在uCOS-II中,驱动程序是连接硬件设备与操作...

    j-hi开发平台开发指南

    - **生成器生成原理** 解释了生成器如何根据用户输入和模板生成代码的逻辑过程。 - **配置配置文件** 介绍了如何配置生成器的参数文件,以定制生成的代码风格和结构。 - **服务配置文件** 讨论了生成器与服务端的...

    行业分类-外包设计-基于DOM树抽象的包装器自动生成方法的说明分析.rar

    7. 应用场景:可能会举例说明在实际项目中如何利用这种自动生成的包装器来提高代码质量,比如在前端框架、富客户端应用或者自动化测试中。 8. 案例分析:文件可能包含一些具体的案例,演示如何使用这种方法解决实际...

    ccs3[1].3仿真举例

    3. **编译链接**:完成代码编写后,点击编译按钮,CCS将对代码进行语法检查和优化,并生成可执行的.hex文件。 4. **设置仿真器**:在仿真选项中,选择适合的仿真器模型,如EVM281x评估模块,确保仿真参数设置正确,...

    C++代码规范检测系统的实现方法及其扩展doc

    2.2 语法分析:词法分析后的结果将被送入解析器,生成抽象语法树(AST),帮助理解代码结构和逻辑。 2.3 规则匹配:基于AST,系统应用预定义的编码规范规则进行匹配,找出不符合规范的部分。 2.4 错误报告:当发现...

    lex&yacc示例程序

    `lex`,全称 Lexical Analyzer Generator,是一个词法分析器生成器。它的主要任务是将用户定义的规则转换为C代码,这个生成的C代码能够读取输入的字符流,并根据预设规则识别出不同的词法单元(token)。这些词法...

    单片机课程设计——文件包应用举例.zip

    4. 编程工具的使用,如使用IDE进行代码编写、编译、链接以及生成HEX文件。 5. 烧录和调试技巧,包括如何使用编程器将HEX文件写入单片机,以及如何使用仿真器进行在线调试。 通过深入研究这些文件和实践相关实验,...

    标准函数stdlib.h应用举例.zip

    在这个"标准函数stdlib.h应用举例.zip"压缩包中,我们可以通过几个文件来深入理解这些功能的使用。 首先,`ex37.c` 文件很可能是包含了一些使用`stdlib.h`库函数的实际代码示例。常见的函数可能包括`malloc()`用于...

    单片机课程设计——宏定义应用举例.zip

    通过分析`ex39.c`代码,学习者可以深入理解如何利用宏定义来优化和简化单片机程序,并且熟悉整个开发流程,包括源代码编写、编译、调试以及生成可烧录的`.hex`文件。这样的实践有助于提升单片机开发能力和对C语言的...

    JSP语法大全及举例说明.doc

    同时,随着Java EE技术的发展,如JSF(JavaServer Faces)、Spring MVC等框架提倡的MVC模式,现在的开发实践中更倾向于减少直接在JSP页面中编写Java代码,而是将业务逻辑移至后台控制器和服务层,使JSP更专注于视图...

    Proteus在MCS-51系统中的应用举例

    **Proteus在MCS-51系统中的应用举例** Proteus是一款强大的电子设计自动化(EDA)软件,尤其在微控制器(MCU)的模拟和硬件设计领域中备受推崇。MCS-51,也被称为8051,是英特尔公司推出的一种古老的但依然广泛应用...

    编译原理课后习题答案

    编译过程通常包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。词法分析将源代码分解成词法单元;语法分析根据语法规则构建语法树;语义分析检查程序的逻辑正确性并进行类型检查;中间代码...

Global site tag (gtag.js) - Google Analytics