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

cn.mybatis.mp.generator.util.GeneratorUtil Maven / Gradle / Ivy

package cn.mybatis.mp.generator.util;

import cn.mybatis.mp.core.mybatis.mapper.context.Pager;
import cn.mybatis.mp.core.sql.executor.chain.DeleteChain;
import cn.mybatis.mp.core.sql.executor.chain.InsertChain;
import cn.mybatis.mp.core.sql.executor.chain.QueryChain;
import cn.mybatis.mp.core.sql.executor.chain.UpdateChain;
import cn.mybatis.mp.core.util.NamingUtil;
import cn.mybatis.mp.db.IdAutoType;
import cn.mybatis.mp.db.annotations.*;
import cn.mybatis.mp.generator.config.ContainerType;
import cn.mybatis.mp.generator.config.EntityConfig;
import cn.mybatis.mp.generator.config.GeneratorConfig;
import cn.mybatis.mp.generator.database.meta.ColumnInfo;
import cn.mybatis.mp.generator.database.meta.EntityInfo;
import org.apache.ibatis.annotations.Mapper;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class GeneratorUtil {

    /**
     * 获取实体类名字
     *
     * @param generatorConfig
     * @param tableName
     * @return
     */
    public static String getEntityName(GeneratorConfig generatorConfig, String tableName) {
        EntityConfig entityConfig = generatorConfig.getEntityConfig();
        if (entityConfig.getNameConvert() == null) {
            entityConfig.nameConvert((table -> NamingUtil.firstToUpperCase(NamingUtil.underlineToCamel(table))));
        }
        return entityConfig.getNameConvert().apply(tableName);
    }


    /**
     * 获取实体类字段名字
     *
     * @param generatorConfig
     * @param columnInfo
     * @return
     */
    public static String getEntityFieldName(GeneratorConfig generatorConfig, ColumnInfo columnInfo) {
        EntityConfig entityConfig = generatorConfig.getEntityConfig();
        if (entityConfig.getFieldNameConverter() == null) {
            return entityConfig.getFieldNamingStrategy().getName(columnInfo.getName(), false);
        }
        return entityConfig.getFieldNameConverter().apply(columnInfo);
    }

    /**
     * 获取实体类字段备注
     *
     * @param generatorConfig
     * @param columnInfo
     * @return
     */
    public static String getEntityFieldRemarks(GeneratorConfig generatorConfig, ColumnInfo columnInfo) {
        EntityConfig entityConfig = generatorConfig.getEntityConfig();
        if (entityConfig.getRemarksConverter() == null) {
            return columnInfo.getRemarks();
        }
        return entityConfig.getRemarksConverter().apply(columnInfo);
    }

    /**
     * 获取列的java 类型
     *
     * @param generatorConfig
     * @param columnInfo
     * @return
     */
    public static Class getColumnType(GeneratorConfig generatorConfig, ColumnInfo columnInfo) {
        Class type = generatorConfig.getEntityConfig().getTypeMapping().get(columnInfo.getJdbcType());
        if (type == null) {
            return Object.class;
        }
        return type;
    }

    /**
     * 构建实体类的imports
     *
     * @param generatorConfig
     * @param entityInfo
     * @return
     */
    public static List buildEntityImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) {
        List classList = new ArrayList<>();
        classList.add(Table.class.getName());
        if (entityInfo.getIdFieldInfo() != null) {
            classList.add(TableId.class.getName());
            classList.add(IdAutoType.class.getName());
        }

        if (generatorConfig.getEntityConfig().getSuperClass() != null) {
            classList.add(generatorConfig.getEntityConfig().getSuperClass());
        }
        if (generatorConfig.getEntityConfig().isLombok()) {
            classList.add(lombok.Data.class.getName());
        }
        entityInfo.getFieldInfoList().forEach(item -> {
            classList.add(item.getType().getName());
            if (item.isNeedTableField()) {
                classList.add(TableField.class.getName());
            }
            if (item.getColumnInfo().isVersion()) {
                classList.add(Version.class.getName());
            } else if (item.getColumnInfo().isTenantId()) {
                classList.add(TenantId.class.getName());
            } else if (item.getColumnInfo().isLogicDelete()) {
                classList.add(LogicDelete.class.getName());
            }
        });
        return buildImports(classList);
    }

    /**
     * 构建实体类的imports
     *
     * @param generatorConfig
     * @param entityInfo
     * @return
     */
    public static List buildMapperImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) {
        List classList = new ArrayList<>();
        if (generatorConfig.getMapperConfig().getSuperClass() != null) {
            classList.add(generatorConfig.getMapperConfig().getSuperClass());
        }
        if (generatorConfig.getMapperConfig().isMapperAnnotation()) {
            classList.add(Mapper.class.getName());
        }
        classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName());
        return buildImports(classList);
    }

    /**
     * 构建Dao接口的imports
     *
     * @param generatorConfig
     * @param entityInfo
     * @return
     */
    public static List buildDaoImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) {
        List classList = new ArrayList<>();
        if (generatorConfig.getDaoConfig().getSuperClass() != null) {
            classList.add(generatorConfig.getDaoConfig().getSuperClass());
        }

        classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName());
        if (entityInfo.getIdFieldInfo() != null) {
            classList.add(entityInfo.getIdFieldInfo().getType().getName());
        }
        return buildImports(classList);
    }

    /**
     * 构建Dao实现类的imports
     *
     * @param generatorConfig
     * @param entityInfo
     * @return
     */
    public static void buildDaoImplImports(GeneratorConfig generatorConfig, EntityInfo entityInfo, Map data) {
        List classList = new ArrayList<>();
        if (generatorConfig.getDaoImplConfig().getSuperClass() != null) {
            classList.add(generatorConfig.getDaoImplConfig().getSuperClass());
        }

        classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName());
        if (entityInfo.getIdFieldInfo() != null) {
            classList.add(entityInfo.getIdFieldInfo().getType().getName());
        }
        classList.add(entityInfo.getMapperPackage() + "." + entityInfo.getMapperName());
        classList.add(entityInfo.getDaoPackage() + "." + entityInfo.getDaoName());

        if (generatorConfig.getContainerType() == ContainerType.SPRING) {
            classList.add(org.springframework.stereotype.Repository.class.getName());
            classList.add(org.springframework.beans.factory.annotation.Autowired.class.getName());
            data.put("repositoryAnnotationName", org.springframework.stereotype.Repository.class.getSimpleName());
            data.put("autowiredAnnotationName", org.springframework.beans.factory.annotation.Autowired.class.getSimpleName());
        } else if (generatorConfig.getContainerType() == ContainerType.SOLON) {
            classList.add(org.noear.solon.annotation.Component.class.getName());
            classList.add(org.noear.solon.annotation.Inject.class.getName());
            classList.add(org.noear.solon.annotation.Init.class.getName());
            data.put("repositoryAnnotationName", org.noear.solon.annotation.Component.class.getSimpleName());
            data.put("autowiredAnnotationName", org.noear.solon.annotation.Inject.class.getSimpleName());
        }
        data.put("imports", buildImports(classList));
    }


    /**
     * 构建Dao接口的imports
     *
     * @param generatorConfig
     * @param entityInfo
     * @return
     */
    public static List buildServiceImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) {
        List classList = new ArrayList<>();
        if (generatorConfig.getServiceConfig().getSuperClass() != null) {
            classList.add(generatorConfig.getServiceConfig().getSuperClass());
        }

        classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName());
        if (entityInfo.getIdFieldInfo() != null) {
            classList.add(entityInfo.getIdFieldInfo().getType().getName());
        }
        return buildImports(classList);
    }

    /**
     * 构建Dao实现类的imports
     *
     * @param generatorConfig
     * @param entityInfo
     * @return
     */
    public static void buildServiceImplImports(GeneratorConfig generatorConfig, EntityInfo entityInfo, Map data) {
        List classList = new ArrayList<>();
        if (generatorConfig.getServiceImplConfig().getSuperClass() != null) {
            classList.add(generatorConfig.getServiceImplConfig().getSuperClass());
        }

        classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName());
        if (entityInfo.getIdFieldInfo() != null) {
            classList.add(entityInfo.getIdFieldInfo().getType().getName());
        }
        classList.add(entityInfo.getDaoPackage() + "." + entityInfo.getDaoName());
        classList.add(entityInfo.getServicePackage() + "." + entityInfo.getServiceName());

        if (!generatorConfig.getServiceImplConfig().isInjectMapper()) {
            classList.add(entityInfo.getMapperPackage() + "." + entityInfo.getMapperName());
            classList.add(QueryChain.class.getName());
            classList.add(UpdateChain.class.getName());
            classList.add(InsertChain.class.getName());
            classList.add(DeleteChain.class.getName());
        }

        if (generatorConfig.getContainerType() == ContainerType.SPRING) {
            classList.add(org.springframework.stereotype.Service.class.getName());
            classList.add(org.springframework.beans.factory.annotation.Autowired.class.getName());
            data.put("serviceAnnotationName", org.springframework.stereotype.Service.class.getSimpleName());
            data.put("autowiredAnnotationName", org.springframework.beans.factory.annotation.Autowired.class.getSimpleName());
        } else if (generatorConfig.getContainerType() == ContainerType.SOLON) {
            classList.add(org.noear.solon.annotation.Component.class.getName());
            classList.add(org.noear.solon.annotation.Inject.class.getName());
            data.put("serviceAnnotationName", org.noear.solon.annotation.Component.class.getSimpleName());
            data.put("autowiredAnnotationName", org.noear.solon.annotation.Inject.class.getSimpleName());
        }
        data.put("imports", buildImports(classList));
    }

    /**
     * 构建Action的imports
     *
     * @param generatorConfig
     * @param entityInfo
     * @return
     */
    public static void buildActionImports(GeneratorConfig generatorConfig, EntityInfo entityInfo, Map data) {
        List classList = new ArrayList<>();
        if (generatorConfig.getActionConfig().getSuperClass() != null) {
            classList.add(generatorConfig.getActionConfig().getSuperClass());
        }

        classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName());

        if (entityInfo.getIdFieldInfo() != null) {
            classList.add(entityInfo.getIdFieldInfo().getType().getName());
        }

        classList.add(entityInfo.getServicePackage() + "." + entityInfo.getServiceName());

        if (generatorConfig.getContainerType() == ContainerType.SPRING) {
            classList.add(org.springframework.web.bind.annotation.RestController.class.getName());
            classList.add(org.springframework.web.bind.annotation.RequestMapping.class.getName());
            classList.add(org.springframework.beans.factory.annotation.Autowired.class.getName());

            data.put("controllerAnnotationName", org.springframework.web.bind.annotation.RestController.class.getSimpleName());
            data.put("requestMappingAnnotationName", org.springframework.web.bind.annotation.RequestMapping.class.getSimpleName());
            data.put("autowiredAnnotationName", org.springframework.beans.factory.annotation.Autowired.class.getSimpleName());
        } else if (generatorConfig.getContainerType() == ContainerType.SOLON) {
            classList.add(org.noear.solon.annotation.Controller.class.getName());
            classList.add(org.noear.solon.annotation.Mapping.class.getName());
            classList.add(org.noear.solon.core.handle.MethodType.class.getName());
            classList.add(org.noear.solon.annotation.Inject.class.getName());

            data.put("controllerAnnotationName", org.noear.solon.annotation.Controller.class.getSimpleName());
            data.put("requestMappingAnnotationName", org.noear.solon.annotation.Mapping.class.getSimpleName());
            data.put("autowiredAnnotationName", org.noear.solon.annotation.Inject.class.getSimpleName());
        }

        if (generatorConfig.getActionConfig().isSave() || generatorConfig.getActionConfig().isUpdate()) {
            if (generatorConfig.getContainerType() == ContainerType.SPRING) {
                classList.add(org.springframework.web.bind.annotation.PostMapping.class.getName());
                data.put("postMappingAnnotationName", org.springframework.web.bind.annotation.PostMapping.class.getSimpleName());
            } else {
                classList.add(org.noear.solon.annotation.Post.class.getName());
                classList.add(org.noear.solon.annotation.Mapping.class.getName());
                classList.add(org.noear.solon.core.handle.MethodType.class.getName());
                data.put("postMappingAnnotationName", org.noear.solon.annotation.Mapping.class.getSimpleName());
            }
        }

        if (generatorConfig.getActionConfig().isGetById() || generatorConfig.getActionConfig().isFind()) {
            if (generatorConfig.getActionConfig().isFind()) {
                classList.add(Pager.class.getName());
            }

            if (generatorConfig.getContainerType() == ContainerType.SPRING) {
                classList.add(org.springframework.web.bind.annotation.GetMapping.class.getName());
                data.put("getMappingAnnotationName", org.springframework.web.bind.annotation.GetMapping.class.getSimpleName());
            } else {
                classList.add(org.noear.solon.annotation.Get.class.getName());
                classList.add(org.noear.solon.annotation.Mapping.class.getName());
                data.put("getMappingAnnotationName", org.noear.solon.annotation.Mapping.class.getSimpleName());
            }
        }


        if (generatorConfig.getActionConfig().isDeleteById()) {
            if (generatorConfig.getContainerType() == ContainerType.SPRING) {
                classList.add(org.springframework.web.bind.annotation.DeleteMapping.class.getName());
                data.put("deleteMappingAnnotationName", org.springframework.web.bind.annotation.DeleteMapping.class.getSimpleName());
            } else {
                classList.add(org.noear.solon.annotation.Delete.class.getName());
                classList.add(org.noear.solon.annotation.Mapping.class.getName());
                data.put("deleteMappingAnnotationName", org.noear.solon.annotation.Mapping.class.getSimpleName());
            }
        }

        data.put("imports", buildImports(classList));
    }

    public static List buildImports(List classList) {
        return classList.stream().filter(item -> !item.startsWith("java.lang")).distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy