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的配置文件,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>

<!-- 指定数据连接驱动jar地址 -->
<classPathEntry location="D:\.m2\repository\mysql\mysql-connector-java\8.0.11\mysql-connector-java-8.0.11.jar" />

<!-- 一个数据库一个context -->
<context id="infoGuardian" targetRuntime="MyBatis3DynamicSql">
    <!-- 注释 -->
    <commentGenerator >
        <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
        <property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳-->
    </commentGenerator>

    <!-- jdbc连接 -->
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8
                    &serverTimezone=Asia/Shanghai"
                    userId="root"
                    password="xxxxx" />

    <!-- 类型转换 -->
    <javaTypeResolver>
        <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
        <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>

    <!-- 生成实体类地址 -->
    <javaModelGenerator targetPackage="com.example.xxx.model"
                        targetProject="src\main\java" >
        <property name="enableSubPackages" value="false"/>
        <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>

    <!-- 生成mapxml文件 -->
    <sqlMapGenerator targetPackage="mybatis"
                     targetProject="src\main\resources" >
        <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>

    <!-- 生成mapxml对应client,也就是接口dao -->
    <javaClientGenerator targetPackage="com.example.xxx.dao"
                         targetProject="src\main\java" type="XMLMAPPER" >
        <property name="enableSubPackages" value="false" />
    </javaClientGenerator>
    
    <table tableName="user" domainObjectName="User"></table>

</context>
</generatorConfiguration>

安装好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&amp;characterEncoding=utf8&amp;serverTimezone=Asia/Shanghai" 中指定了数据test呀,查看源码发现在连接中少配置了一个属性nullCatalogMeansCurrent=true,加上这个属性,再执行,就没有问题了。

尤其是使用com.mysql.cj.jdbc.Driver这个驱动的时候,更要加上这个属性。在项目中不需要加,但是在使用Mybatis Generator时要加上。 com.mysql.cj.jdbc.Driver是mysql官方比较推荐的,旧的驱动com.mysql.jdbc.Driver已经不用了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java工会

推荐几个自己写的Java后端相关的范例项目

26750
来自专栏Java Web

MyBatis 与 Spring 整合

MyBatis—Spring 项目 目前大部分的 Java 互联网项目,都是用 Spring MVC + Spring + MyBatis 搭建平台的。 使用 ...

44660
来自专栏Flutter&Dart

DartVM服务器开发(第十九天)--jaguar_reflect使用Controller

上面有一个ReflectedController(UserController()).routes,就是把UserController里面的接口反射出来,添加到...

15130
来自专栏java、Spring、技术分享

java 日志处理

  common-logging是 apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的loggi...

45530
来自专栏PHP在线

重磅资料!Github上的PHP资源汇总大全

依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers: 一个多框架Com...

32540
来自专栏菩提树下的杨过

IBM WebSphere MQ 7.5基本用法

一、下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必...

43480
来自专栏Greenplum

Linux 常用命令(四)

# Default runlevel. The runlevels used are:

27900
来自专栏吴生的专栏

使用Spring AOP实现MySQL数据库读写分离案例分析

分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)数据的速度和并发量。

16120
来自专栏Ceph对象存储方案

Ceph的磁盘管理tips

换盘的时候一定要验明正身,原生的ceph-disk方式对磁盘分区的信息标记实在是太粗糙,很容易看花眼,比如下面这个例子,虽然通过PARTLABEL可以区分jou...

30770
来自专栏Java面试通关手册

结合Spring发送邮件的四种正确姿势,你知道几种?

测试使用的环境是企业主流的SSM 框架即 SpringMVC+Spring+Mybatis。为了节省时间,我直接使用的是我上次的“SSM项目中整合Echarts...

15230

扫码关注云+社区

领取腾讯云代金券