首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

FreeMarker 模板引擎實戰場景:代碼生成、郵件/報表模板、靜態頁生成、配置文件渲染

     編輯:程式設計疑難解答

FreeMarker 是**伺服器端模板引擎**,核心價值:**將「資料模型」與「展示邏輯」分離**,輸出任意文字格式(HTML、XML、JSON、SQL、代碼、郵件、配置檔)。

四大經典實戰場景

1. 代碼生成器(最常見)

  • 根據資料庫 Schema 自動生成 Entity、Mapper、Service、Controller、Vue/React 頁面。
  • 模板一次編寫,新表秒級產出規範代碼,消除重複勞動。
  • 工具:MyBatis-Plus Generator、自研代碼生成平台。

2. 動態郵件/通知/報表

  • 行銷郵件:`Dear ${user.name}, 您的優惠碼 ${coupon.code} 即將過期...`
  • 系統通知:站內信、簡訊模板、推送模板統一管理。
  • 定時報表:每日/周/月報表 HTML/PDF,填入查詢結果資料模型。

3. 靜態頁生成(SSG 前身)

  • 電商商品詳情頁、文章頁、分類頁:後台發布時渲染靜態 HTML 存入 CDN/OSS,前端純靜態服務,極致效能、零後端壓力。
  • 配合 Nginx `try_files` 實現動靜分離。

4. 配置文件渲染 / 基礎設施即代碼

  • Nginx、Kubernetes YAML、Docker Compose、Logback、Spring Boot `application.yml` 等配置模板化,部署時注入環境變數渲染。
  • 避免手動改配置出錯,支援多環境(dev/test/prod)一鍵生成。

為什麼不直接 `System.out.println` / 寫檔案?

硬編碼輸出FreeMarker 模板
邏輯與展示耦合,修改格式需改代碼重編譯模板外置,熱加載,業務/前端可獨立維護
複雜迴圈/條件/格式化代碼冗長難讀模板語法簡潔(`${var}`、`<#list>`、`<#if>`)
難以支援多輸出格式(HTML/文本/代碼)同一資料模型,多模板輸出不同格式
無宏/繼承/包含機制,重用差支援 `<#macro>`、`<#include>`、`<#extends>` 結構化重用

最小化 Demo


// Java
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setClassForTemplateLoading(this.getClass(), "/templates");
Template tpl = cfg.getTemplate("welcome.ftl");
Map model = Map.of("user", "Alice", "items", List.of("Apple", "Book"));
try (Writer out = new FileWriter("welcome.html")) {
    tpl.process(model, out);
}


Welcome, ${user}!

    <#list items as item>
  • ${item}

輸出 `welcome.html` 即為渲染結果。**模板即文檔,文檔即模板**,所見即所得。

結論:FreeMarker 不是「輸出到控制台/檔案的工具」,而是**「文字結構化生成的標準化引擎」**,凡是「固定骨架 + 變動資料」的文字產出場景皆適用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved