這就是Java程式碼生成器的製作流程
阿新 • • 發佈:2020-07-15
![](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