Mybatis Generator 使用com.mysql.cj.jdbc.Driver遇到的问题

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已经不用了。

你可能感兴趣的:(Mybatis Generator 使用com.mysql.cj.jdbc.Driver遇到的问题)