当前使用版本(必填,否则不予处理)
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
好的,谢谢大佬解惑!!!