idea插件怎么调用databaseTool工具?背景 还是为了开发脚手架,打算新增一个根据表字段生成代码的demo,后
背景
还是为了开发脚手架,打算新增一个根据表字段生成代码的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>
接下来就是最普通的窗体构建流程了,我们是考虑做在右键窗体上
所以需要定义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();
}
最后的效果就是这样,获取到对应的字段名,字段描述,字段类型等
总结
要引入databaseTool插件,主要的就是要将对应的idea类型改为IU无限制版,然后在引入对应的依赖,在获取psi元素的时候,收集所有DbTable对象,最后获取对应的需要的字段数据即可
转载自:https://juejin.cn/post/7407274895928754228