# 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等相关文件。** ![JFinal-Generator-Demo](http://images2015.cnblogs.com/blog/790163/201705/790163-20170504220642132-1768733121.gif "以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