JavaWeb代码生成工具 - 基于Apache Velocity模板引擎

需积分: 10 8 下载量 173 浏览量 更新于2024-09-12 收藏 4KB TXT 举报
"这是一个基于Apache Velocity的Java模板引擎编写的代码生成工具,用于JavaWeb项目的开发,可以帮助开发者快速生成源代码。项目包含了base_build原始代码和整理后的版本,并提供了运行和构建的方式。用户可以通过访问特定URL进行使用,但不支持IP访问,登录时需输入作者信息。模板配置文件位于resources/static/template.json,而添加模板的位置在src/main/resources目录下。项目支持Maven构建,可以使用MyEclipse开发工具进行导入。" 详细说明: 1. **JavaWeb项目**:这是一个针对JavaWeb开发的项目,意味着它涉及到服务器端编程、HTTP通信以及可能的数据库交互。JavaWeb是使用Java技术构建Web应用程序的一种方式,它通常包括Servlet、JSP、JavaBean等组件。 2. **代码生成工具**:这个工具利用模板引擎来自动化生成Java源代码,节省了手动编写常见代码的时间,提高了开发效率。通过自定义模板,开发者可以根据数据库表结构自动生成对应的Model类、Service类、Controller类等。 3. **Apache Velocity**:Apache Velocity是一个开源的Java模板引擎,它允许开发者使用简单的模板语言来分离内容和表现。在这个项目中,Velocity被用来解析模板并生成实际的Java源代码。 4. **项目结构**: - `base_build` 文件夹:存放原始未整理的代码,可能包含了项目的初始框架。 - `com.mmk.BaseApplication.java`:主入口类,用于启动项目。 - `run Maven install`:执行此命令可以生成项目打包的jar文件。 - 访问路径:`http://localhost:10001/codeUI/index.html`,这是项目的前端页面,用户可以通过这个URL访问并使用代码生成器。 5. **登录与权限**:登录界面的输入是作者信息,这表明系统可能只有特定的开发者或者团队成员才能访问,存在一定的权限控制。 6. **模板配置**: - `template.json`:存储在`resources/static`目录下,用于定义代码生成的模板规则。 - `src/main/resources`:模板的添加位置,开发者可以在这里定制自己的模板文件。 7. **Maven支持**:项目是基于Maven构建的,这意味着它可以使用Maven的依赖管理和构建功能,如编译、测试、打包等。 8. **开发工具**:推荐使用MyEclipse作为开发工具,它是一个集成开发环境,支持Maven项目导入,便于开发和调试。 9. **字段处理逻辑**:代码示例展示了如何根据数据库字段生成实体类的字段,包括字段名称、类型、注释等,这些都是基于Velocity模板语言动态生成的。 通过这个工具,开发者能够快速地生成符合规范的Java源代码,适应不同的数据库模型,提高开发效率,同时降低了因为人为错误导致的代码质量下降。在使用过程中,如果遇到问题,可以通过QQ或邮件与项目作者联系获取帮助。
2019-04-18 上传
一个不怎么智能,半手工方式的,但最适合实际开发的java代码生成器 核心理念: 为你生成一切,再根据所需手工copy回来工作区 用最精简的代码完成最核心的功能 特性 基于FreeMarker模板语言,并且模板易于修改 基于数据库,内建好数据库的model,并支持多种数据库(mysql,sql server,oracle测试通过) 半手工方式,生成的代码放在某个目录,再手工拷贝回来工作区 易于做二次开发,整个生成器本身就是java源代码,源代码核心十分精简,并且鼓励你修改代码,也可以作为任何语言的代码生成器 配置简单,只有一个配置文件generator.properties 生成器的运行 在eclipse中运行 配置classpath,将generator/lib中的rapid-generator.jar及其它数据库驱动加入classpath 修改generator.xml的数据库连接属性及其它属性 以application的方式运行GeneratorMain类,要生成不同的table,直接修改代码即可 public class GeneratoMain { public static void main(String[] args) throws Exception { GeneratorFacade g = new GeneratorFacade(); //删除生成器的输出目录 g.deleteOutRootDir(); //通过数据库表生成文件,template为模板的根目录 // g.generateByTable("table_name","template"); //自动搜索数据库中的所有表并生成文件,template为模板的根目录 g.generateByAllTable("template"); // g.generateByClass(Blog.class,"template_clazz"); //删除生成的文件 // g.deleteByTable("table_name", "template"); } } 以application方式运行cn.org.rapid_framework.generator.ext.CommandLine 独立版运行 下载standandalone-rapid-generator.zip,解压并运行rapid-gen.bat 生成器讲解 1.生成器模板路径可以引用相关变量 示例:dao/${basepackage_dir}/${className}.java,根据该变量生成输出文件 如果basepackage_dir = com/company/rapid, className=UserInfo 那么完整路径则为:dao/com/company/rapid/UserInfo.java 2.自动搜索某个目录所有模板文件,无需配置 代码生成器模板可以引用的相关变量 1. g.generateByTable("table_name") 方法可以引用的变量 table : cn.org.rapid_framework.generator.provider.db.table.model.Table 2. g.generateByClass("class") 方法可以引用的变量 clazz : cn.org.rapid_framework.generator.provider.java.model.JavaClass 3. g.generateBySql(Sql) 方法可以引用的变量 sql : cn.org.rapid_framework.generator.provider.db.sql.model.Sql 4.公共变量 env : 系统环境变量 System.getProperties() : 直接引用,没有前缀 generator.properties 文件中的所有属性,直接引用,没有前缀 gg : 模板控制变量, cn.org.rapid_framework.generator.GeneratorControl 每个模板有gg变量可以控制自身的自定义配置 (每一个模板都会创建新的gg实例) 如是否生成,是否覆盖目标文件,甚至是生成其它文件 示例: ${gg.setIgnoreOutput(true)}, 参考: rapid_generator_gg 支持生成(gen)及删除操作(del),即生成的代码也可以很方便的删除 3.自动拷贝二进制文件至输出目录 如模板目录下的 zip,rar,doc文件将会自动拷贝至输出目录,不会破坏文件格式 (通过扩展名自动识别) 4.自动删除模板扩展名:.ftl,.vm 举例: 如你有一个模板 SqlMap.xml.ftl 将变为 SqlMap.xml 所以你要生成ftl扩展名的文件,应该将文件名从 list.ftl => list.ftl.ftl 5.模板自动include同级目录:macro.include文件 示例: 如你的模板为 java_src/com/project/UserDao.java, 将自动include: java_src/com/project/macro.include 及 根目录的macro.include 6.generator.xml (或者generator.properties)配置文件 类似ant可以变量引用,引用环境变量使用${env.JAVA_HOME}, 引用System.getProperties()直接引用 2.自动替换generator.properties中的句号(.)为反斜杠,设置key为key+"dir"后缀 示例: pkg=com.company => pkg_dir=com/company 7. 数据库表配置,用于自定义生成器模板引用的table变量 配置文件必须存放在classpath: generator_config/table/table_name.xml (该文件生成器可以生成,自己再自定义修改) <!-- <column sqlName="数据库列名" columnAlias="列的别名" javaType="自定义javaType" unique="是否唯一性约束" nullable="是否可以为空" pk="是否主键,在表没有主键的情况下,可以指定一个代理主键" updatable="是否可以更新" insertable="是否插入" enumString="枚举值,以分号分隔,示例值:M(1,男);F(0,女) 或者是:M(男);F(女)" enumClassName="如果枚举有值,生成的类名称将是这个,没有枚举值,该配置无用.示例值:Sex" />
--> <column sqlName="username" columnAlias="用户名" javaType="String" unique="false" nullable="true" pk="false" updatable="true" insertable="true" enumString="F(1,Female);M(0,Male)" enumClassName="用户枚举" /> <column sqlName="password" columnAlias="password" javaType="String" unique="false" nullable="true" pk="false" updatable="true" insertable="true" enumString="" enumClassName="PasswordEnum" />
生成的代码插入文档的某个部位 如模板输出生成的地方已经有该 同名的文件 存在,并且该文件中有包含"generator-insert-location"标记,则模板生成的内容会插入在该标记之后.该特性对如生成的spring配置内容插入spring配置文件十分有用 创建一个生成器模板文件 在temppate目录创建一个文件,如${className}SpringControler.java 则代码生成器会自动将该模板文件加载并生成该文件 充分利用各种文件的注释 如在.xml中我们可以使用 在.properties文件中我们可以使用 #generator-insert-location 具体请查看template/insert_demo目录的内容 生成器参数配置 通过设置GeneratorProperties.setProperty(key,value)设置相关参数值. 完整的配置参数请查看: rapid-generator/rapid-generator/src/main/java/cn/org/rapid_framework/generator/GeneratorConstants.java 生成器核心类图 Generator为生成器引擎 GeneratorFacade为生成器入口调用类 GeneratorProperties 生成器的相关配置,用于读取generator.properties(或者是generator.xml) TableFactory用于创建Table.java对象,用于GeneratorFacade.generateByTable()使用 SqlFactory用于创建Sql.java对象,用于GeneratorFacade.generateBySql()使用 JavaClass模板变量,用于GeneratorFacade.generateByClass()使用 重复生成代码 现rapid自带的模板都不支持重复生成代码的,如果你需要重复生成代码,可以采用继承机制技巧重复生成。 Java代码的重复生成,善用 "继承机制" , 示例如下: UserInfoBaseDao : 自动生成的代码, 不能手工修改,用于重复生成 UserInfoDao extends UserInfoBaseDao : 存放手工的代码,不能重复生成 页面的重复生成还没有啥好办法。 语法参考: http://freemarker.sourceforge.net/docs/index.html 具体使用请看 在线文档说明 本项目内置模板文件属于 rapid-framework 的一部分 rapid-framework简单介绍: rapid-framework是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hibernate,ibatis,spring_jdbc,flex)搭建好,并内置一个代码生成器,辅助项目开发,可以生成java的hibernat model,dao,manager,struts+struts2 action类,可以生成jsp的增删改查及列表页面 通常代码生成器存在的问题 二次开发困难,没有源码可以修改模板文件的model对象等 过于智能,自动插入我们的项目中,程序员还需考虑旧的代码会不会被覆盖的问题 生成文件的时候让你选要生成那些文件, 而rapid只负责生成代码,这样生成器核心一分精简,没有将存放模板的目录名称及文件名称利用起来,导致还需配置每个模板文件生成的文件名,目录结构