先介绍需要注意的点,文末会贴出完整的配置文件
1. 连接mysql驱动的改变
MySQL8 版本的数据库驱动,即 driverClass 不再是 com.mysql.jdbc.Driver ,而是 com.mysql.cj.jdbc.Driver,相应的驱动也要是8版本的驱动JAR包。
2. nullCatalogMeansCurrent
当你运行generator文件后发现,生成了一些多余的java.1 、 withBLOBs.java等文件,如下图:
mapper.xml 文件里面也怪怪的,明明我这张表只有id 、name 等等四个字段:
看一下 MyBatis Generator 官网怎么说的:
因此,在 jdbcConnection 中将这个属性配置上即可解决问题
<property name=“nullCatalogMeansCurrent” value=“true” />
看网上其他的坑,如果你只是生成了多余的 withBOLBs 文件,是因为有类型为text的字段,需要配置该字段,那么在 table 配置下加入如下配置试试:
<table tableName=“user” domainObjectName=“User”>
<columnOverride column=“address” javaType=“java.lang.String” jdbcType=“VARCHAR” />
<columnOverride column=“produce” javaType=“java.lang.String” jdbcType=“VARCHAR” />
</table>
3. 关于时区
连接数据库时报错
java.sql.SQLException: The server time zone value ‘XXXXXXXX’ is unrecognized or represents more than one time zone.
在mysql的命令行界面,查看mysql的当前时区,用time_zone参数
mysql> show variables like ‘%time_zone%’;
显示的结果可能不一样,这个不重要
±-----------------±-------+
| Variable_name | Value |
±-----------------±-------+
| system_time_zone | CST |
| time_zone | SYSTEM |
±-----------------±-------+
重要的来了,你需要设置时区:
设置全局时区
mysql> set global time_zone = ‘+8:00’;
Query OK, 0 rows affected (0.00 sec)
设置时区为东八区,北京时间
mysql> set time_zone = ‘+8:00’;
Query OK, 0 rows affected (0.00 sec)
刷新权限使设置立即生效
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
然后在连接数据库的URL加上如下参数:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
4. generatorConfig.xml 完整配置
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">
<!--利用MyBatis Generator里面的Xml文件格式,复制成为resource的xml文件,并进行修改-->
<generatorConfiguration>
<!--找到MySQL驱动包的路径 -->
<classPathEntry location="C:\Users\dell\.m2\repository\mysql\mysql-connector-java\8.0.17\mysql-connector-java-8.0.17.jar" />
<!--配置连接MySQL数据库的信息-->
<context id="mysql" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC"
userId="root"
password="root">
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!--会将数据库里的int类型数据转换为Java里的bigDecimals
默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和NUMERIC 类型解析为java.math.BigDecimal-->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--配置各个文件的相对路径和项目路径-->
<!--产生entity类的位置-->
<javaModelGenerator targetPackage="com.nyuen.dxtest.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--mapper映射文件的位置,一定是在resources中的-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!--底层dao的文件位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.nyuen.dxtest.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!--将example类型设为false,否则实体类里面会多一个example的类exampleUser -->
<!--表明为数据库的表明,生成实体类User,会自动生成到entity的目录中-->
<table tableName="user" domainObjectName="User" enableCountByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>