# 设计一个通用的代码生成方案
代码生成模块 len-generator
采用如下思路:

使用者可通过json配置、数据库表字段结合模板快速生成
快速体验
```
package com.len;
import com.len.generator.metadata.source.JsonSource;
import com.len.generator.metadata.source.MetaDataSource;
import com.len.generator.template.FreemarkerStrTemplateStrategy;
import com.len.generator.template.TemplateRenderer;
import junit.framework.TestCase;
public class QuickTest extends TestCase {
//json配置
final String jsonDataStr="{\n" +
" \"strVar\": {\n" +
" \"name\": \"张三\"\n" +
" },\n" +
" \"objVar\": {\n" +
" },\n" +
" \"arrVar\": {\n" +
" \"items\": [\n" +
" {\n" +
" \"name\": \"张三\",\n" +
" \"age\": 15\n" +
" },\n" +
" {\n" +
" \"name\": \"李四\",\n" +
" \"age\": 18\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";
//模板内容
final String templateString =
"Hello, ${name}! <#list items as item>${item.name} is ${item.age} years old. </#list>";
public void testQuick(){
TemplateRenderer renderer = new TemplateRenderer.Builder()
//引擎
.withTemplateStrategy(new FreemarkerStrTemplateStrategy(templateString))
.build();
String[] render = renderer.render(
new MetaDataSource.Builder<String>()
.source(new JsonSource<>(jsonDataStr))
.build()
);
for (String out : render) {
System.out.println(out);
}
}
}
```
打印如下:

- 郑州程序员组织简介
- 组织期望
- 组织计划
- 组织细则
- 组织问题
- lenosp
- 简介
- 任务
- 本地开发
- 部署篇章
- 如何提交PR?
- 部署启动lenosp
- 工具集
- 问题记录
- freemarker 找不到模板
- div改为iframe
- 会议记录
- 郑州程序员开源组织-组织介绍和计划
- 2023-04-01郑州程序员组织,成员会议讨论内容
- 郑州程序员开源组织第一期里程碑会议
- 2023-04-08 成员讨论内容
- 知识库
- 里程碑教程
- 组织管理人员和成员规范
- idea使用阿里代码格式
- idea2023.1 pojie
- 测试Pull Request
- idea使用阿里代码约束检查
- 提交代码规范
- 组织成员约束
- 里程碑
- 代码生成
- 工作流引擎
- 功能模块
- 多数据源
- 国密支持
