`
jy03100000
  • 浏览: 32815 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用Rapid generator 4.0.6 自动生成代码

 
阅读更多


    最近在搭建一个SSH的项目,本着不重复发明轮子的原则,当我发现3层(MVC)架构中基本都是些大同小异的代码时,我就考虑是否可以用代码生成器来帮我自动生成这些代码,网上比较了一下多个代码生成框架,最后决定使用rapid-generator。


    之所以选择rapid-generator是因为这个工具可以独立运行,如果想省心的话,直接下载3.9.2独立运行版(这是2010年放出的最后一个版本,之后这个工具添加了maven支持,其后如何发展我也不甚明了)。下载地址:http://code.google.com/p/rapid-generator/downloads/list。下载下来的包如下图,照着里面的运行说明和生成器特性简要说明,很快就可以测试成功(注意需要配置java环境变量),进而就可以根据自己需求进行配置,自动生成代码了,基本就是3个步骤,1. 修改generator.xml文件里的数据库配置;2. 按需修改template文件夹里的内容;3. 运行rapid-gen.bat



 

      在3.9.2 的template文件夹中,该工具提供了struts2,springmvc,ibatis, hibernate的相应模板,可分别生成model,dao,manager和controller的代码, 包括hibernate的hbm.xml,ibatis的mapper.xml,jsp文件都可以生成。以下是template文件夹中的具体内容,这里值得说明的是,这个文件夹中,除了4个include文件是不能删除的,其他文件都可以根据个人需要进行定制(增删改),包括里面具体的模板文件,自己按需修改就能自动生成需要的代码了。



 

    关于独立运行版的说明就到此为止。到此,我的目的也算基本达成,但是这样开发感觉不顺手,我相信肯定 有朋友和我有同样的感觉,就是希望能在IDE里完成所有的编程操作,而不是额外使用一个工具来生成代码。


    对此,如果你不是和我一样的强迫症一定想用最新版的rapid-generator 4.0.6的话,百度上直接搜索关键字rapid-generator就会有一篇上善若水的博客简单介绍了如何用代码使用rapid-generator,文章中未标明版本,但应该使用3.9的jar包即可完成配置。http://www.cnblogs.com/dyfzwj/archive/2012/08/17/2643914.html。 而如果你非要使用4.0.6的话,下面的内容希望对你有所帮助。


    我进一步调试了这个工具,最后把它变成了一个可以使用的java application,或者直接集成在自己的目标项目里。以下我就将配置过程共享出来。这里顺便提一下,我使用的IDE是NetBeans,如果使用的是Eclipse的话,似乎有1个插件本身就可以做代码自动生成:slave4j(http://code.google.com/p/slave4j/)。还有另一个代码自动生成工具JunJava,生成的项目可以直接导入Eclipse。有兴趣的朋友可以去尝试一下。当然,我以下的配置方法是通用的,无论是用NetBeans还是Eclipse都很容易配置。 PS:下面说明中,括号中的内容是我遇到的一些问题及解决过程,不在意的话可以不看)


   第一步,新建一个maven项目,上文提到过,rapid-generator在4.0之后提供maven支持,我在maven仓库中找到的最新版本是4.0.6。因此第一步是修改pom文件,将rapid-generator的jar包引入:

    

        <dependency>
            <groupId>com.googlecode.rapid-framework</groupId>
            <artifactId>rapid-generator</artifactId>
            <version>4.0.6</version>
        </dependency>

 
   第二步,根据你使用的数据库(需要扫描数据库表,来生成代码),加入驱动包引入,如mysql
                  

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>

 
(前2步如果不是使用maven的话,就自己下载jar包引入即可)

第三步,在classes的根目录创建generator.xml文件
   复制3.9.2的xml文件,修改里面的所有key字段的.为_, 如jdbc.url改为jdbc_url.最终修改了的配置文件如下:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>
        代码生成器配置文件: 
        1.会为所有的property生成property_dir属性,如pkg=com.company => pkg_dir=com/company
        2.可以引用环境变量: ${env.JAVA_HOME} or System.properties: ${user.home},property之间也可以相互引用
    </comment>
	
    <entry key="basepackage">com.minarea</entry>
	
    <!-- jsp namespace: web/${namespace}/${className}/list.jsp -->
    <entry key="namespace">pages</entry>
	
    <entry key="outRoot">.\generator-output</entry>

    <!-- 需要移除的表名前缀,使用逗号进行分隔多个前缀,示例值: t_,v_ -->
    <entry key="tableRemovePrefixes"></entry>
	
    <entry key="jdbc_username">ace-uk</entry>
    <entry key="jdbc_password">tqye2000</entry>
		
    <!-- oracle需要指定jdbc.schema,其它数据库忽略此项配置  -->
    <entry key="jdbc_schema"></entry>
    <entry key="jdbc_catalog"></entry>
	
    <!-- 数据库类型映射  -->
    <entry key="java_typemapping.java.sql.Timestamp">java.util.Date</entry>
    <entry key="java_typemapping.java.sql.Date">java.util.Date</entry>
    <entry key="java_typemapping.java.sql.Time">java.util.Date</entry>	
    <entry key="java_typemapping.java.lang.Byte">Integer</entry>
    <entry key="java_typemapping.java.lang.Short">Integer</entry>
    <entry key="java_typemapping.java.math.BigDecimal">Long</entry>

    <!-- H2 -->
    <!-- <entry key="jdbc.url">jdbc:h2:tcp://localhost/test</entry>
    <entry key="jdbc.driver">org.h2.Driver</entry>
    -->
		
    <entry key="jdbc_url">jdbc:mysql://localhost:3306/minarea?useUnicode=true&amp;characterEncoding=UTF-8</entry>
    <entry key="jdbc_driver">com.mysql.jdbc.Driver</entry>

    <!-- Oracle 	jdbc:oracle:oci:@tnsname_devdb
    <entry key="jdbc.url">jdbc:oracle:thin:@192.168.0.177:1521:[sid]</entry>
    <entry key="jdbc.driver">oracle.jdbc.driver.OracleDriver</entry>
    -->
	
    <!-- SQLServer2000 
    <entry key="jdbc.url">jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=[database]</entry>
    <entry key="jdbc.driver">com.microsoft.jdbc.sqlserver.SQLServerDriver</entry>
    -->
	
    <!-- SQLServer2005 
    <entry key="jdbc.url">jdbc:sqlserver://192.168.0.98:1433;DatabaseName=[database]</entry>
    <entry key="jdbc.driver">com.microsoft.sqlserver.jdbc.SQLServerDriver</entry>
    -->

    <!-- JTDs for SQLServer 
    <entry key="jdbc.url">jdbc:jtds:sqlserver://192.168.0.102:1433/[database];tds=8.0;lastupdatecount=true</entry>
    <entry key="jdbc.driver">net.sourceforge.jtds.jdbc.Driver</entry>
    -->

    <!-- PostgreSql
   <entry key="jdbc.url">jdbc:postgresql://localhost/[database]</entry>
   <entry key="jdbc.driver">org.postgresql.Driver</entry>
    -->
	
    <!-- Sybase
   <entry key="jdbc.url">jdbc:sybase:Tds:localhost:5007/[database]</entry>
   <entry key="jdbc.driver">com.sybase.jdbc.SybDriver</entry>
    -->
	
    <!-- DB2 
    <entry key="jdbc.url">jdbc:db2://localhost:5000/[database]</entry>
    <entry key="jdbc.driver">com.ibm.db2.jdbc.app.DB2Driver</entry>
    -->
	
    <!-- HsqlDB 
    <entry key="jdbc.url">jdbc:hsqldb:mem:generatorDB</entry>
    <entry key="jdbc.driver">org.hsqldb.jdbcDriver</entry>
    -->
	
    <!-- Derby 
    <entry key="jdbc.url">jdbc:derby://localhost/databaseName</entry>
    <entry key="jdbc.driver">org.apache.derby.jdbc.ClientDriver</entry>	
    -->

</properties>

 
(我不得不在这里吐槽,之所以使用3.9.2的xml文件是因为我没有在任何地方找到4.0版本的示例文件,并且没有找到任何相关的文档说明,更关键的是4.0之后的版本跟3.9配置上还还不完全一致,这给后来的配置造成不少麻烦。不修改3.9.2的这个文件的话,运行时,会报一个错误说required property is blank by key=jdbc_url,查看3.9.3的这个文件发现,里面的key是jdbc.url,遂猜测4.0是将所有key中的点全部换成了下划线,我就全都这么改了一遍,然后就程序就跑过去了,之后我查了源码,确实是这样)

第四步,创建code生成类CodeGenerator,就是一个main方法,

public static void main(String[] args) throws Exception {
        String templatePath = &quot;C:\\Users\\Administrator\\Desktop\\rapid-generator-3.9.2.20100720\\template&quot;;
        GeneratorFacade g = new GeneratorFacade();
        g.getGenerator().addTemplateRootDir(templatePath);
        //删除生成器的输出目录//
        g.deleteOutRootDir();
        //通过数据库表生成文件
        g.generateByTable(&quot;user&quot;,&quot;blog&quot;);
       
//        自动搜索数据库中的所有表并生成文件,template为模板的根目录
//        g.generateByAllTable();
//        按table名字删除文件
//        g.deleteByTable(&quot;table_name&quot;, &quot;template&quot;);
}

 
(这个代码的原始版本是从网上得来的,但是网上的那套代码大概是4.0之前的版本,template的目录是在调用generate方法的时候指定的,4.0之后的版本template目录不是这样指定的了,而是使用g.getGenerator().addTemplateRootDir(templatePath);,这一步卡了蛮久,查源码查了半天才找到是这样指定的)

第五步,template文件夹的处理
到maven仓库可以找到最新的template压缩包,其是以jar包的形式放在maven仓库里了,可以直接下载下来,下载链接http://maven.outofmemory.cn/com.googlecode.rapid-framework/rapid-generator-template/4.0.6/。  在任意路径新建template文件夹,将jar包目录rapid-generator-template-4.0.6.jar\generator\template\rapid\share\basic下的5个include文件复制到template文件夹下,挑选jar包中你需要的其他template文件放到template路径文件夹中。将template的路径指定到CodeGenerator中,运行该类,code就会自动生成了。

其他事项:
将生成的代码复制到你的真实项目路径中后,会有很多引用缺失,需要手动去解决这些引用问题,常见的引用问题有:
1. Spring相关jar包的引用
2. Hibernate及hibernate验证jar包的引用
3. Rapid-core的引用
4. Commons-langs的引用错误,生成器默认生成的代码是引用的commons-langs version1的包,而目前我们基本都用到3以上的版本,所以一般需要修改模板文件
5. javacommon.base/util的引用,我个人没有搞清楚到底是什么,网上有人说rapid-framework里有这个包,但我用4.0的版本中并没有,我个人认为这个应该是一个编程的规范写法,将一些基础类和util类放在这2个包里,不需要这2个引用的话可以从java_imports.include,这个文件中删除

以上就是我整个配置过程,其与所使用的编译器基本没有啥关系,配置过程中遇到的问题也都有提到,希望给各位有个参考。目前在写的项目模板文件还未完成,之后成熟了,我会将自己的模板文件放出。


后记:关于代码自动生成,针对generator这个工具而言,似乎10年后就再无发展,但我也没有找到更好的更流行的工具,对此比较疑惑。对于现在大部分项目都只涉及到增删改查,业务逻辑并不复杂的现状来说,这种基础类自动生成对开发效率的提升还是很有帮助的。不明白对此为什么就再无发展了。

 

  • 大小: 121.5 KB
  • 大小: 102.3 KB
  • 大小: 10.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics