切換語言為:簡體
idea外掛怎麼呼叫databaseTool工具?

idea外掛怎麼呼叫databaseTool工具?

  • 爱糖宝
  • 2024-08-27
  • 2054
  • 0
  • 0

背景

還是爲了開發腳手架,打算新增一個根據表字段生成程式碼的demo,後續再去結合我們專案用的資料庫生成框架,可以更高效的開發,就考慮使用idea的databasetool外掛,來獲取表資訊

實踐

要呼叫databasetool外掛,首先需要將對應的idea型別改為IU IU是無限制版,IC是社羣版,社羣版是不支援databasetool外掛的

intellij {
    version.set("2022.1.4")
    type.set("IU")
    plugins.set(listOf("com.intellij.java","DatabaseTools","org.jetbrains.idea.maven"))
}

完成之後,在plugin.xml檔案中引入依賴,這樣子就能使用databasetool了

    <id>com.example.SaaSProjectScaffolding</id>
    <depends>com.intellij.modules.platform</depends>
    <depends>com.intellij.modules.lang</depends>
    <depends>com.intellij.modules.java</depends>
    <depends>com.intellij.database</depends>

接下來就是最普通的窗體構建流程了,我們是考慮做在右鍵窗體上

idea外掛怎麼呼叫databaseTool工具? 

所以需要定義action,在右鍵窗體的第一個新增一個新的選項

        <action id="generate-action"
                class="com.example.saasprojectscaffolding.action.MybatisGeneratorMainAction"
                text="Code-Generator"
                description="generator idea plugin">
            <add-to-group group-id="DatabaseViewPopupMenu" anchor="first"/>
        </action>


繼承AnAction

public class MybatisGeneratorMainAction extends AnAction {

    /**
     * 點選後開啟外掛主頁面
     *
     * @param e
     */
    @Override
    public void actionPerformed(@NotNull AnActionEvent e) {
        Project project = e.getProject();
        PsiElement[] tableElements = e.getData(LangDataKeys.PSI_ELEMENT_ARRAY);
        if (tableElements == null) {
            return;
        }
        List<ColGenerateDTO> colGenerateDTOList = new ArrayList<>();
        List<DbTable> dbTables = Stream.of(tableElements).filter(t -> t instanceof DbTable).map(t -> (DbTable) t).collect(Collectors.toList());
        for (DbTable dbTable : dbTables) {
            DasTable dasObject = dbTable.getDasObject();
            JBIterable<? extends DasColumn> columns = DasUtil.getColumns(dasObject);
            JBIterable<? extends DasIndex> indices = DasUtil.getIndices(dasObject);
            int i = 1;
            for (DasColumn column : columns) {
               // 獲取到表的每行結構的資訊
            }
        }
        ClassGenerateDialogWrapper classGenerateDialogWrapper = new ClassGenerateDialogWrapper(project,colGenerateDTOList);
        classGenerateDialogWrapper.show();
    }

最後的效果就是這樣,獲取到對應的欄位名,欄位描述,欄位型別等

idea外掛怎麼呼叫databaseTool工具?

總結

要引入databaseTool外掛,主要的就是要將對應的idea型別改為IU無限制版,然後在引入對應的依賴,在獲取psi元素的時候,收集所有DbTable物件,最後獲取對應的需要的欄位資料即可

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.