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插件后,直接运行,运行后,生成了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行,代码如下:
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
已经不用了。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
String是值传递还是引用传递
String是值传递还是引用传递 今天上班时,同事发现了一个比较有意思的问题。他把一个String类型的参数传入方法,并在方法内改变了引用的值。 然后他在方法外使用这个值,发现这个String还是之前的值,并没有改变。 这里要向大家介绍一下,大家都知道java在传参时分为值 传递 和 引用传递 。参数为基本类型时是值传递, 参数为封装类型时是引用传递。例如: 基本类型参数 public class Test { public static void main(String[] args) { int num = 0 ; changeNum(num); System.out.println("num="+num); } private static void changeNum(int num) { num = 1; } } 打印的结果是num=0。 封装类型参数 public class Test { public static void main(String[] args) { Product p = new Product(); p.setProName("before"); p...
- 下一篇
java项目部署运行
运用插件运行项目: tomcat-maven-plugin:1.1 1.右键项目--》runas --》5mavenbuild--》tomcat:run 2.name:部署名称(自定义,这里我使用maventest) basedirectory:项目文件夹路径 goals:运行命令:tomcat:run --》由于我用的是MyEclipse默认的maven 如果是tomcat6,这里就写tomcat6:run 3.打开console,可以看到部署项目的版本信息 还有部署项目的URL地址,这个URL就是你的项目的访问路径 默认:http://localhost:8080/mavenbos/
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7