详解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,php以及html的所有文件编码与乱码的处理方法汇总

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

    Java 2023年5月20日
    00
  • MyBatis控制台显示SQL语句的方法实现

    下面是 “MyBatis控制台显示SQL语句的方法实现” 的完整攻略: 1. 添加MyBatis配置文件 在 application.properties 或 mybatis-config.xml 文件中声明 MyBatis 显示 SQL 的配置。在 mybatis-config.xml 中的 \<configuration> 节点内添加如下配置…

    Java 2023年5月20日
    00
  • spring-boot-maven-plugin引入出现爆红(已解决)

    我来给你详细讲解一下关于”spring-boot-maven-plugin引入出现爆红(已解决)”的攻略。 首先,问题的背景是在使用Maven构建项目的过程中,引入了spring-boot-maven-plugin这个插件,但是在IDEA中却出现了红色波浪线的错误提示,这是为什么呢? 原因是因为IDEA默认只加载了一部分的Maven插件,而spring-bo…

    Java 2023年5月20日
    00
  • 用连接池提高Servlet访问数据库的效率(2)

    使用连接池可以有效提高Servlet访问数据库的效率,主要因为连接池可以减少数据库连接的创建和释放所花费的时间,以及避免因为连接未关闭而导致的数据库连接泄露问题。 以下是使用连接池进行Servlet访问数据库的攻略: 1. 导入数据库连接池依赖 使用连接池需要先导入对应的依赖包。常见的数据库连接池有C3P0、Druid等。以C3P0为例,可以使用以下Mave…

    Java 2023年6月15日
    00
  • Springboot从配置文件properties读取字符串乱码的解决

    以下是 Spring Boot 从配置文件 properties 读取字符串乱码的解决攻略。 问题描述 当我们在 Spring Boot 的配置文件(application.properties 或 application.yml)中引用带有特殊字符的字符串时,这些字符串可能会出现乱码。例如,我们在配置文件中配置数据库的连接字符串,但是其中包含中文字符,那么…

    Java 2023年5月20日
    00
  • Java 汇编JVM编写jasmin程序的操作方法

    Java汇编是一种利用Jasmin工具编写JVM汇编代码的技术。在Java虚拟机中,Jasmin程序就相当于Java程序源代码,可以通过JVM将其转化为可执行的二进制代码。以下是Java汇编JVM编写jasmin程序的完整实现攻略。 步骤一:安装Jasmin Jasmin是一个免费的开源工具,可以从其官方网站下载最新版本:http://jasmin.sour…

    Java 2023年5月23日
    00
  • Java多线程之Callable接口的实现

    标题:Java多线程之Callable接口的实现 正文: Callable接口的概述 在Java中,实现多线程有两种方式:继承Thread类和实现Runnable接口,但这两种方式都有一个缺点,就是无法返回结果。而Callable接口则可以解决这个问题,它可以在任务执行完成后返回一个结果。 Callable接口是一个带泛型参数的接口,它只有一个方法call(…

    Java 2023年5月19日
    00
  • 浅谈Java springboot日志管理

    浅谈Java Spring Boot日志管理 作为 Java 程序员,我们使用日志来记录程序运行过程中的状态信息和错误信息。Spring Boot 提供了使用很方便的日志处理方式。在本文中,我们将介绍如何在 Spring Boot 项目中管理日志。 添加日志依赖 Spring Boot 自带日志框架,常用的是 logback 和 log4j2。如果你想使用其…

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