当前使用版本

代码生成 mybatis-plus-generator 3.5.4 oracle 数据库

该问题是如何引起的?

已是最新版本,代码生成耗时太长了。 开始 mybatis-plus-generator 退回到 3.5.2 就可以了 现在 3.5.2 有了兼容问题,设置 super entity 之后会抛异常 所以只好改回 3.5.4

重现步骤

public class CodeGenerator {

    public static void main(String[] args) {
        generate();
    }

    private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG_BUILDER = new DataSourceConfig.Builder(
            "jdbc:oracle:thin:@ip:port:orcl",
            "ACCOUNT",
            "PASSWORD"
    );

    public static void generate() {
        FastAutoGenerator.create(DATA_SOURCE_CONFIG_BUILDER)
                // 全局配置
                .globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称:")))
                // 包配置
                .packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入完整包名:")))
                // 模板配置
                .templateConfig(builder -> builder.controller("/templates/code/controller.java"))
                // 策略配置
                .strategyConfig((scanner, builder) -> builder

                        .addTablePrefix(getTablePrefix(scanner.apply("请输入表前缀,多个用英文逗号分隔,没有前缀输入 #")))
                        .addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔,所有输入 all")))
                        .controllerBuilder().enableRestStyle().enableHyphenStyle()

                        // Entity 策略
                        .entityBuilder()
                        .enableLombok()
                        // TODO
                        .superClass(PeriodEntity.class)
                        .addSuperEntityColumns("ID", "GMT_CREATE", "GMT_MODIFIED", "IS_DELETED", "PERIOD", "PERIOD_TEXT")

                        // Service 策略
                        .serviceBuilder()
                        .superServiceClass(DataVisualizationService.class)
                        .superServiceImplClass(DataVisualizationServiceImpl.class)

                        // Mapper 策略
                        .mapperBuilder()
                        .superClass(MplusMapper.class)

                        .build())
                .execute();
    }

    private static String[] getTablePrefix(String prefix) {
        if (prefix.contains("#")) {
            return new String[0];
        }
        return prefix.split(",");
    }

    // 处理 all 情况
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
}

报错信息

没有报错,就是耗时很长,可能几分钟,之前排查过,是获取表信息的 sql 语句耗时很长。其他开发者有遇到这个问题的没呢?

Comment From: li-ryer

设置一下数据库名试试 ,new DataSourceConfig.Builder(url, username, password).schema("数据库名")