FreeMarker简介

1、概述

  • 输出内容 = 数据模型 + 模板
  • 组成部分:
  1. 文本:文本会照着原样来输出
  2. 插值:这部分的输出会被数据模型中的值来替换,插值方式 ${value}
  3. FTL 标签:类似html标签,是FreeMarker的指令<# 指令>...</# 指令>, 不会被打印在输出在内容中
  4. 注释:类似html注释, <#-- 注释 -->

2、数据模型

  • FreeMarker的数据模型就是key-vale对象,一般写作dataModel
  • 要求dataModelkey必须为Stringvalue可以是其他的标量类型,有些需要在模板中用内建函数标注进行插值。

3、模板

模板常用指令介绍

1、列表

<#list dataList as item >
${item.attr1}
${item.attr2}
...
</#list>

2、判断

<#if item<0 >
...
<#elif item==0 >
...
<#else>
...
</#if>

3、循环跳出指令

<#break>

4、 自定义变量

<#assign var = item[内建函数] > 5、导入模板内容

<#include "模板文件相对路径">

注意:在标签内不要使用插值符号${},直接写key值
模板常用内建函数

内建函数参考手册

4、配置


Created with Raphaël 2.2.0 开始 创建一个 Configuration 实例 指定加载器把模板加载到缓存 获取模板 获取数据模型 处理模板 结束


  • 加载器部分可以使用文件加载器也可以使用字符串加载器
  • 处理模板可以选着输出到控制台也可选择输出到文件
  1. 创建配置器实例
//1 创建配置对象
Configuration cfg = new Configuration();
  1. 指定加载器,把模板加载到配置器缓存,同时获取模板

1) 创建文件路径加载器

FileTemplateLoader fil = new FileTemplateLoader(new File("templates"));//填写模板目录的相对路径即可
cfg.setTemplateLoader(fil);
// 从模板路径下获取模板文件
Template template = cfg.getTemplate("template.ftl");

2)字符串加载器(不常使用,直接使用字符串模板)

FileTemplateLoader fil = new FileTemplateLoader(new File("templates"));//填写模板目录的相对路径即可
cfg.setTemplateLoader(fil);
// 自定义字符串模板
String templateString = "欢迎您:${username}";
// 使用 Template 构造函数创建模板
Template template = new Template("name",new StringReader(templateString),cfg);
  1. 获取数据模型
// 获取数据模型
// 可以使用 put()方法加入数据
Map<String,Object> dataModel = getDataModel();
  1. 处理模板
  • 输出结果到文件
// 创建输出的文件对象
File file = new File(".\\output\\out.mb");
file.mkdirs();// 注意异常处理
// 构造FileWriter
FileWriter fw = new FileWriter(file);
// process()方法第一个参数为数据模型、第二个参数为Writer
template.process(dataModel,fw);
  • 输出结果到控制台
// 第二个参数是PrintWriter
template.process(dataModel,new PrintWriter(System.out));
  • 总结
    FileWriter 输出到文件
    PrintWriter 输出到控制台

5、总结

  • 简单介绍了FreeMarker的使用,为代码生成器的构建做好准备。
  • 理解FreeMarker的核心就是:输出 = 模型 + 模板