Mybatis Generator自动生成代码及可能出现的问题
如何使用Mybatis Generator
配置插件
在 pom.xml 文件中增加 mybatis-generator-maven-plugin 插件
configurationFile:配置文件路径
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.4</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
配置文件
在 src/main/resources/generator/ 目录下创建 generatorConfig.xml 配置文件:
<?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>
<!-- 引入数据库连接配置 -->
<properties resource="jdbc.properties"/>
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 配置 tk.mybatis 插件 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="com.funtl.utils.MyMapper"/>
</plugin>
<!-- 配置数据库连接 -->
<jdbcConnection
driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.connectionURL}"
userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection>
<!-- 配置实体类存放路径 -->
<javaModelGenerator targetPackage="com.funtl.hello.spring.boot.entity" targetProject="src/main/java"/>
<!-- 配置 XML 存放路径 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<!-- 配置 DAO 存放路径 -->
<javaClientGenerator
targetPackage="com.funtl.hello.spring.boot.mapper"
targetProject="src/main/java"
type="XMLMAPPER"/>
<!-- 配置需要生成的表,% 代表所有 -->
<table tableName="%">
<!-- mysql 配置 -->
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>
配置数据源
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/springboot?useUnicode=true&serverTimezone=GMT&characterEncoding=utf-8&nullCatalogMeansCurrent=true
jdbc.username=root
jdbc.password=root
执行插件
IDEA
命令行
mvn mybatis-generator:generate
常见错误
1 时区错误
java.sql.SQLException:The server time zone value ‘???ú±ê×??±??’ is unrecognized or represents more than one time zone.
数据库和系统时区存在差异,在低版本的mysql驱动中存在该问题
解决方法:
1. 在jdbc url后加上serverTimezone=GMT
指定时区
2. 在mysql执行 set global time_zone='+8:00'
设置时区;
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://数据库ip/数据库名称?serverTimezone=GMT"
userId="连接ID"
password="密码">
</jdbcConnection>
2 mysql驱动错误
Loading class com.mysql.jdbc.Driver’. This is deprecated. The new driver classis com.mysql.cj.jdbc.Driver.
mysql6.0以上的驱动使用的驱动为com.mysql.cj.jdbc.Driver
JDBC连接Mysql6 需要指定时区,所以可能出现第一种错误
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://数据库ip/数据库名称?serverTimezone=GMT"
userId="连接ID"
password="密码">
</jdbcConnection>
3 自动生成的代码只有insert方法,没有select,update等方法
Cannot obtain primary key information from the database, generated objects may be incomplete
有两种原因导致这个问题。
一是没有设置主键,
二是因为mysql-connector-java版本不兼容,参考 https://blog.****.net/jpf254/article/details/79571396。
解决方案:在确定设置主键的情况下,在jdbc url后加上nullCatalogMeansCurrent=true
例如:
<jdbcConnection
driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://数据库ip/数据库名称?serverTimezone=GMT&nullCatalogMeansCurrent=true"
userId="连接ID"
password="密码">
</jdbcConnection>
4 error:前言中不允许有内容。
xml文件的编码问题,将配置文件generatorConfig.xml
另存为ANSI编码。
PS:博文仅作为个人学习笔记,如有错误欢迎指正,转载请注明出处~
更多内容详见:笔记分类导航目录
参考文档: