代码生成器rapidframework 快速开发资料Word文档下载推荐.docx
《代码生成器rapidframework 快速开发资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《代码生成器rapidframework 快速开发资料Word文档下载推荐.docx(19页珍藏版)》请在冰点文库上搜索。
2.拷贝rapid-framework至项目根目录
将rapidframework.zip解压出来的内容全部拷贝至项目根目录,拷贝完效果如下.
3.设置项目的编码为utf-8
右键点击项目,修改项目属性
4.设置源码路径
5.将generator/lib的jars加入classpath
点击"
Addjars"
按钮将生成器依赖的jar包需要加入classpath
注:
如果使用Eclipse,需要将web/WEB-INF/lib下jars和Tomcat的servlet-api.jar加入。
6.安装插件hibernate及struts2
项目为插件结构,web框架及dao层需要安装(可以安装不同的web框架或是dao层)
打开plugins/build.xml,并打开eclipse的Outline视图
现运行install_dao_hibernate及install_web_struts2任务,请注意安装顺序
7.在mysql数据库中创建表user_info
在test数据库创建表,运行如下sql
CREATETABLEuser_info(
user_idbigint
PRIMARYKEYAUTO_INCREMENT,
usernamevarchar(50)notnull,
passwordvarchar(50),
birth_datedate,
sexint,
ageint
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
需要自行将数据库中插入相应的数据。
8.修改生成器配置文件generator.xml的jdbc数据库连接信息其它属性暂不修改
<
entrykey="
jdbc.username"
>
root<
/entry>
jdbc.password"
123456<
jdbc.url"
jdbc:
mysql:
//localhost:
3306/test?
useUnicode=true&
amp;
characterEncoding=UTF-8<
jdbc.driver"
com.mysql.jdbc.Driver<
9.运行代码生成器GeneratorMain.java
以application的方式运行cn.org.rapid_framework.generator.GeneratorMain,直接修改源码,在便生成不同的表.
10.拷贝生成的代码至项目根目录,并刷新项目
生成器生成的文件默认会输出在d:
/webapp-generator-output
缺省Hibernate生成代码为注解方式,可以手工选择other目录下生成的XML方式代码进行替换。
11.修改java_src/spring/applicationContext-datasource.xml的数据库连接信息
该配置是应用需要连接的数据库,与生成器的数据库连接是分开配置的,与第8步的数据库连接配置相同即可
beanid="
dataSource"
class="
mons.dbcp.BasicDataSource"
destroy-method="
close"
<
propertyname="
driverClassName"
value="
com.mysql.jdbc.Driver"
/>
url"
characterEncoding=UTF-8"
username"
root"
password"
123456"
/bean>
如果生成代码缺省包不是以com开头,需要修改spring下相关的XML文件。
12.部署应用struts2_demo至tomcat
13.启动tomcat,访问URL:
http:
8080/struts2_demo/pages/UserInfo/list.do
∙核心理念
∙通常代码生成器存在的问题.
∙特性
∙生成器的运行
o在eclipse中运行
o独立版运行
∙生成器讲解
o生成器模板路径可以引用相关变量
o自动搜索某个目录所有模板文件,无需配置
o代码生成器模板可以引用的相关变量
o每个模板有gg变量可以控制自身的自定义配置(每一个模板都会创建新的gg实例)
o支持生成(gen)及删除操作(del),即生成的代码也可以很方便的删除
o自动拷贝二进制文件至输出目录
o自动删除模板扩展名:
.ftl,.vm
o模板自动include同级目录:
macro.include文件
ogenerator.xml(或者generator.properties)配置文件
o十.数据库表配置,用于自定义生成器模板引用的table变量
o生成的代码插入文档的某个部位
∙创建一个模板
o代码template目录结构
o创建一个生成器模板文件
∙生成器参数配置
∙生成器核心类图
∙重复生成代码
∙参考
ogenerateByTable()
ogenerateBySql()
ogenerateByClass()
oGG控制变量参考
otable变量参考
ocolumn变量参考]
osql变量参考
o模板引擎freemarker
核心理念
为你生成一切,再根据所需手工copy回工作区
通常代码生成器存在的问题.
∙二次开发困难,没有源码可以修改模板文件的model对象等
∙过于智能,自动插入我们的项目中,程序员还需考虑旧的代码会不会被覆盖的问题
∙生成文件的时候让你选要生成那些文件,而rapid只负责生成代码,这样生成器核心一分精简
∙没有将存放模板的目录名称及文件名称利用起来,导致还需配置每个模板文件生成的文件名,目录结构
∙具体请查看我写的文章:
为何代码生成器都要这么智能呢?
特性
∙基于FreeMarker模板语言,并且模板易于修改
∙基于数据库,内建好数据库的model,并支持多种数据库(mysql,sqlserver,oracle测试通过)
∙半手工方式,生成的代码放在某个目录,再手工拷贝回来工作区
∙易于做二次开发,整个生成器本身就是java源代码,源代码核心十分精简,并且鼓励你修改代码,也可以作为任何语言的代码生成器
∙配置简单,只有一个配置文件generator.properties
生成器的运行
在eclipse中运行
1.配置classpath,将generator/lib中的rapid-generator.jar及其它数据库驱动加入classpath
2.修改generator.xml的数据库连接属性及其它属性
3.以application的方式运行GeneratorMain类,要生成不同的table,直接修改代码即可
publicclassGeneratoMain{
publicstaticvoidmain(String[]args)throwsException{
GeneratorFacadeg=newGeneratorFacade();
g.deleteOutRootDir();
//删除生成器的输出目录
//
g.generateByTable("
table_name"
"
template"
);
//通过数据库表生成文件,template为模板的根目录
g.generateByAllTable("
//自动搜索数据库中的所有表并生成文件,template为模板的根目录
g.generateByClass(Blog.class,"
template_clazz"
g.deleteByTable("
"
//删除生成的文件
}
}
4.以application方式运行cn.org.rapid_framework.generator.ext.CommandLine
独立版运行
下载standandalone-rapid-generator.zip,解压并运行rapid-gen.bat
独立版下载地址
生成器讲解
生成器模板路径可以引用相关变量
示例:
dao/${basepackage_dir}/${className}.java,根据该变量生成输出文件
如果basepackage_dir=com/company/rapid,className=UserInfo
那么完整路径则为:
dao/com/company/rapid/UserInfo.java
自动搜索某个目录所有模板文件,无需配置
代码生成器模板可以引用的相关变量
1.g.generateByTable("
)方法可以引用的变量
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),即生成的代码也可以很方便的删除
自动拷贝二进制文件至输出目录
如模板目录下的zip,rar,doc文件将会自动拷贝至输出目录,不会破坏文件格式(通过扩展名自动识别)
自动删除模板扩展名:
.ftl,.vm
举例:
如你有一个模板SqlMap.xml.ftl将变为SqlMap.xml所以你要生成ftl扩展名的文件,应该将文件名从list.ftl=>
list.ftl.ftl
模板自动include同级目录:
macro.include文件
如你的模板为java_src/com/project/UserDao.java,将自动include:
java_src/com/project/macro.include及根目录的macro.include
generator.xml(或者generator.properties)配置文件
1.类似ant可以变量引用,引用环境变量使用${env.JAVA_HOME},引用System.getProperties()直接引用
2.自动替换generator.properties中的句号(.)为反斜杠,设置key为key+"
dir"
后缀
pkg=pany=>
pkg_dir=com/company
十.数据库表配置,用于自定义生成器模板引用的table变量
配置文件必须存放在classpath:
generator_config/table/table_name.xml(该文件生成器可以生成,自己再自定义修改)
!
--
tablesqlName="
数据库表名"
className="
类名称"
tableAlias="
表的别名"
columnsqlName="
数据库列名"
columnAlias="
列的别名"
javaType="
自定义javaType"
unique="
是否唯一性约束"
nullable="
是否可以为空"
pk="
是否主键,在表没有主键的情况下,可以指定一个代理主键"
updatable="
是否可以更新"
insertable="
是否插入"
enumString="
枚举值,以分号分隔,示例值:
M(1,男);
F(0,女)或者是:
M(男);
F(女)"
enumClassName="
如果枚举有值,生成的类名称将是这个,没有枚举值,该配置无用.示例值:
Sex"
/>
/table>
-->
user_info"
UserInfo"
>
用户名"
String"
false"
true"
F(1,Female);
M(0,Male)"
用户枚举"
"
PasswordEnum"
生成的代码插入文档的某个部位
如模板输出生成的地方已经有该同名的文件存在,并且该文件中有包含"
generator-insert-location"
标记,则模板生成的内容会插入在该标记之后.该特性对如生成的spring配置内容插入spring配置文件十分有用
创建一个模板
代码template目录结构
如上所示,目录及文件名称可以引用相关变量。
创建一个生成器模板文件
在temppate目录创建一个文件,如${className}SpringControler.java则代码生成器会自动将该模板文件加载并生成该文件
充分利用各种文件的注释如在.xml中我们可以使用<
--generator-insert-location-->
在.properties文件中我们可以使用#generator-insert-location具体请查看template/insert_demo目录的内容
生成器参数配置
通过设置GeneratorProperties.setProperty(key,value)设置相关参数值.完整的配置参数请查看:
生成器核心类图
∙Generator为生成器引擎
∙GeneratorFacade为生成器入口调用类
∙GeneratorProperties生成器的相关配置,用于读取generator.properties(或者是generator.xml)
∙TableFactory用于创建Table.java对象,用于GeneratorFacade.generateByTable()使用
∙SqlFactory用于创建Sql.java对象,用于GeneratorFacade.generateBySql()使用
∙JavaClass模板变量,用于GeneratorFacade.generateByClass()使用
重复生成代码
现rapid自带的模板都不支持重复生成代码的,如果你需要重复生成代码,可以采用继承机制技巧重复生成。
Java代码的重复生成,善用"
继承机制"
示例如下:
UserInfoBaseDao:
自动生成的代码,不能手工修改,用于重复生成
UserInfoDaoextendsUserInfoBaseDao:
存放手工的代码,不能重复生成
页面的重复生成还没有啥好办法。
参考
generateByTable()
通过表(或视图)查询生成代码
generateBySql()
通过sql语句生成代码
generateByClass()
通过javaclass生成代码
GG控制变量参考
gg控制变量
table变量参考
Table.java请使用IE查看table模板变量参考
column变量参考]
Column.java请使用IE查看
sql变量参考
Sql.java请使用IE查看
模板引擎freemarker
语法参考: