问题引入:
最近MySQL数据库从5升级到了8.0.23,然后使用以前项目中可以正确使用的MyBatis Generator逆向工程生成代码,POJO和XML文件中居然生成多余字段或者标签。
首先看我生成的四张表,如下图所示,其中出问题的代码跟users表有关。

其次,看我MyBatis Generator的生成代码的同时控制台输出的日志:
2021-02-08 10:21:41,204 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Retrieving column information for table "chat_msg"
2021-02-08 10:21:41,236 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "id", data type 12, in table "candychat..chat_msg"
2021-02-08 10:21:41,236 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "send_user_id", data type 12, in table "candychat..chat_msg"
2021-02-08 10:21:41,236 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "accept_user_id", data type 12, in table "candychat..chat_msg"
2021-02-08 10:21:41,236 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "msg", data type -1, in table "candychat..chat_msg"
2021-02-08 10:21:41,237 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "sign_flag", data type 4, in table "candychat..chat_msg"
2021-02-08 10:21:41,237 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "create_time", data type 93, in table "candychat..chat_msg"
2021-02-08 10:21:41,240 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Retrieving column information for table "friends_request"
2021-02-08 10:21:41,244 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "id", data type 12, in table "candychat..friends_request"
2021-02-08 10:21:41,244 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "send_user_id", data type 12, in table "candychat..friends_request"
2021-02-08 10:21:41,244 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "accept_user_id", data type 12, in table "candychat..friends_request"
2021-02-08 10:21:41,245 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "request_date_time", data type 93, in table "candychat..friends_request"
2021-02-08 10:21:41,246 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Retrieving column information for table "my_friends"
2021-02-08 10:21:41,252 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "id", data type 12, in table "candychat..my_friends"
2021-02-08 10:21:41,252 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "my_user_id", data type 12, in table "candychat..my_friends"
2021-02-08 10:21:41,252 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "my_friend_user_id", data type 12, in table "candychat..my_friends"
2021-02-08 10:21:41,254 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Retrieving column information for table "users"
2021-02-08 10:21:41,258 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "id", data type 12, in table "candychat..users"
2021-02-08 10:21:41,258 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "username", data type 12, in table "candychat..users"
2021-02-08 10:21:41,258 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "password", data type 12, in table "candychat..users"
2021-02-08 10:21:41,258 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "face_image", data type 12, in table "candychat..users"
2021-02-08 10:21:41,259 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "face_image_big", data type 12, in table "candychat..users"
2021-02-08 10:21:41,259 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "nickname", data type 12, in table "candychat..users"
2021-02-08 10:21:41,259 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "qrcode", data type 12, in table "candychat..users"
2021-02-08 10:21:41,259 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "cid", data type 12, in table "candychat..users"
2021-02-08 10:21:41,259 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "USER", data type 1, in table "performance_schema..users"
2021-02-08 10:21:41,259 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "CURRENT_CONNECTIONS", data type -5, in table "performance_schema..users"
2021-02-08 10:21:41,259 [main] DEBUG [org.mybatis.generator.internal.db.DatabaseIntrospector] - Found column "TOTAL_CONNECTIONS", data type -5, in table "performance_schema..users"
经过观察,前面20多行显示,生成POJO和XML配置文件都是根据candychat这个数据库中的表生成的,而最后三行日志显示了从performance_schema这个数据库的users表中生成了部分字段,于是我找了下这个表,如下图所示,果不其然,mysql自带有这么个表。

问题解决
根据上述分析,原因就此找到,逆向工程生成代码的过程中,不光根据我创建的数据库candychat下的users表生成了代码,而且还根据系统自带的数据库performance_scheme下的users表又生成了代码,两张表都叫users,生成的代码都合并到了一起,导致了错误。
而解决办法也比较简单, 修改MyBatis Generator的配置文件,在table标签上面指定catalog属性,catalog的属性值为数据库表名,这样只会根据指定的数据库下的名字对应的表生成POPO类和XML配置文件,到此为止,问题解决了。
<table catalog="candychat" tableName="chat_msg"></table>
<table catalog="candychat" tableName="friends_request"></table>
<table catalog="candychat" tableName="my_friends"></table>
<table catalog="candychat" tableName="users"></table>