001package cn.mybatis.mp.generator;
002
003
004import cn.mybatis.mp.generator.config.GeneratorConfig;
005import cn.mybatis.mp.generator.database.meta.EntityInfo;
006import cn.mybatis.mp.generator.database.meta.TableInfo;
007import cn.mybatis.mp.generator.database.meta.TableMetaDataQuery;
008import cn.mybatis.mp.generator.template.ITemplateBuilder;
009import cn.mybatis.mp.generator.template.engine.FreemarkerTemplateEngine;
010import cn.mybatis.mp.generator.template.engine.TemplateEngine;
011import cn.mybatis.mp.generator.util.RuntimeUtils;
012
013import java.sql.Connection;
014import java.sql.SQLException;
015import java.util.List;
016import java.util.regex.Pattern;
017import java.util.stream.Collectors;
018
019public class FastGenerator {
020
021    private final GeneratorConfig generatorConfig;
022
023    public FastGenerator(GeneratorConfig generatorConfig) {
024        this.generatorConfig = generatorConfig;
025    }
026
027    public void create() {
028        List<EntityInfo> entityInfoList;
029        try (Connection connection = generatorConfig.getDataBaseConfig().getConnection()) {
030            TableMetaDataQuery tableMetaDataQuery = new TableMetaDataQuery(generatorConfig, connection);
031            List<TableInfo> tableInfoList = tableMetaDataQuery.getTableInfoList(!generatorConfig.isIgnoreTable(), !generatorConfig.isIgnoreView());
032            if (!generatorConfig.getTableConfig().getExcludeTables().isEmpty() || !generatorConfig.getTableConfig().getIncludeTables().isEmpty()) {
033                tableInfoList = tableInfoList.stream().filter(tableInfo -> {
034                    return !generatorConfig.getTableConfig().getExcludeTables().stream().anyMatch(item -> item.equalsIgnoreCase(tableInfo.getName()) || Pattern.matches(item, tableInfo.getName().toLowerCase()));
035                }).filter(tableInfo -> {
036                    return generatorConfig.getTableConfig().getIncludeTables().stream().anyMatch(item -> item.equalsIgnoreCase(tableInfo.getName()) || Pattern.matches(item, tableInfo.getName().toLowerCase()));
037                }).collect(Collectors.toList());
038            }
039            entityInfoList = tableInfoList.stream().map(item -> new EntityInfo(generatorConfig, item)).collect(Collectors.toList());
040        } catch (SQLException e) {
041            throw new RuntimeException(e);
042        }
043
044
045        TemplateEngine templateEngine = generatorConfig.getTemplateEngine();
046        templateEngine = templateEngine == null ? new FreemarkerTemplateEngine() : templateEngine;
047        for (EntityInfo entityInfo : entityInfoList) {
048            for (Class<? extends ITemplateBuilder> templateBuilderClass : generatorConfig.getTemplateBuilders()) {
049                ITemplateBuilder templateBuilder = null;
050                try {
051                    templateBuilder = templateBuilderClass.getConstructor(GeneratorConfig.class, EntityInfo.class).newInstance(generatorConfig, entityInfo);
052                } catch (Exception e) {
053                    throw new RuntimeException(e);
054                }
055                if (templateBuilder.enable()) {
056                    templateEngine.render(templateBuilder);
057                }
058            }
059        }
060
061        if (generatorConfig.isFinishOpen()) {
062            RuntimeUtils.openDir(generatorConfig.getBaseFilePath());
063        }
064    }
065}