# jfinal-generator
**Repository Path**: yjinit/jfinal-generator
## Basic Information
- **Project Name**: jfinal-generator
- **Description**: 基于Eclipse插件的代码生成工具(jfinal-generator)。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 7
- **Created**: 2020-01-10
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#jfinal-generator
------------------------
> 1. jfinal-generator支持JFinal官方代码生成策略,同事也支持用于自定义代码生成策略。
> 2. jfinal-generator支持使用多种数据库的数据表来生成代码
> 3. jfinal-generator能生成JFinal的model相关代码,但不仅限于此。
------------------------
### 项目结构
1. generator-api-example 一个自定义代码生成策略的示例
2. generator-api 自定义代码生成策略的依赖api
3. generator-plugin 代码生成工具eclipse插件项目
4. jfinal-manual JFinal手册eclipse插件项目 http://www.jfinal.com/share/267
5. generator-api-enjoy 一个使用JFinal魔板生成代码的例子
------------------------
### 演示效果图
(下面代码的红叉是因为没有引入JFinal的jar包)
** 以JFinal官方的Generator为例,生成BaseModel和Model等相关文件。**

------------------------
### 如何安装插件?
下载插件jar包,复制到eclipse的plugins目录,重启eclipse即可。[jfinal-generator](http://git.oschina.net/itc10/jfinal-generator/raw/master/generator-plugin/release/jfinal-code-eclipse-plugin_1.0.0.201704301118.jar)
* 一手下载资料在JFinal官网中:http://www.jfinal.com/share/271
------------------------
### jfinal-generator的配置项有哪些?
具体的配置项详见 generator-plugin/conf/jfinal-generator.properties
所有的配置项都不是必填的。
------------------------
### 如何开发自定义的代码生成策略?
generator-api-example 是一个使用Freemarker为模板开发的自定义代码生成策略的示例,但这只是个示例,并不严谨,仅供参考。
**另外 generator-api-enjoy 一个使用JFinal魔板生成代码的例子,实现更加简单。**
* 自定义开发代码生成策略步骤很简单:
- 实现generator-api中的Generator接口
```
/**
* Demo For Custom
* @author yaoin
*/
public class FreemarkerGenerator implements Generator {
@Override
public void generate(String templateFileDir, String basePackageName, String javaFileDir, String resourceFileDir,
String jsFileDir, String viewFileDir, Table table) {
// TODO 在这里实现代码生成
}
}
```
- 将Generator接口传过来的Table对象转化成自己想要的数据(table的getListColumn()方法可以获取表的所有列信息)
```
Map root = new HashMap();
root.put("basePackageName", basePackageName);
TableDTO tableDTO = TableDTO.toDTO(table);
root.put("table", tableDTO);
root.put("listColumn", ColumnDTO.toDTO(table.getListColumn()));
```
- 实现代码生成
```
String javaPath = FileUtils.combine(javaFileDir,basePackageName.replace(".", File.separator) + File.separator + tableDTO.getModule() + File.separator + tableDTO.getModelName().toLowerCase());
String viewPath = FileUtils.combine(viewFileDir, tableDTO.getModule() + File.separator + tableDTO.getModelName().toLowerCase());
//
String[][] target = {
{ "baseModel.ftl", FileUtils.combine(javaPath,"/base/"),"Base" + tableDTO.getModelName()+".java" },//baseModel
{ "model.ftl", javaPath, tableDTO.getModelName() + ".java"}, // model
{ "controller.ftl", javaPath, tableDTO.getModelName() + "Controller.java"}, // controller
{ "interceptor.ftl", javaPath, tableDTO.getModelName() + "Interceptor.java"}, // interceptor
{ "validator.ftl", javaPath, tableDTO.getModelName() + "Validator.java"}, // validator
{ "_form.ftl", viewPath, "_form.html"} // _form.html
};
File f = null;
for (int i = 0; i < target.length; i++) {
f = new File(FileUtils.combine(target[i][1], target[i][2]));
if ( !(f.exists() && f.isFile()) ) {
renderTemplateFile(root, templateFileDir, target[i][0], target[i][1], target[i][2]);
}
}
```
------------------------
### 最后的最后
本人对于eclipse插件开发只是处于Hello world阶段,如果代码有不严谨的地方,希望大家提出,谢谢。 :flushed:
* 更多描述详见:http://www.jfinal.com/share/271