1. 程式人生 > >這就是Java程式碼生成器的製作流程

這就是Java程式碼生成器的製作流程

![](https://img2020.cnblogs.com/other/1739473/202007/1739473-20200715123420637-1864456771.png) ## 1. 前言 前幾天寫了篇關於[Mybatis Plus程式碼生成器](https://felord.cn/mybatis-plus-gen.html)的文章,不少同學私下問我這個程式碼生成器是如何運作的,為什麼要用到一些模板引擎,所以今天來說明下程式碼生成器的流程。 ## 2. 程式碼生成器的使用場景 我們在編碼中存在很多樣板程式碼,格式較為固定,結構隨著專案的迭代也比較穩定,而且數量巨大,這種程式碼寫多了也沒有什麼技術含量,在這種情況下程式碼生成器可以有效提高我們的效率,其它情況並不適於使用程式碼生成器。 ## 3. 程式碼生成器的製作流程 首先我們要製作模板,把樣板程式碼的固定格式抽出來。然後把動態屬性繫結到模板中,就像做填空題一樣。所以在這個流程中模板引擎是最合適的。我們通過使用模板引擎的語法將資料動態地解析到靜態模板中去,然後匯出為程式設計中對應的檔案就行了。 另外模板引擎有著豐富的繫結資料的指令集,可以讓我們根據條件動態的繫結資料到模板中去。以**Freemarker**為例: 三元表示式: ``` ${true ? 'checked': ''} ``` 還有我們等下要用的遍歷列表: ``` <#list fields as field> private ${field.fieldType} ${field.fieldName}; ``` 在Java開發中我們常用的模板引擎有**Freemarker**、**Velocity**、**Thymeleaf** ,隨著**Web**開發中前後端分離的流行模板引擎的使用場景正在被壓縮,但是它依然是一門有用的技術。 ## 4. 程式碼生成器演示 接下來,我們以**Freemarker**為例寫一個簡單的程式碼生成器,來生成**POJO**類。需要引入**Freemarker**的依賴。 ```xml ``` ### 4.1 模板製作 **POJO**的結構可以分為以下幾部分: ![Java類的基本結構](https://img2020.cnblogs.com/other/1739473/202007/1739473-20200715123420891-1811398670.png) > `java.lang` 包無需匯入。 所以將這些規則封裝到配置類中: ```java public class JavaProperties { // 包名 private final String pkg; // 類名 private final String entityName; // 屬性集合 需要改寫 equals hash 保證名字可不重複 型別可重複 private f