最近項目快了驗收,那麼接下來就是寫一些比較煩人的文檔,在寫數據庫設計文檔時,到了詳細設計這一塊有點尷尬了,每張表,沒個字段都要寫上去,由於前期沒有整理,所以這個工作量還是很大,我查看了我們的數據庫發現有353張表,這樣寫,得花多久的時間啊。。。於是想通過程序來自動完成,這就是這篇文章的核心。
系列文章:
自動生成數據庫表設計(一)之獲取JDBC獲取元數據
自動生成數據庫表設計(二)之Freemarker的基本使用
自動生成數據庫表設計(三)之製作word模版
本篇主要內容:
1、Word模版的製作
2、結合Freemarker生成word
Word模版的製作
新建moban.doc文檔,並將模版表格(這個格式可以是任意的,根據自己的情況跳整)複製進去,如下:
然後將moban.doc另存爲moban.xml,再將moban.xml拷貝到idea,用idea打開,然後格式化
找到我們文中對應的表名以及其它需要動態生成的信息用Freemarker取變量值的形式替換。這裏可以看到河流以及YJHL這些是需要替換的
當然列也是如此,也是需要替換的
我們再看整體的結構
你可以把大框的內容複製一份,粘貼在下面,然後把moban.xml改名爲moban.doc,用word打開,發現多了一段,這就說明,我們要根據表的數量來循環這部分內容,並替換表信息,同理,我們複製一行發現多了一列,那麼就說明我們也要循環列來獲取表的所有列,並做相應數據的替換。
如下:(其中table表示table的集合,t.COLUMNS表示 ,某張表下的列的集合)
其中表相關信息替換如下:
其中列相關信息替換如下(同上理):
這樣我們就製作好了我們的word模版了,下面開始生成word。
結合Freemarker生成word
public static void main(String[] args) throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");
List<Map> tableList = getTableList(conn);
conn.close();
FtUtil ftUtil = new FtUtil();
Map map = new HashMap<>();
map.put("table", tableList);
ftUtil.generateFile("/", "moban.xml", map, "D:/", "scott.doc");
}
生成文檔如下:
OK,到此爲止利用JDBC+Freemarker生成數據庫詳細設計文檔全部完成。