MybatisPlus最新代码生成器(3.5.1+)使用教程(3)——指定数据库表详细解析
简介
MybatisPlus最新代码生成器(3.5.1+)使用教程(1)——输出路径详细解析
MybatisPlus最新代码生成器(3.5.1+)使用教程(2)——输出文件名详细解析
MybatisPlus最新代码生成器(3.5.1+)使用教程(3)——指定数据库表详细解析
MybatisPlus最新代码生成器(3.5.1+)使用教程(4)——文件模板解析
前两篇教程说明了如何通过 packageConfig 控制输出路径,以及通过 strategyConfig 控制输出文件名,本文将着重说明如何指定数据库表。
com.baomidou.mybatisplus.generator.IDatabaseQuery 是一个抽象类。它的实现类,同时也是它的内部静态类 DefaultDatabaseQuery,重点分析它的 queryTables 方法。
因为该方法就是扫描数据库表,并获取所需表信息的类。
先来看一下 addInclude 的使用方法展示:
FastAutoGenerator.create("url", "username", "password")
// addInclude 增加包含的表名,可以增加多个
.strategyConfig(builder -> builder.addInclude("ums_administrator"))
.execute();
接着,再来看 addExclude 的使用方法展示:
FastAutoGenerator.create("url", "username", "password")
// addExclude 增加排除表,可以增加多个
.strategyConfig(builder -> builder.addExclude("ums_administrator_role_relation"))
.execute();
首先,总览一下 queryTables() 方法:
其中,
String tablesSql = dbQuery.tablesSql();
根据不同类型的数据库获取不同的基本查询语句,该语句功能就就是查询所有的数据库表;- dbQuery.query 的作用,就是执行sql查询语句,并且查询到的每一行结果交给外层的都 Consumer 来处理。(这个类似访问者模式)
- dbQuery.tableSql() 则是组装查询所有数据库表的sql语句;
对象 dbQuery 的类是 com.baomidou.mybatisplus.generator.config.querys.DecoratorDbQuery,它的 tableSql 方法源码如下:
下表反映的是这段代码涉及到的参数:
StrategyConfig可调参数 | 默认值 | 备注 |
---|---|---|
enableSqlFilter | true | 启用sql过滤,语法不能支持使用sql过滤表的话,可以考虑关闭此开关. |
likeTable | null | 包含表名 |
notLikeTable | null | 不包含表名 |
include | 空 | 指定包含表 |
exclude | 空 | 指定不包含表 |
结论1: 当enableSqlFilter设置为true时,likeTable和notLikeTable配置只能二选一;同样,include和exclude配置也只能二选一
结论2: 当enableSqlFilter设置为true时,include和exclude设置成正则表达式无效!
下面给出 likeTable 的使用示例,notLikeTable 也类似:
FastAutoGenerator.create(properties.getProperty("url"), properties.getProperty("username"), properties.getProperty("password"))
.strategyConfig(builder -> builder.likeTable(new LikeTable("user", SqlLike.DEFAULT))) // 等于 %user%
.execute();
new LikeTable("user", SqlLike.LEFT) // 等于 %user
new LikeTable("user", SqlLike.RIGHT) // 等于 user%
继续来看 queryTables() 的源码:
这段代码,稍稍需要理解的就是这个 matchIncludeTable 和 matchExcludeTable 方法了,跟踪到最内层,就是
如果,用户填写的 include 或者 exclude,如果跟数据库表名相同,就匹配上了,就可以把对应的 TableInfo 加入到 includeTableList 或者 excludeTableList 中了。
!!!但是,如果用户填写的 include 或者 exclude 是正则表达式的话,一定要把 enableSqlFilter 设置为 false!然后,如果数据表名和用户设置的正则表达式匹配上,就算是命中了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix