预期:一次配置,远离增删改查

在零碎开发过程中,每次写新模块都要一股脑建表、前后台的增删改查,破费了大量工夫做反复工作。因而有了这个工具,次要实现:

  • 生成CRUD前后台代码,放到我的项目中可失常运行
  • 可实用于多种我的项目框架

一些想法

为实现目标性能,我这样设计这个工具。首先,须要一个表和字段的治理。而后用模板文件来出现源码文件性能。最初咱们依据配置好的元数据渲染模板文件产生源文件放到工程中就能够运行了。基于下面的思路,我画了一个简略的图:

这样,一个我的项目配置一次后,就不必反复写增删改查通用性能了,而且实用于所有框架的我的项目工程。


示例

环境:jdk1.8。

  • 下载依赖jackson-databind-2.9.8.jar,jackson-core-2.9.8.jar,mysql-connector-java-8.0.19.jar,freemarker-2.3.30.jar。
  • 工具打包。如果你下载了源码,能够通过mvn package打包。也能够github上下载曾经打好的包。generator-core-1.0.0.jar
  • 在工程中引入下面的包,开始写测试用例。

目前我的项目内置了JDBC解析器和JSON文件解析器帮忙咱们解析表和字段的配置,也能够本人定义。模板渲染引擎应用freemarker,前面会反对更多的模板引擎。通常第一次应用的时候咱们要做以下几步:

1. 抉择解析器和渲染器

如果你相熟关系数据库,就抉择JDBC解析器,也能够用json文件配置;如果你相熟freemarker的模板语法,就应用freemarker的渲染器,也可应用其余模板引擎Thymeleaf、Velocity,所有可依据你喜爱而定。

2. 配置模板

模板的配置没有固定的形式,依据你的工程构造而定的。模板能够是任意字符文件格式,如:html,jsp,java。通常一个工程写一次模板,如果多个工程的框架一样可屡次应用。

3. 配置表和字段

表的配置目前提供三种形式数据库,json,或者本人内置。之后会提供可视化界面。

4.代码示例

最初代码看起来像这样的,测试数据能够在github中找到。

    Renderer renderer = new FreeMarkerRenderer();    String templatePath = "project template path";    String sourcePath = "source code path";        /**     * json + freemarker    */    @Test    public void testFromFileToFreeMarker() {        MetaResolve resolve = new JsonFileResolve("gen.txt");        CRUDGenerator generator = new CRUDGenerator(templatePath, sourcePath, resolve, renderer);        generator.generate();    }        /**     * jdbc + freemarker     */    @Test    public void testFromDBToFreeMarker() {        String url = "jdbc:mysql://xxxx:3306/xxxx?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8";        String username = "username";        String password = "password";        MetaResolve resolve = new JdbcResolve(url, username, password, "com.mysql.cj.jdbc.Driver");        CRUDGenerator generator = new CRUDGenerator(templatePath, sourcePath, resolve, renderer);        generator.generate();    }        /**     * 自定义解析 + freemarker     */    @Test    public void testCustomResole() {        MetaResolve resolve = new MetaResolve() {            @Override            public MetaContext resolveMeta() {                MetaContext context = new MetaContext();                context.setTables(new ArrayList<>());                context.setNamingRules(Constants.RULES_LOWERCASE);                MetaTable table = new MetaTable();                table.setName("user");                context.getTables().add(table);                table.setColumns(new ArrayList<>());                MetaColumn column = new MetaColumn();                column.setName("username");                column.setType("varchar");                column.setLength(100);                table.getColumns().add(column);                MetaColumn column1 = new MetaColumn();                column1.setName("password");                column1.setType("varchar");                column1.setLength(100);                table.getColumns().add(column1);                return context;            }            @Override            public LinkedHashMap<String, String> resolveTypeMap() {                LinkedHashMap<String, String> dbTypeMap = new LinkedHashMap<>();                dbTypeMap.put("varchar", "String");                dbTypeMap.put("int", "Integer");                dbTypeMap.put("tinyint", "Boolean");                return dbTypeMap;            }        };        CRUDGenerator generator = new CRUDGenerator(templatePath, sourcePath, resolve, renderer);        generator.generate();    }

写在前面

首次接入后,咱们的次要工作是在配置表和字段,就能够实现从前端到后端的增加、删除、批改、查问,甚至更多的通用性能。花5分钟就能实现一个模块根本的性能。源代码已上传github点击链接查看,在git上有具体的应用样例, gen.txt是json配置样例,sql.sql是数据库配置的脚本。不足之处,欢送大佬指导,心愿它能够做得更好。
GitHub地址:
https://github.com/BlueSkyT/generator