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的配置文件,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | <? 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插件后,直接运行,运行后,生成了User
和User.java.1
两个文件,打开一看, User是test库中的表,只有4个字段,而User.java.1则是mysql库(Mysql的系统用户库)中的user表。怎么会扫描了两个 库(mysql和test)?再看看我的connectionURL,确实指到了/test了,怎么会扫描mysql库呢? 于是我翻阅资料,终于找到了问题。org.mybatis.generator.internal.db.DatabaseIntrospector
的509行,代码如下:
1 2 | 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
已经不用了。
*如果您觉得对您有帮助,请关注+推荐
*您的支持就是我继续下去的动力
*承接项目+V:ronaldoliubo
***************************************
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端