All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mboog.generator.plugins.GraphqlGeneratorPlugin Maven / Gradle / Ivy

There is a newer version: 1.2.4
Show newest version
package mboog.generator.plugins;

import mboog.generator.util.MBGFileUtil;
import mboog.generator.util.MBGStringUtil;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.OutputUtilities;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.internal.util.StringUtility;
import org.mybatis.generator.logging.Log;
import org.mybatis.generator.logging.LogFactory;

import java.io.File;
import java.util.*;

/**
 * 生成Graphql type
 * 

* table property
* targetPackage 存放目录 * graphql true|false default true 生成graphql_type file
* graphqlIgnores 忽略的columns 多个用,号分割 * * @author LiYi */ public class GraphqlGeneratorPlugin extends PluginAdapter { private static Log log = LogFactory.getLog(GraphqlGeneratorPlugin.class); private String targetPackage; private static final String TARGETPACKAGE_PROPERTY_NAME = "targetPackage"; private static final String GRAPHQL_PROPERTY_NAME = "graphql"; @Override public void initialized(IntrospectedTable introspectedTable) { //set targetPackage targetPackage = properties.getOrDefault(TARGETPACKAGE_PROPERTY_NAME, "graphqls").toString(); super.initialized(introspectedTable); } @Override public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { String graphql_pro = introspectedTable.getTableConfiguration().getProperty(GRAPHQL_PROPERTY_NAME); String baseRecordType = introspectedTable.getBaseRecordType(); String graphqlFilePath = String.format("%s/TYPE_%s.graphqls", targetPackage.replace(".", "/"), MBGStringUtil.shortClassName(baseRecordType)); File graphqlFile = MBGFileUtil.getResourcesFile(graphqlFilePath); if ("false".equals(graphql_pro)) { if (graphqlFile.exists()) { // 删除文件 graphqlFile.delete(); } } else { Set ignores = new HashSet<>(); if (graphql_pro != null && !StringUtility.isTrue(graphql_pro)) { for (String ignore : graphql_pro.split(",")) { ignores.add(ignore); } } String graphqlTypeCode = builderGraphqlTypeCode(introspectedTable, ignores); MBGFileUtil.createFile(graphqlFile, graphqlTypeCode); log.debug("Generated file is saved as " + graphqlFile.getAbsolutePath()); } return super.clientGenerated(interfaze, topLevelClass, introspectedTable); } @Override public boolean validate(List warnings) { return true; } /** * 生成 graphql type code * * @param introspectedTable * @param ignores * @return */ private String builderGraphqlTypeCode(IntrospectedTable introspectedTable, Set ignores) { String baseRecordType = introspectedTable.getBaseRecordType(); String baseRecordTypeWithBLOBs = introspectedTable.getRecordWithBLOBsType(); boolean hasWithBLOBs = true; if (baseRecordTypeWithBLOBs == null || introspectedTable.getBLOBColumns().size() <= 1) { hasWithBLOBs = false; } Map> map = new LinkedHashMap<>(); // 常规方式 map.put(MBGStringUtil.shortClassName(baseRecordType), introspectedTable.getAllColumns()); StringBuilder stringBuilder = new StringBuilder(); for (Map.Entry> entry : map.entrySet()) { if (StringUtility.stringHasValue(introspectedTable.getRemarks())) { stringBuilder.append("#").append(introspectedTable.getRemarks()); OutputUtilities.newLine(stringBuilder); } stringBuilder.append("type ").append(entry.getKey()).append("{"); for (IntrospectedColumn column : entry.getValue()) { // 排除忽略的字段 if (ignores.contains(column.getActualColumnName())) { continue; } OutputUtilities.newLine(stringBuilder); if (StringUtility.stringHasValue(column.getRemarks())) { OutputUtilities.newLine(stringBuilder); OutputUtilities.javaIndent(stringBuilder, 1); stringBuilder.append("#").append(column.getRemarks()); } OutputUtilities.newLine(stringBuilder); OutputUtilities.javaIndent(stringBuilder, 1); stringBuilder.append(column.getJavaProperty()).append(" : "); String scalarType = column.getFullyQualifiedJavaType().getShortName(); switch (scalarType) { case "Integer": stringBuilder.append("Int"); break; case "Double": stringBuilder.append("Float"); break; case "Byte": stringBuilder.append("Int"); break; default: stringBuilder.append(scalarType); break; } } OutputUtilities.newLine(stringBuilder); stringBuilder.append("}"); OutputUtilities.newLine(stringBuilder); OutputUtilities.newLine(stringBuilder); } return stringBuilder.toString(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy