MySQL8 + MybatisGenerator 逆向工程配置遇到的坑


先介绍需要注意的点,文末会贴出完整的配置文件

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&amp;characterEncoding=utf8&amp;useSSL=false&amp;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>

猜你喜欢

转载自blog.csdn.net/innerpeaceScorpio/article/details/100694350