-
工程实现自动代码生成,玩转模板
资源介绍
简介:
工程自动获取和封装用户自定义参数以及数据库表信息,并通过模板配置文件将生成代码文件直接输出到应用工程目录下,达到从数据库表到页面增删改查过程代码一键生成.
工程提供所有源码,包括第三方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了.
如果各位有什么问题或是有好的想法,或是编写好了其他数据库方言和数据映射,或是对各种工具类感兴趣,欢迎与我联系!
- 上一篇: PMA规约分析.rar
- 下一篇: 加密狗复制机增强版(加密狗复制软件)