Codgen代碼生成器
Codgen是一個(gè)基于數(shù)據(jù)庫元數(shù)據(jù)模型,使用freemarker模板引擎來構(gòu)建輸出的代碼生成器。freemarker的數(shù)據(jù)模型結(jié)構(gòu)通常來說都是一個(gè)Map樹狀結(jié)構(gòu)模型,codgen也不例外,它的數(shù)據(jù)模型這棵樹的根節(jié)點(diǎn)一般包含一個(gè)TableModel(表數(shù)據(jù)模型)對(duì)象。TableModel顧名思義就是由一張數(shù)據(jù)庫表的元數(shù)據(jù)信息組成的一個(gè)數(shù)據(jù)模型,有了這個(gè)數(shù)據(jù)模型,再加上一套使用freemarker編寫的多層架構(gòu)模板,就可以生成一套基于這個(gè)表的多層架構(gòu)代碼文件。
總的來說,codgen具有以下主要功能及特性:- 采用freemarker的構(gòu)建公式:數(shù)據(jù)模型+模板=輸出,默認(rèn)使用freeMarker模板引擎來生成代碼,但可以通過Builder接口實(shí)現(xiàn)其他構(gòu)建方式。
- 核心數(shù)據(jù)模型TableModel基于JDBC實(shí)現(xiàn)表元數(shù)據(jù)及其所有字段列的相關(guān)元數(shù)據(jù)信息的封裝。
- 數(shù)據(jù)模型TableModel基于JDBC實(shí)現(xiàn),可以取得大部分元數(shù)據(jù)信息,個(gè)別信息的取得與具體數(shù)據(jù)庫方言有關(guān),可以通過擴(kuò)展DbProvider來實(shí)現(xiàn)。
- 通過實(shí)現(xiàn)接口ColumnHandler,可以完成JDBC數(shù)據(jù)類型到各種編程語言的類型轉(zhuǎn)換操作及更多復(fù)雜的操作,如處理Oracle的大寫列名以增強(qiáng)列名稱的可讀性。
- 通過配置可以動(dòng)態(tài)增加或重定義數(shù)據(jù)模型,并可以被后面的數(shù)據(jù)模型通過模板語言引用或組裝。
- 構(gòu)建時(shí)指定的模板可以是一段文本字符串,也可以是一個(gè)文件路徑,并且它們的內(nèi)容里都可以引用已定義的數(shù)據(jù)模型。
- 構(gòu)建時(shí)指定的輸出類型可以是文本,也可以是文件,指定的文件輸出路徑也可以引用數(shù)據(jù)模型變量。
- 項(xiàng)目配置引入繼承機(jī)制,這樣就可以重用在父類配置中已定義的數(shù)據(jù)模型及其他配置信息。
- 項(xiàng)目配置信息可以分開多個(gè)配置文件存放,codgen一次性加載并緩存起來以加速之后的訪問。
下圖為基于codgen開發(fā)的一個(gè)代碼生成實(shí)踐示范項(xiàng)目mycodgen:
評(píng)論
圖片
表情
