一種基于數據庫+模板渲染的代碼生成器——簡介及數據庫查詢
為什么要編寫代碼生成器
在《程序員修煉之道-從小工到專家》第二章節部分,提到一種強加的重復,如項目標準要求含有重復信息的文檔,或重復代碼中信息的文檔,書中建議通過信息存放在一處,通過代碼生成器等方式生成其他重復數據,以遵守DRY原則.
DRY原則:Don’t Repeat Yourself。不要重復你自己
區分被動/主動的問題并不重要,重要的是提醒自己可以通過代碼生成器的減少重復度高的工作,將這些工作自動化、標準化,節省有限的時間,提高工作效率。
常見的代碼生成器
在筆者有限的工作年限內,最常見的代碼生成器有:
根據數據庫表結構生成對應的語言源代碼文件;
工作后使用的第一個Web框架是Jfinal,其中最常用的代碼生成器為com.jfinal.plugin.activerecord.generator.Generator,根據數據庫生成程序中使用的Model低層對象,包括Model與 BaseModel。
根據樣式組件生成前端源碼文件
如下圖,該網站據說是可以實現拖動組件后將頁面轉換為html代碼文件。
一種基于數據庫+模板渲染的代碼生成器實現思路
這一思路是個人在學習一個開源框架——若依管理系統時學到的,其系統中的“系統工具——代碼生成”可以根據數據庫表、表結構生成一整套的前后端代碼,包括后端實體類,Mapper類,Service接口與實現,增刪改查相關接口以及相應的mybatis-XML文件,前端的樣式頁面以及接口請求文件等。在項目有快速開發的時候,這一套代碼生成器可以極大的減輕工作量。
下圖為若依系統代碼生成器代碼預覽截圖。
以Java為例,生成器實現步驟大致分為以下幾步:
通過SQL查詢獲取數據庫表結構,列信息等;
將數據庫結構映射為編程語言對象,本例即為Java中的對象;
配置各個功能版塊的模板文件,比如可以使用freemaker,Apache Velocity等模板引擎;
渲染模板,依次輸出文件
本篇暫且介紹第一步內容。
那么,見慣了CRUD的執行語句的你們,知道如何查詢數據庫中的表結構信息嗎?
一個特殊的數據庫:information_schema
通過查詢mysql數據庫中的表信息涉及到一個特殊的數據庫:information_schema,我們可以通過它來獲取所連接的數據庫的基礎信息。
information_schema中存儲了一些什么信息呢?同樣的,我們也需要通過information_schema來獲取:
執行以下SQL:
SELECT * FROM information_schema.`TABLES`
比如在筆者本地數據庫,查詢結果如下:
可以看到,其中羅列了本地數據庫連接中的所有數據庫的表信息,包括數據庫名稱TABLE_SCHEMA,表名TABLE_NAME,數據庫引擎ENGINE,表的數據庫行數TABLE_ROWS等等。
我們在學習數據庫的時候也一定學習過下面的語句:
SELECT DATABASE()
在我們打開的數據庫中執行后,截圖如下:
由此,我們可以通過下面的語句查詢所在數據庫的所有表信息:
SELECT * FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = (SELECT DATABASE())
表信息有了,列信息在哪呢?
我們查看information_schema數據庫,可以看到有一個表為COLUMNS,我們來看一下它存儲了什么信息:
SELECT * FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = (SELECT DATABASE())
執行結果如下:
其中,我們可以清晰的看到表的所有列名信息COLUMN_NAME,列的數據類型DATA_TYPE、COLUMN_TYPE,以及列的注釋信息COLUMN_COMMENT。
如此,我們便獲取了數據庫中所有的表的信息以及其列結構信息。
總結
在人工智能逐漸發展的今天,隨著各個領域業務的逐步完善與統一,大量的開發程序員或許或轉型為AI維護程序員,代碼生成器維護程序員…
待續…
接下去的文章,筆者會繼續介紹如何從查詢出的數據庫表結構信息逐步生成所需要的代碼。
數據庫 渲染
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。