若依前端後端分離 程式碼生成修改(1)

2023-04-18 15:01:11

模板引擎修改

2023年3月7日

9:26

# 使用說明
前端 生成設定 包名預設 由ruoyi-generator/src/main/resources/generator.yml 中包名提供
多級目錄 是從組態檔的最後開始算
例如generator.yml 中com.aaa.bbb
前端頁面 包路徑 設定為 com.aaa.bbb.ccc 模組設定為 ccc 功能設定為 zzz 此時為 二級目錄結構 (對應若依後臺管理 左側為2層 最後一層(選單 點選開啟 頁面))
前端頁面 包路徑 設定為 com.aaa.bbb.ccc.eee 模組設定為 eee 功能設定為 zzz 此時為 三級目錄結構 (對應若依後臺管理 左側為3層 最後一層(選單 點選開啟 頁面))

主要設定引數的參照和定義

  1. 表欄位
.vm模板: 引數名 使用位置(.vm模板檔案中) 前端表單表頭 預設值來源 db表: gen_table
packageName package ${packageName}.controller; 生成包路徑 組態檔

Packag

e_name

ClassName和className I${ClassName}Service ${className}Service; - DB 表名 配合組態檔使用 class_name(類名非參照名)
functionName

/**

* 獲取${functionName}詳細資訊

*/

生成功能名 DB表的註釋 function_name
moduleName 模組名 @RequestMapping("/${moduleName}/${businessName}") 生成模組名 組態檔 包名最後一級 module_name
businessName 業務名 生成業務名 組態檔 DB名最後一級 business_name
  1. 列欄位
引數 前端表單表頭 db表: gen_table_column
 
欄位列名
欄位描述
物理型別
Java型別
java屬性
插入
編輯
列表
查詢
查詢方式
必填
顯示型別
字典型別
column_name
column_comment
column_type
java_type
java_field
is_required
is_insert
is_edit
is_list
is_query
query_type
html_type
dict_type

解釋:

a. DB表名 "_" 分割 命名 (windows MySQL 表名全部小寫, 若要區分大小寫,請修改資料庫組態檔)

b. 組態檔所在位置: ruoyi-generator/src/main/resources/generator.yml

c. 預設表欄位引數設定核心程式碼位置: ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java#initTable(...)

d. 預設列欄位引數設定核心程式碼位置: ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java#initColumnField(...)

e. 使用位置只是舉例具體全部 檢視模板檔案

<!-- -->

f. 個人使用的事若依前後端分離版本 3.2.0

模板引擎工作流程

參照來源 :https://oomspot.com/post/ruoyiguanlixitongruoyivuesandaimashengchengqiyuanl

  1. 首先看com.ruoyi.generator.controller.GenControllerimportTableSave 介面,它做了以下這些事情

    a. 從information_schema資料庫的tables表中查詢目標表的表明、標註釋、建立時間和更新時間,但是忽略掉定時任務的表和已經生成過的表。

    b. 初始化表資料並將資料插入ruoyi資料庫的gen_table表

    c. 從information_schema資料庫的columns表中查詢目標表的列資訊,包含欄位名、欄位註釋、欄位型別、是否允許為null等詳細資訊

    d. 初始化列資訊並將資料插入ruoyi資料庫的gen_table_column表

<!-- -->
  1. 接下來看下 com.ruoyi.generator.controller.GenControllerbatchGenCode 介面,它做了以下這些事情

    a. 從ruoyi資料庫的gen_table、gen_table_column表查詢出生成程式碼需要的表和列資訊。

    b. 初始化Velocity

    c. 準備Velocity上下文資訊(變數值資訊)

    d. 讀取模板、渲染模板,然後將渲染後的模板內容新增進如壓縮流,之後前端就可以下載zip壓縮檔案了。

  1. 匯入按鈕 業務流程

    a. 前端 匯入按鈕 傳送請求 http://localhost/dev-api/tool/gen/db/list?pageNum=1&pageSize=10&tableName=liner

    b. controller流程

    1.  獲取前端 要匯入的 tables (陣列) 獲得 DB 表名陣列
    
    2.  查詢DB 獲得 List\<GenTable\> 列表 (此時只封裝了 DB中有的基本 資料)
    
    3.  importGenTable( List\<GenTable\> ) ①設定預設的表欄位資訊 ② 設定預設的列欄位資訊
    

  1. 設定預設的表欄位資訊

initTable(GenTable genTable, String operName)

// 判讀組態檔是否設定除去字首 ,去除字首後 變為類名 全部小寫後 首字母大寫拼接

genTable.setClassName(convertClassName(genTable.getTableName()));

//從組態檔中獲取 包名的設定

genTable.setPackageName(GenConfig.getPackageName());

// 包名的最後一級

genTable.setModuleName(getModuleName(GenConfig.getPackageName()));

//{_}分割命名 DB表名的最後一級

genTable.setBusinessName(getBusinessName(genTable.getTableName()));

//功能名 就是DB表的註釋 如果表中的註釋有 表或若依 替換為""

genTable.setFunctionName(replaceText(genTable.getTableComment()));

//從組態檔中獲取 作者資訊

genTable.setFunctionAuthor(GenConfig.getAuthor());

// SecurityUtils.getUsername(); 登入使用者名稱

genTable.setCreateBy(operName);

  1. 設定預設的列欄位資訊

initColumnField(GenTableColumn column, GenTable table) 方法主要做的事

根據 DB欄位名 (例first_name), 欄位型別(例int(11)), 註釋(曾用名), 約束(not null,主鍵...) 推斷出

Java型別 , java屬性, 插入, 編輯, 列表, 查詢, 查詢方式, 必填, 顯示型別, 字典型別 這些欄位的值

  1. 程式碼生成業務流程

    a. 預覽

    b. 下載 只修改下載路徑和匯入路徑

    c. 儲存到相關目錄