切换语言为:繁体
idea插件怎么调用databaseTool工具?

idea插件怎么调用databaseTool工具?

  • 爱糖宝
  • 2024-08-27
  • 2049
  • 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.