在pringboot集成mybatis-plus 进行逆向工程生成代码时,连接DB2数据库,数据库中表是存在的,但是生成代码时缺找不到表
包配置:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
java代码:
FastAutoGenerator.create("jdbc:db2://localhost:50000/database", "db2inst1", "123456")
.globalConfig(builder -> {
builder.author("sd")
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.disableOpenDir()
.outputDir("C:\\Users\\Administrator\\IdeaProjects\\odsproc\\src\\main\\java"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.qsnxods") // 设置父包名
.moduleName(null) // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml,"C:\\Users\\Administrator\\IdeaProjects\\odsproc\\src\\main\\resources\\mapper"));
})
.strategyConfig(builder -> {
builder.entityBuilder().enableLombok();
builder.controllerBuilder().enableHyphenStyle() // 开启验峰转连字符
.enableRestStyle(); // 开启生成@RestControlLer 控制器
builder.addInclude("TB_MENU") // 设置需要生成的表名
.enableSchema()
.enableCapitalMode()
.addTablePrefix("TB_"); // 设置过滤表前缀
})
.execute();
运行提示表不存在:
08:48:50.718 [main] WARN org.apache.velocity.deprecation - configuration key 'file.resource.loader.unicode' has been deprecated in favor of 'resource.loader.file.unicode'
08:48:50.720 [main] WARN org.apache.velocity.deprecation - configuration key 'file.resource.loader.class' has been deprecated in favor of 'resource.loader.file.class'
08:48:51.237 [main] DEBUG com.baomidou.mybatisplus.generator.config.querys.DB2Query - 执行SQL:SELECT * FROM SYSCAT.TABLES where tabschema=current schema AND TABNAME IN ('TB_MENU')
08:48:51.283 [main] DEBUG com.baomidou.mybatisplus.generator.config.querys.DB2Query - 返回记录数:0,耗时(ms):45
08:48:51.287 [main] WARN com.baomidou.mybatisplus.generator.IDatabaseQuery$DefaultDatabaseQuery - 表[TB_MENU]在数据库中不存在!
数据库表:
手动执行代码生成器的SQL语句,可以查询到结果
Mybatis-Plus是一个基于Mybatis的增强工具,它提供了许多便捷的功能来简化开发过程。在使用Mybatis-Plus进行逆向工程时,有时会遇到连接DB2数据库后找不到表的问题。本文将介绍可能导致这个问题出现的原因,并提供相应的解决方法。
检查数据库连接配置 首先,我们需要确保数据库连接配置正确无误。在Mybatis-Plus的配置文件中,通常会有一个application.properties或application.yml文件,其中包含了数据库相关的配置信息。请检查以下几个方面:
驱动程序是否正确配置:确保使用的是DB2数据库的驱动程序,并且其版本与数据库兼容。
连接URL是否正确:根据DB2数据库的实际情况,配置正确的连接URL,包括主机名、端口号、数据库名等信息。
用户名和密码是否正确:确保使用正确的用户名和密码进行数据库连接。
检查数据库权限
如果数据库连接配置正确,但仍然找不到表,可能是由于当前用户没有足够的权限访问数据库中的表。请确保当前连接数据库的用户具有读取表的权限。可以尝试使用数据库管理员账户连接数据库,看是否能够成功访问表。
检查数据库表所属的模式
在DB2数据库中,表可以存在于不同的模式(schema)中。当使用Mybatis-Plus进行逆向工程时,默认情况下只会查询默认模式下的表。如果表位于其他模式下,需要在数据库连接URL中指定该模式。
例如,假设表位于名为SCHEMA_NAME的模式下,可以在连接URL中添加以下参数来指定模式:
jdbc:db2://localhost:50000/DB_NAME:currentSchema=SCHEMA_NAME;
请将上述URL中的SCHEMA_NAME替换为实际的模式名。
检查表名是否大小写敏感
DB2数据库对于对象名称(如表名、列名等)可以是大小写敏感的。请确保在查询表时使用的表名的大小写与数据库中实际的表名一致。可以尝试在查询表时将表名统一转为大写或小写,看是否能够找到表。
使用自定义配置
如果以上方法仍然无法解决问题,可以考虑使用Mybatis-Plus的自定义配置。通过自定义配置,可以对数据库连接、表名解析等进行更灵活的设置。
在Mybatis-Plus的配置文件中,可以添加如下自定义配置:
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
// 自定义表名生成策略
globalConfig.setDbConfig(new DbConfig().setTablePrefix("prefix_"));
return globalConfig;
}
在上述代码中,我们使用了自定义的表名生成策略,并指定了一个表前缀。您可以根据实际情况进行相应的配置。
结论:
当使用Mybatis-Plus连接DB2数据库进行逆向工程时找不到表时,可以按照以下步骤进行排查和解决:
检查数据库连接配置是否正确;
确保当前用户具有访问表的权限;
检查表所属的模式,并在连接URL中指定该模式;
注意表名是否大小写敏感,统一大小写尝试查询;
使用自定义配置进行更灵活的设置。