最近在搭建一个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&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 = "C:\\Users\\Administrator\\Desktop\\rapid-generator-3.9.2.20100720\\template"; GeneratorFacade g = new GeneratorFacade(); g.getGenerator().addTemplateRootDir(templatePath); //删除生成器的输出目录// g.deleteOutRootDir(); //通过数据库表生成文件 g.generateByTable("user","blog"); // 自动搜索数据库中的所有表并生成文件,template为模板的根目录 // g.generateByAllTable(); // 按table名字删除文件 // g.deleteByTable("table_name", "template"); }
(这个代码的原始版本是从网上得来的,但是网上的那套代码大概是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年后就再无发展,但我也没有找到更好的更流行的工具,对此比较疑惑。对于现在大部分项目都只涉及到增删改查,业务逻辑并不复杂的现状来说,这种基础类自动生成对开发效率的提升还是很有帮助的。不明白对此为什么就再无发展了。
相关推荐
Rapid-Generator的核心功能在于自动生成符合特定模板的Java源代码。它支持多种代码生成模式,包括实体类(Entity)、数据访问对象(DAO)、服务接口(Service Interface)和服务实现(Service Implementation)、...
`generator 自动生成代码工具`是一种高效开发辅助工具,主要用于节省开发者在编写重复性代码上的时间,提升开发效率。这种工具能够根据选定的数据库和表自动生成相应的代码,包括但不限于实体类、DAO接口、Mapper ...
MyBatis Generator(MBG...总之,MyBatis Generator是MyBatis框架的一个强大辅助工具,通过它可以自动化地生成数据库操作相关的代码和注解,极大地提高了开发效率。正确理解和使用MBG,能够使Java开发更加高效、规范。
标题 "mybatis-generator自动生成代码[增加Service的生成]" 指的是MyBatis Generator(MBG)这一工具,它能够根据数据库表结构自动产生Java持久层代码,大大减轻了开发人员的手动编码工作。在描述中提到"增加Service...
总的来说,Rapid-Generator v3.9 是Java开发者的得力助手,通过自动化代码生成,减少了手动编写重复代码的时间,提升了开发速度和代码质量。无论你是初学者还是经验丰富的开发者,它都能帮助你在项目开发中更加...
MyBatis Generator(MBG)是一款强大的自动化代码生成工具,专为简化MyBatis框架的使用而设计。它能够根据数据库表自动生成Java实体类、Mapper接口和XML配置文件,大大提高了开发效率。Eclipse是广受欢迎的Java集成...
总之,"generator代码自动生成工具"是提升SSM项目开发效率的重要辅助工具,通过合理的配置和使用,可以帮助开发者从繁琐的基础代码编写中解脱出来,更好地专注于核心业务的实现,提高软件开发的生产力。在实际开发...
通过mybatis-generator-...连接数据库,通过配置文件自动生成对应表的mybatis的配置文件,a.bat是通过cmd命令运行可执行jar mybatis-generator-core-1.3.1.jar ,通过 generatorConfig.xml的配置生成代码到相应位置.
MyBatis Generator(MBG)是一款强大的代码生成工具,它能够根据数据库表自动创建Java实体类、Mapper接口和XML配置文件,极大地提高了开发效率。在本文中,我们将深入探讨MyBatis Generator的功能、使用方法以及如何...
使用 MyBatis Generator 自动生成 MyBatis 代码 MyBatis Generator 是一个流行的开源工具,用于根据数据库表结构自动生成 MyBatis 的映射文件、实体类、DAO 层和 Service 层等代码。下面是使用 MyBatis Generator ...
在项目开发过程中,一般会用到数据库开发...Generator 代码自动生成工具,是在cy-security项目中,抽取cy-gen插件,在此基础上完成改造。如需了解cy-security更多信息,可访问: https://gitee.com/leiyuxi/cy-security
MyBatis Generator(MBG)是一款强大的代码生成工具,它能够极大地提高开发效率,通过自动创建MyBatis框架所需的Mapper接口、XML配置文件以及Java实体类,减轻了开发者的手动编码工作。MBG的主要功能是根据数据库表...
MyBatis Generator(MBG)是一款强大的自动化代码生成工具,尤其在使用MyBatis作为持久层框架时,它能够极大地提高开发效率。本教程将详细讲解如何在Eclipse环境中利用MBG来自动生成代码。 首先,我们需要理解MBG的...
**JAVA - MyBatis Generator 代码自动生成工具** MyBatis Generator(MBG)是一款强大的Java工具,能够根据数据库表结构自动产生Model类、Mapper接口和XML映射文件,极大地提高了开发效率。这款工具适用于Java...
rapid-generator代码生成器源码
该项目是一款基于Java的代码生成工具——renren-generator,旨在自动生成代码。该工具集成了Java、JavaScript、CSS和HTML等多种编程语言,共包含99个文件,包括31个Java源文件、15个JavaScript文件、11个CSS文件、11...
MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis框架的SQL映射文件、Java模型类以及DAO接口。它极大地提高了开发效率,减少了手动编写这些基础代码的工作量,使开发者能够更专注于业务逻辑的实现。...
MyBatis Generator(MBG)是一款强大的工具,用于自动生成MyBatis框架中的代码,包括实体类、DAO接口以及XML映射文件。它通过解析数据库表结构,自动创建与数据库表对应的Java对象和数据访问层代码,从而极大地提高...
mybatis-generator自动生成代码(含中文注释) 1、打开generatorConfig.xml 2、修改数据库链接地址账号密码 将connectionURL修改为你所需生成的对象的数据库地址,修改用户名userId和密码password 3、修改生成Model类...