登录 注册
当前位置:主页 > 资源下载 > 50 > 工程实现自动代码生成,玩转模板

工程实现自动代码生成,玩转模板

  • 更新:2024-09-19 23:20:20
  • 大小:7.55MB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:Java - 后端
  • 格式:RAR

资源介绍

简介: 工程自动获取和封装用户自定义参数以及数据库表信息,并通过模板配置文件将生成代码文件直接输出到应用工程目录下,达到从数据库表到页面增删改查过程代码一键生成. 工程提供所有源码,包括第三方jar包也附带源码包 注意事项: 1.需要一定的java开发基础. 2.要有java开发的集成环境,本工程没有界面,很多功能都是通过直接注释,或增加一些代码完成. 3.JDK版本必须是1.6以上,否则会报版本错误.当然也可以更换工程依赖的jar,使用一些低版本的jar包 使用说明: 1. 修改数据库连接参数:详见jdbc.properties 2. 修改或增加数据库字段类型与编译语言数据类型映射:详见dm2java.properties 3. 修改模板配置信息:详见vm.xml 4. 编写用户模板,参考/templates目录下的文件 5. 开启关闭/备份: 调用FileUtilsExt.backup(String[] fileList, String backupDir)方法 6. 还原备份: 调用FileUtilsExt.recover(String backupDir)方法. 7. 从数据库表合成文件: 调用PlayTemplates的main方法 8. 从EXCEL和成文件: 调用ExcelUtils的main方法 详细说明: 1.自动封装用户参数 参数配置文件params.properties有三类参数: 1.1 以array.为前缀参数(可设定设定多个)且用逗号分隔,将封装成数组对象,可循环输出 例如: array.names=xixi, haha 模版调用: #foreach($item in $names) $item #end 输出:xixi haha 1.2 以single.为前缀的参数(可设定设定多个),可在模板中直接调用输出 例如: single.name=xixi 模版调用: $name 输出:xixi 1.3 无任何前缀的参数,为工程要强制使用的参数,必须填写 2. 封装数据库表参数,目前只支持达梦数据库(我们公司自个的数据库),其他数据库以后再完善 如果各位想用其他数据库,可以自己加载其他数据库的驱动,并修改一下DbOption类下的getTableColumns(String)方法中的查询表信息方法 以及添加类似dm2java.properties数据库类型到java数据类型的映射文件,不同数据库的方言和数据映射太烦了. 当然,也可以联系我^_^ 自动从数据库中获取表名/表注释/列名/列注释/列类型等等相关信息 示例:由角色表生成domain对象 模版: package $!{package}.domain; import java.util.Date; /** * $!system * @author $!author * @version $!version * @date $!dateTool.format('yyyy-MM-dd', ${date}) */ public class $!{tableAlias}{ #foreach($item in $columnList) private $!item.data_type $!item.column_name.toLowerCase(); // $!item.column_label #end #foreach($item in $columnList) #set($name = $!item.column_name.toLowerCase()) #set($upperName = $!{stringTool.firstUpperCase($name)}) public void set$!{upperName}($!item.data_type $name){ this.$name=$name; } public $!item.data_type get$!{upperName}(){ return $!{name}; } #end } 输出: package com.diy.domain; import java.util.Date; /** * 一个系统 * @author ydh * @version 1.0 * @date 2013-01-28 */ public class Role{ private String note; // private String role_id; // private String role_name; // public void setNote(String note){ this.note=note; } public String getNote(){ return note; } public void setRole_id(String role_id){ this.role_id=role_id; } public String getRole_id(){ return role_id; } public void setRole_name(String role_name){ this.role_name=role_name; } public String getRole_name(){ return role_name; } } 3. 自定义工具类 通过修改VelocityUtils类实现.可以*用户自定义工具,丰富模板参数的处理,如在日期输出时对其进行格式化输出 例如: VelocityContext context = new VelocityContext(map); context.put("dateTool", new DateTool()); //添加日期工具类 模板调用: $!dateTool.format('yyyy-MM-dd', ${date}) 输出: 2013-01-28 4. 通用工具类 工程中会大量使用apache基金会的通用工具类,使代码更加简洁高效,在其提供的工具类没有的情况下或方法不全(如,对汉字的处理)的情况 增加/扩展某一工具类,一般xxxUtilsExt为文件后缀 随便提一下使用第三方工具类的好处 例如:FileUtils.writeStringToFile(outFile, result, "UTF-8"); 只一句代码就可以将一个字符串写入一个文件,如果我们自己写的话,得这样 打开一个文件,判断是否存在,判断编码类型,写入方式是追加还是覆盖,接着创建流,写入流,关闭流等等没有十几,二十行代码根本搞不定,还不一定见得是对的. 5. 模板的模板 首先,要强调一点,只要可以用文本编辑器编辑的文件都可以是Velocity的模版,无论其文件扩展名是java,xml,c,html等等,工程中以vm后缀作为模板文件类型, 没别的意思,只是一种区分而已. 然后,想想这样一个问题-----如何在已存在的文件中特定的位置上不定期地插入一段代码?(如:在典型的SSH框架的xml配置文件中,陆陆续续的添加Action,Domain,Service) 第一种方法: 解析这个文件,定位到插入位置,插入代码.这对于有严格的文档结构,如xml,是可行的,但对于java文档这样的,解析难度就很大了,而且一个个解析起来也累. 第二种方法: 将该文件作为模板,直接在上面用模板语言书写要插入的代码片段,每次解析完这个模板片段后,再插入这段模版,如此往复.而这些模板片段可以包含在编译语言 的注释块中(不是模版语言的注释块),不会对应用程序造成影响. 第二种方法也就是模板的模板,值得注意的是对注释符的处理. 详细请看,工程示例下的,beans.xml(模版)beans.vm(模板的模板) 模板中对模板的模板调用通用用$!{vmofvm} 6. 备份与还原 由于本工程会直接将生成的代码输入到其他工程目录下,并修改其配置文件.故此,增加这项功能. 你可以放心大胆的使用这个工具生成代码,一点点调试模板,直到完成数据库表到页面增删改成功能代码一键生成. 不满意的可以通过还原功能按时间点还原. 7. 作者信息 工龄: 1.5年 技能: java,C#,html,js,oracle,mysql... 邮箱: ydh110100@163.com QQ: 380314706 工程中的应该会有很多不足之处,注释不清楚或设计逻辑混乱什么的,请多多谅解,麻烦大家替我找bug了. 如果各位有什么问题或是有好的想法,或是编写好了其他数据库方言和数据映射,或是对各种工具类感兴趣,欢迎与我联系!