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}