Mybatis Generator 使用com.mysql.cj.jdbc.Driver遇到的問題

今天閒來無事,準備搭一套SSM的環境,當然所有的jar包都用最新的。 Mybatis使用3.4.6,Mysql使用最新的8.0,mysql-connector-java用的8.0.11。

安裝好數據庫後,新建了一個test庫,並創建了一張user表。配置好Mybatis的配置文件,安裝好Mybatis Generator的maven插件後,直接運行,運行後,生成了UserUser.java.1兩個文件,打開一看, User是test庫中的表,只有4個字段,而User.java.1則是mysql庫(Mysql的系統用戶庫)中的user表。怎麼會掃描了兩個 庫(mysql和test)?再看看我的connectionURL,確實指到了/test了,怎麼會掃描mysql庫呢? 於是我翻閱資料,終於找到了問題。org.mybatis.generator.internal.db.DatabaseIntrospector的509行,代碼如下:

ResultSet rs = databaseMetaData.getColumns(localCatalog, localSchema, localTableName, "%");

變量localCatalog是上面配置文件中table中的元素,我們並沒有配置,這裡localCatalog是null,在底層會執行SHOW DATABASES 得到所有的數據庫,但是我們已經在connectionURL="jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai" 中指定了數據test呀,查看源碼發現在連接中少配置了一個屬性nullCatalogMeansCurrent=true,加上這個屬性,再執行,就沒有問題了。

尤其是使用com.mysql.cj.jdbc.Driver這個驅動的時候,更要加上這個屬性。在項目中不需要加,但是在使用Mybatis Generator時要加上。 com.mysql.cj.jdbc.Driver是mysql官方比較推薦的,舊的驅動

com.mysql.jdbc.Driver已經不用了。


分享到:


相關文章: