MyBatis Generator 生成器把其他数据库的同名表生成下来的问题 | 我的日常分享

MyBatis Generator 生成器把其他数据库的同名表生成下来的问题

MyBatis Generator 生成器把其他数据库的同名表生成下来的问题

一、问题回顾

在开发酒店预定系统后端接口的过程中,在开发到UserController时候,发现有些数据库中存在的字段中,在mybatis generator生成的modelmapper的代码中无对应的属性与方法。

于是我查看了model包中User类中代码,发现里面的属性方法,与上一个项目新闻网站中的User类一致,于是我便用mybatis generator重新生成,发现每次生成的都是与新闻网站中的User类一致。

观察控制台发现有一个警告,[WARNING] Table Configuration user matched more than one table (mysql..user,myhotel_spring..user,wsbg..user,newsdb..user)user匹配超过一个表。

image-20220104143638483

确实这两个数据库中,都有user表。

image-20220104142605726

image-20220104142626210

二、解决方案

解决办法是在Mybatis逆向工程的配置文件里的数据库连接地址中添加下列参数:nullCatalogMeansCurrent=true

generatorConfig.xml文件中原先我是这样写的。

1
2
3
4
5
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/myhotel_spring?&amp;useSSL=false&amp;serverTimezone=UTC&amp;nullCatalogMeansCurrent=true" userId="root"
password="123456">
</jdbcConnection>

修改后为:

1
2
3
4
5
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/myhotel_spring?&amp;useSSL=false&amp;serverTimezone=UTC&amp;nullCatalogMeansCurrent=true" userId="root"
password="123456">
</jdbcConnection>

也可这样写:

1
2
3
4
5
6
7
8
9
10
11
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/myhotel_spring" userId="root" password="123456">
<!-- connectionURL属性,防止乱码 -->
<property name="useUnicode" value="true"/>
<!-- connectionURL属性,防止乱码 -->
<property name="characterEncoding" value="utf-8"/>
<!-- connectionURL属性,防止报时间错误 -->
<property name="serverTimezone" value="UTC"/>
<!-- connectionURL属性,防止生成不同数据库同名表的代码 -->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>

无任何警告报错:

image-20220104143237305