异常信息
Exception getting JDBC Driver: com.mysql.jdbc
[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.6:generate (default-cli) on project spring-boot-mybatis-project-: Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.6:generate failed: Exception getting JDBC Driver: com.mysql.jdbc.Driver -> [Help 1]
问题描述
SpringBoot集成Mybatis逆向工程时遇到,在自动生成文件时报错
分析过程
- 从问题来看的话,缺少了mysql驱动
参考网上的做法:在Pom文件中,引入mybatis 和 mysql的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
引入依赖后发现还是不可以
- 参考了网上其他,spring-boot整合你想工程的案例,发现少了一个配置
分享我的逆向工程文件的配置:
<?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>
<!-- 指定连接数据库的 JDBC 驱动包的所在位置 一定要指定到你 本机的完整路径-->
<!--<classPathEntry location="D:\coding\generatorSqlmapCustom\lib\mysql-connector-java-5.1.28-bin.jar"/>
-->
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/cinema_ticket?useUnicode=true&characterEncoding=UTF-8" userId="root"
password="root">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.xiaozheng.springbootmybatisproject.domain"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.xiaozheng.springbootmybatisproject.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.xiaozheng.springbootmybatisproject.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema="" tableName="ct_user"></table>
</context>
</generatorConfiguration>
注释掉该配置
这个是配置文件中指向真实的mysql jdbc驱动的位置
于是尝试加上改配置,发现可以
<!--指定连接数据库的 JDBC 驱动包的所在位置 一定要指定到你 本机的完整路径-->
<classPathEntry location="D:\coding\generatorSqlmapCustom\lib\mysql-connector-java-5.1.28-bin.jar"/>
这里会有个麻烦点,每次集成都要指定一个mysql驱动的位置
3. 引发思考
这个配置是从逆向工程拷贝过来的,无该配置,那么传统的工程是用本身导入的jar包,会不会在引入插件的时候少引入了插件依赖jar,于是更改插件配置
由
<!--mybatis 代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
更改为:
<!--mybatis 代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
</dependencies>
<configuration>
<!--配置文件的位置-->
<configurationFile>generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
去掉这行配置
<!-- 指定连接数据库的 JDBC 驱动包的所在位置 一定要指定到你 本机的完整路径-->
<classPathEntry location="D:\coding\generatorSqlmapCustom\lib\mysql-connector-java-5.1.28-bin.jar"/>
发现也可以
最后去掉pom里面一开始引入的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
也完全没有问题
解决方法总结
- 在逆向工程配置文件中增加配置,指向mysql真实的路径
<classPathEntry location="D:\coding\generatorSqlmapCustom\lib\mysql-connector-java-5.1.28-bin.jar"/>
- 引入插件的时候增加依赖
<!--mybatis 代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
</dependencies>
<configuration>
<!--配置文件的位置-->
<configurationFile>generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
总结
说明猜想是正确的,整合逆向工程时,插件需要的jar并不是用主项目里面的,需要额外引入
写这篇文章、解决方法花费了一个小时,希望对你有帮助哦!!!!