预期:一次配置,远离增删改查
在系统开发过程中,每次写新模块都要一股脑建表、前后台的增删改查,花费了大量时间做重复工作。因此有了这个工具,主要实现:
- 生成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



