当前使用版本(必填,否则不予处理)

3.5.3.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

com.baomidou.mybatisplus.generator.query.DefaultQuery#getTables 这里未处理strategyConfig.getNotLikeTable() != null的情况,导致builder.notLikeTable的配置失效

    protected List<DatabaseMetaDataWrapper.Table> getTables() {
        // 是否跳过视图
        boolean skipView = strategyConfig.isSkipView();
        // 获取表过滤
        String tableNamePattern = null;
        if (strategyConfig.getLikeTable() != null) {
            tableNamePattern = strategyConfig.getLikeTable().getValue();
        }
        return databaseMetaDataWrapper.getTables(tableNamePattern, skipView ? new String[]{"TABLE"} : new String[]{"TABLE", "VIEW"});
    }

重现步骤(如果有就写完整)

库中需要包含_rel结尾的表和不以_rel结尾的表,如:(user_info,role_info,user_role_rel)

fastAutoGenerator.strategyConfig((scanner, builder) -> builder.notLikeTable(new LikeTable("_rel")));

报错信息

无报错信息,生成的代码中还是包含了_rel表的代码和资源,builder.notLikeTable的配置未生效

Comment From: huayanYu

欢迎直接PR

Comment From: llb841863085

@huayanYu 已经提交PR,请查阅

Comment From: cyt574

看触发场景就是正常使用的,我这边也确实没法使用。所以这个功能是根本不能用吗?

Comment From: llb841863085

not like这个使用不了,其他的功能暂未发现异常

Comment From: llb841863085

看了下实现,java.sql.DatabaseMetaData#getTables采用的是LIKE方式,而且是SQL规范,所以只能先通过Like获取到对应的表集合之后,再根据NotLike规则对结果集中的表记录进行逐一排除。-----我提交的代码是这样处理的,但是没找到将SQL的模糊匹配转换成正则匹配的工具类,直接用的正则来进行排除的,这个跟Like的规则(SQL模糊匹配)有出入。

Comment From: nieqiurong

元数据的方式暂时不太考虑做这种排除的,看需求把,一般基于表前缀或者表名生成的比较多点.

Comment From: qmdx

使用如下配置解决

addInclude(String...) | 增加表匹配(内存过滤) | include 与 exclude 只能配置一项 ,支持正则匹配、例如 ^t_.* 所有 t_ 开头的表名 -- | -- | -- addExclude(String...) | 增加表排除匹配(内存过滤) | include 与 exclude 只能配置一项 ,支持正则匹配、例如 .*st$ 所有 st 结尾的表名

Comment From: llb841863085

您这样设计之后,就可以使LIKE和NOTLIKE的规则一致了。 将原有的LIKE逻辑(show tables status like %table%)改成正则表达式匹配了。

Comment From: qmdx

您这样设计之后,就可以使LIKE和NOTLIKE的规则一致了。 将原有的LIKE逻辑(show tables status like %table%)改成正则表达式匹配了。

DbQuery 设置为 MysqlQuery 就是你想要的效果,你可以试试、新版本默认改为 jdbc 方式获取了

Comment From: llb841863085

好的,谢谢大佬解惑!!!