详解mybatis.generator配上最新的mysql 8.0.11的一些坑

下面我将详细讲解如何配合最新的MySQL 8.0.11使用MyBatis Generator,并解决可能会遇到的一些坑。具体步骤如下:

1. 准备工作

在开始之前,我们需要准备一些必要的工具和环境:

  1. MySQL 8.0.11及以上版本,这里以MySQL 8.0.26为例。
  2. JDK 8及以上版本。
  3. MyBatis Generator,这里以版本1.4.0为例。

2. 配置pom.xml

首先,在项目的pom.xml文件中添加如下依赖:

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.26</version>
</dependency>
<dependency>
  <groupId>org.mybatis.generator</groupId>
  <artifactId>mybatis-generator-core</artifactId>
  <version>1.4.0</version>
</dependency>

这样就将MySQL驱动和MyBatis Generator的依赖添加到了项目中。

3. 编写generatorConfig.xml

在resources目录下新建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>
    <!-- 数据库驱动 -->
    <classPathEntry location="mysql-connector-java-8.0.26.jar" />
    <context id="mysql" targetRuntime="MyBatis3">
        <!-- 自动识别数据库关键字,默认false,如果设置为true,
        根据SqlReservedWords中定义的关键字列表;一般保留默认值,遇到数据库关键字(Java关键字一般不会),
        使用自定义类型名来解决 -->
        <property name="autoDelimitKeywords" value="true" />
        <!-- 数据库连接驱动配置 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useUnicode=
            true&amp;characterEncoding=utf-8"
            userId="root"
            password="123456"/>
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
        NUMERIC 类型解析为java.math.BigDecimal -->
        <property name="forceBigDecimals" value="false" />
        <!-- 是否创建生成的Java模型对象的链式(setter)方法,返回值是当前对象 -->
        <property name="chainModelMethods" value="false" />
        <!-- 是否使用BigDecimal,通常不需要 -->
        <property name="useBigDecimal" value="false" />
        <!-- 实体类中日期类型采用哪种类型,默认情况下是java.util.Date,
        但是java.util.Date在序列化后显示的时间是不对的,
        解决方法是使用java.time.LocalDateTime -->
        <property name="useJSR310Types" value="true" />
        <!-- 生成的Java文件的编码 -->
        <property name="javaFileEncoding" value="utf-8" />
        <!-- 需要生成的表,%通配任意多个字符,如et_% -->
        <table tableName="student" />
    </context>
</generatorConfiguration>

此时我们需要注意的是:

  • 标签中的connectionURL需要根据自己的实际情况修改,其中serverTimezone指定时区,useUnicode和characterEncoding指定字符编码。
  • 标签中,可以根据需要修改自动识别数据库关键字、日期类型、模型方法等相关配置。

4. 运行MyBatis Generator

完成以上步骤后,就可以运行MyBatis Generator生成代码了。

在命令行中输入如下命令:

java -jar mybatis-generator-core-1.4.0.jar -configfile generatorConfig.xml -overwrite

其中-generator-core-1.4.0.jar是MyBatis Generator的jar包名称,-configfile指定generatorConfig.xml文件的路径,-overwrite表示如果已经生成过代码则覆盖。

此时,我们就成功地生成了与student表对应的Java代码。

示例一

假设我们有一个名为student的表,表结构如下:

CREATE TABLE `student` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `age` int NOT NULL COMMENT '年龄',
  `gender` enum('男','女') DEFAULT '男' COMMENT '性别',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

使用上述配置和命令后,我们可以得到如下Java类:

public class Student {
    private Integer id;

    private String name;

    private Integer age;

    private String gender;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender == null ? null : gender.trim();
    }
}

示例二

如果我们的表结构中含有自增主键,我们需要在生成Java类时指定主键生成策略。我们可以在generatorConfig.xml文件中加入以下配置:

<generatorConfiguration>
    <context id="mysql" targetRuntime="MyBatis3">
        <!-- ... -->
        <table tableName="student">
            <generatedKey column="id" sqlStatement="JDBC" identity="true"/>
        </table>
    </context>
</generatorConfiguration>

这样,在生成Java类时就会自动为表的主键字段添加@GeneratedValue注解:

public class Student {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    // 其他字段同上
    // ...
}

这样就可以顺利地与MySQL 8.0.11配合使用MyBatis Generator了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解mybatis.generator配上最新的mysql 8.0.11的一些坑 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java jar打包成exe应用程序的详细步骤

    要将Java jar程序打包为exe程序,可以通过以下步骤进行: 第一步,下载并安装Launch4j软件。Launch4j是一个免费的软件,可以将jar文件打包为Windows可执行文件,支持自定义图标、版本信息等。下载地址:http://launch4j.sourceforge.net/ 第二步,使用Launch4j软件进行配置。打开Launch4j,点击…

    Java 2023年5月23日
    00
  • Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页)

    下面就是 Spring Data JPA 复杂查询方式的攻略: 概述 Spring Data JPA 提供 JPA 规范标准的数据访问方式,并简化了持久层的开发。在实际应用场景中,有些查询需要多表关联及自定义分页方式。 本文将介绍 Spring Data JPA 多表关联及自定义分页的实现方式。 多表关联查询 基于 JPA 查询 在 JPA 中,我们可以通过…

    Java 2023年6月2日
    00
  • 解析关于java,php以及html的所有文件编码与乱码的处理方法汇总

    解析关于java,php以及html的所有文件编码与乱码的处理方法汇总 在开发web应用时,经常会遇到关于文件编码与乱码的问题。下面是关于Java、PHP和HTML文件编码与乱码的处理方法的汇总。 文件编码 文件编码是指在存储文件时所使用的编码格式。Web开发中,常用的编码格式有UTF-8编码和GB2312编码。 UTF-8编码 UTF-8编码是一种可变长度…

    Java 2023年5月20日
    00
  • 详解Java中二分法的基本思路和实现

    下面我就为你讲解“详解Java中二分法的基本思路和实现”的完整攻略。 一、二分法的基本思路 在计算机科学领域中,二分法也称为二分查找、折半查找。二分法适用于对有序的数列进行查找的情况。它的基本思路是: 首先,将待查找的数列按照从小到大的顺序排好序。 然后,将数列的中间位置的数与待查找的数比较,若相等,则查找成功,返回该数的位置;若待查找的数比中间位置的数小,…

    Java 2023年5月19日
    00
  • MyBatis获取参数值的两种方式详解

    MyBatis获取参数值的两种方式详解 在 MyBatis 中,获取参数值是非常常见的操作。在 SQL 语句中,通常需要传入参数来完成查询、更新等操作。那么,在 MyBatis 中,我们如何获取这些参数值呢?本文将从两个方面,详细讲解 MyBatis 获取参数值的两种方式。 使用 #{} 获取参数值 在 MyBatis 中,使用 #{} 的方式,可以方便地获…

    Java 2023年6月1日
    00
  • SpringBoot 整合mapstruct的实现步骤

    下面是详细讲解“SpringBoot 整合 MapStruct 的实现步骤”的完整攻略。 什么是 MapStruct MapStruct 是一个在编译时期通过注解自动生成 Java Bean 映射代码的框架。它具有简单易用、高效准确等特点,可以大幅度提升 Java Bean 映射的开发效率。 SpringBoot 整合 MapStruct 的实现步骤 步骤一…

    Java 2023年5月20日
    00
  • Java ForkJoin框架的原理及用法

    Java Fork/Join 框架 什么是 Java Fork/Join 框架 Java Fork/Join 框架是在 JDK7 中引入的,在 java.util.concurrent 包中,它提供了一种并行执行任务的方式,能够将一个大任务拆分成多个小任务进行处理,其中包括我们熟知的 MapReduce。 Fork/Join 的原理 Java Fork/Jo…

    Java 2023年5月26日
    00
  • java.lang.Runtime.exec的左膀右臂:流输入和流读取详解

    Java提供了Runtime.exec()方法来启动一个新进程。该方法可以返回Process对象,通过该对象可以控制和管理子进程的输入、输出以及错误流。这个方法中的参数是一个字符串,它描述了一个shell命令,应该如何来运行这个新的子进程。 为了更好地使用exec()方法,在使用exec()的时候,我们应该学会: 1.正确处理进程输出 2.合并输出流,正确地…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部