使用模版引擎FreeMarker生成sql脚本
程序员文章站
2022-07-04 20:27:10
...
技术说明
FreeMarker模板引擎: 即一种基于模板和要改变的数据,
并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。
它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件(主要应用于生成HTML,使用过springboot框架的朋友应该知道template,他们的功能是类似的)。
api:http://freemarker.foofun.cn/
使用场景
业务需求:提供脚本文件模版,根据数据动态的生成对应的可执行脚本文件.
实现效果
提供的脚本模版:
生成的脚本文件:
具体实现
springboot引入依赖
<!-- 引入freemarker依赖 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
代码实现
/**
* 获取文件模版
* @throws Exception
*/
public static void getFile() throws Exception {
// 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
Configuration configuration = new Configuration(Configuration.getVersion());
// 第二步:设置模板文件所在的路径。
configuration.setDirectoryForTemplateLoading(new File("测试文件地址"));
// 第三步:设置模板文件使用的字符集。一般就是utf-8.
configuration.setDefaultEncoding("utf-8");
//configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
// 第四步:加载一个模板,创建一个模板对象。
Template template = configuration.getTemplate("table_ddl.sql");
//template.set
// 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
Map<String,Object> dataModel = new HashMap<>();
List<DaSrcColumn> list = new ArrayList<>();
for(int i=1;i<=5;i++) {
DaSrcColumn dsc = new DaSrcColumn();
dsc.setColumnName("column"+i);
dsc.setColumnType("type"+i);
dsc.setColumnCnName("字段"+i);
dsc.setTableName("user_table"+i);
list.add(dsc);
}
//向数据集中添加数据
dataModel.put("itl_table_name", "user_table1");
//设置不替换的变量
dataModel.put("itl_schema", "${itl_schema}");
dataModel.put("iol_schema", "${iol_schema}");
dataModel.put("etl_dt", "${etl_dt}");
dataModel.put("min_dt", "${min_dt}");
dataModel.put("date_format", "yyyy-MM-dd");
dataModel.put("itl_table_cn_name", "中文名");
//设置循环的数据集合
dataModel.put("columns",list);
// 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
Writer out = new FileWriter(new File("输出文件地址\\table_ddl_create.sql"));
// 第七步:调用模板对象的process方法输出文件。
template.process(dataModel, out);
// 第八步:关闭流。
out.close();
}
//测试方法
public static void main(String[] args) {
try {
getFile();
} catch (Exception e) {
e.printStackTrace();
}
}
小结
虽然只是在java中使用模板引擎,但是却对前端页面有了更深层次的理解,前端页面的动态生成,都需要使用到模板引擎。
模板引擎的使用场景很多,这只是最基本的使用,更复杂的使用还需要根据API对模板进行调整。