Java教程

Mybatis官方生成器学习入门教程

本文主要是介绍Mybatis官方生成器学习入门教程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述

Mybatis Generator 是一个用于根据数据库表自动生成类、映射文件和 SQL 语句的工具,支持多种数据库和生成器类型,显著提高开发效率。本文将介绍 Mybatis 官方生成器的学习入门,包括安装配置、代码生成和使用方法。

Mybatis生成器简介

Mybatis生成器概述

Mybatis Generator (MBG) 是一个开源的 Java 工具,用于根据数据库表生成类、映射文件以及 SQL 语句。它支持 MySQL、Oracle、SQL Server 等多种数据库,并能够生成 Java 类、Mapper XML 文件和 DAO 接口。MBG 可以显著提高开发者的效率,减少手动编写代码的复杂度。

MBG 包含几种生成器:Entity Generator、DAO Generator 和 Mapper XML Generator。这些生成器可以单独使用,也可以组合使用,生成不同类型的文件。

Mybatis生成器的优势

  • 减少重复工作:通过 MBG 自动生成代码,避免开发者手动编写数据访问对象(DAO)和实体类。
  • 减少维护成本:当数据库表结构发生变化时,MBG 可以自动更新生成的代码,减少手动维护代码的工作。
  • 提高一致性:生成的代码遵循最佳实践,提高了代码的一致性。
  • 支持多种数据库:MBG 支持多种数据库,如 MySQL、Oracle、SQL Server 等。
  • 支持多种生成器类型:可以根据需要选择不同的生成器类型,例如实体类生成器、DAO 生成器和 Mapper XML 文件生成器。
安装与配置Mybatis生成器

准备工作环境

在开始使用 Mybatis Generator 之前,确保已安装 Java 开发环境(JDK)和 Maven 构建工具。Mybatis Generator 通常作为 Maven 项目的一部分使用。

环境要求

  • Java 开发工具包 (JDK) 1.8 或更高版本
  • Maven 3.5 或更高版本

安装 Java 环境

安装 Java 开发工具包(JDK)的步骤如下:

  1. 访问 Oracle 官方网站下载 JDK。
  2. 安装 JDK,安装过程中选择合适的安装路径,如 C:\Program Files\Java\jdk-16
  3. 配置环境变量 JAVA_HOME 指向 JDK 安装路径,并将 %JAVA_HOME%\bin 添加到系统变量 Path 中。
  4. 打开命令行输入 java -version,确认安装成功。

安装 Maven

  1. 访问 Maven 官方网站下载 Maven。
  2. 解压下载的压缩包到合适的位置,如 C:\Dev\apache-maven-3.8.1
  3. 配置环境变量 MAVEN_HOME 指向 Maven 安装路径,并将 %MAVEN_HOME%\bin 添加到系统变量 Path 中。
  4. 打开命令行输入 mvn -v,确认安装成功。

安装Mybatis生成器插件

将 Mybatis Generator 作为 Maven 依赖添加到项目中。在项目的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>

生成器支持多种数据库驱动,例如 MySQL、Oracle、SQL Server 等。你需要根据使用的数据库下载相应的 JDBC 驱动依赖。以 MySQL 为例,添加以下依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>

配置Mybatis生成器

在项目的 src/main/resources 文件夹中创建一个名为 generatorConfig.xml 的配置文件。这个文件包含了生成器的配置信息,如数据库连接信息、生成代码文件的存放位置等。

下面是一个简单的配置文件示例:

<generatorConfiguration>
    <context id="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC"
            userId="root" password="password"/>
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
        <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
        <table tableName="my_table" domainObjectName="MyTable" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

配置文件解析

  • context 标签:定义一个配置上下文,id="testTables" 是上下文的唯一标识符,targetRuntime="MyBatis3" 指定了使用 MyBatis 3 版本。
  • commentGenerator 标签:配置生成器的注释规则。suppressDate="true" 表示不生成日期注释。
  • jdbcConnection 标签:配置数据库连接信息,包括驱动类、连接 URL、用户名和密码。
  • javaModelGenerator 标签:生成 Java 实体类,targetPackage="com.example.model" 指定生成的实体类存放的包名,targetProject="src/main/java" 指定生成的 Java 文件存放的项目路径。
  • sqlMapGenerator 标签:生成 XML 映射文件(Mapper XML 文件),targetPackage="com.example.mapper" 指定生成的 Mapper XML 文件存放的包名。
  • javaClientGenerator 标签:生成 Mapper 接口,type="ANNOTATEDMAPPER" 指定使用注解形式生成 Mapper 接口,targetPackage="com.example.mapper" 指定生成的 Mapper 接口存放的包名。
  • table 标签:定义需要生成代码的数据表。tableName="my_table" 指定要生成代码的数据表名,domainObjectName="MyTable" 指定生成的 Java 类名。
使用Mybatis生成器生成代码

编写配置文件

在上一节中已经提到 generatorConfig.xml 配置文件,接下来介绍如何编写这个配置文件。

生成代码的基本配置

首先,配置数据库连接信息,确保连接的数据库已准备好:

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
    connectionURL="jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC"
    userId="root" password="password"/>

配置生成 Java 实体类、Mapper XML 文件和 Mapper 接口:

<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>

生成指定数据表的代码

接下来,定义需要生成代码的数据表:

<table tableName="my_table" domainObjectName="MyTable" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>

生成多个数据表的代码

如果需要生成多个数据表的代码,可以在 table 标签中添加多个 table 标签,例如:

<table tableName="table1" domainObjectName="Table1" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
<table tableName="table2" domainObjectName="Table2" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>

运行生成器生成代码

通过 Maven 命令运行生成器

在项目的根目录下打开命令行,执行以下命令运行 Mybatis Generator:

mvn mybatis-generator:generate

通过 Gradle 命令运行生成器

如果你使用 Gradle 进行构建,可以在 build.gradle 文件中添加以下任务:

task generateMybatis(type: MyBatisGenerator) {
    mybatisGenerator {
        configFiles('src/main/resources/generatorConfig.xml')
        verbose(true)
        overwrite(true)
    }
}

generateMybatis.doFirst {
    println 'Generating MyBatis code...'
}

然后执行以下命令运行生成器:

./gradlew generateMybatis

通过 Java 代码运行生成器

你也可以通过 Java 代码来运行 Mybatis Generator。下面是一个简单的示例:

package com.example;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MybatisGeneratorRunner {
    public static void main(String[] args) {
        try {
            List<String> warnings = new ArrayList<>();
            boolean overwrite = true;
            ConfigurationParser cp = new ConfigurationParser(warnings);
            Configuration config = cp.parseConfiguration(MybatisGeneratorRunner.class.getResourceAsStream("/generatorConfig.xml"));
            DefaultShellCallback callback = new DefaultShellCallback(overwrite);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
            myBatisGenerator.generate(null);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
    }
}

将上述代码保存为 MybatisGeneratorRunner.java,然后使用 Maven 或 Gradle 编译并运行这个类。

Mybatis生成器的常用配置详解

表名与别名配置

generatorConfig.xml 文件中,可以配置数据表的表名和别名,方便生成代码时使用。

表名配置

table 标签中,通过 tableName 属性指定数据库表名:

<table tableName="my_table" domainObjectName="MyTable">

别名配置

table 标签中,通过 domainObjectName 属性指定生成的 Java 类名:

<table tableName="my_table" domainObjectName="MyTable">

字段别名配置

table 标签内部,可以通过 <columnOverride> 标签配置字段别名:

<table tableName="my_table" domainObjectName="MyTable">
    <columnOverride column="column_name" javaName="ColumnName"/>
</table>

模板配置

Mybatis Generator 支持自定义模板配置,允许开发者根据需要自定义生成的代码模板。

模板配置文件

Mybatis Generator 使用 FreeMarker 模板引擎,模板文件通常存放在 src/main/resources/templates 目录下。例如,可以创建一个 Entity.ftl 文件来指定实体类的模板:

package ${package};

public class ${entityName} {
    private ${type} ${column};

    public ${type} get${Column}() {
        return ${column};
    }

    public void set${Column}(${type} ${column}) {
        this.${column} = ${column};
    }
}

在配置文件中引用模板

generatorConfig.xml 文件中引用自定义的模板文件:

<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
    <property name="modelType" value="flat"/>
    <property name="enableCacheModel" value="true"/>
    <property name="modelPackage" value="com.example.model"/>
    <property name="templateLocation" value="templates"/>
</javaModelGenerator>

模板参数

在模板文件中可以使用 FreeMarker 的语法引用配置文件中的参数,例如 ${package}${entityName} 等。

数据库连接配置

数据库连接配置是 Mybatis Generator 的核心配置之一,它决定了生成器连接哪个数据库进行代码生成。

数据库连接信息

generatorConfig.xml 文件中,配置数据库连接信息:

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
    connectionURL="jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC"
    userId="root" password="password"/>

支持的数据库类型

Mybatis Generator 支持多种数据库类型,例如 MySQL、Oracle、SQL Server 等。你需要根据使用的数据库类型选择合适的驱动类和连接 URL。

安全性配置

为了提高连接的安全性,通常建议使用数据库连接池来管理数据库连接。Mybatis Generator 支持通过 JDBC 连接池来配置数据库连接,例如使用 HikariCP 或 DBCP2:

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
    connectionURL="jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC"
    userId="root" password="password">
    <property name="connectionPoolType" value="HikariCP"/>
    <property name="hibernateDialect" value="com.mysql.cj.jdbc.Driver"/>
    <property name="connectionFactoryCache" value="true"/>
</jdbcConnection>
Mybatis生成器生成代码的使用

生成的代码结构介绍

生成的代码通常包含以下几部分:

实体类

生成的 Java 实体类通常存放在 src/main/java 目录下。例如:

package com.example.model;

public class MyTable {
    private int id;
    private String name;
    // getters and setters
}

Mapper XML 文件

生成的 Mapper XML 文件通常存放在 src/main/resources 目录下。例如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.MyTableMapper">
    <select id="selectById" parameterType="int" resultType="com.example.model.MyTable">
        SELECT * FROM my_table WHERE id = #{id}
    </select>
</mapper>

Mapper 接口

生成的 Mapper 接口通常存放在 src/main/java 目录下。例如:

package com.example.mapper;

import com.example.model.MyTable;
import java.util.List;

public interface MyTableMapper {
    MyTable selectById(int id);
    List<MyTable> selectAll();
}

如何运行生成的代码

配置 Mybatis 配置文件

在项目的 src/main/resources 目录下创建一个名为 mybatis-config.xml 的配置文件,配置 Mybatis 的全局配置信息:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias alias="MyTable" type="com.example.model.MyTable"/>
    </typeAliases>
    <mappers>
        <mapper resource="com/example/mapper/MyTableMapper.xml"/>
    </mappers>
</configuration>

创建 Mybatis 工厂

在项目中创建一个 Mybatis 工厂类,用于初始化 Mybatis 数据库连接和 Mapper 接口:

package com.example;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

public class MybatisFactory {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}

使用 Mapper 接口

在业务逻辑中,通过 Mybatis 工厂获取 SqlSession 对象,然后使用 Mapper 接口进行数据库操作:

package com.example;

import com.example.mapper.MyTableMapper;
import org.apache.ibatis.session.SqlSession;

public class MyTableService {
    public MyTable selectById(int id) {
        try (SqlSession session = MybatisFactory.getSqlSessionFactory().openSession()) {
            MyTableMapper mapper = session.getMapper(MyTableMapper.class);
            return mapper.selectById(id);
        }
    }
}

代码自定义修改指南

生成器生成的代码可能需要根据业务场景进行自定义修改,例如添加额外的方法、修改生成的 SQL 语句等。

自定义生成的 SQL 语句

MyTableMapper.xml 文件中,可以修改生成的 SQL 语句,添加自定义的查询逻辑:

<select id="customSelect" resultType="com.example.model.MyTable">
    SELECT * FROM my_table WHERE name LIKE '%${value}%'
</select>

手动添加方法

MyTableMapper 接口中手动添加方法,例如添加一个自定义查询方法:

package com.example.mapper;

import com.example.model.MyTable;
import java.util.List;

public interface MyTableMapper {
    MyTable selectById(int id);
    List<MyTable> selectAll();
    List<MyTable> customSelect(String value);
}

自定义实体类

MyTable 实体类中,可以添加额外的属性或方法,例如添加一个 toString 方法:

package com.example.model;

public class MyTable {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "MyTable{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
常见问题与解决方案

生成器配置常见错误

  • 无法连接到数据库:检查数据库连接配置是否正确,包括驱动类、连接 URL、用户名和密码等信息。
  • 生成的代码缺少某些字段:确保 generatorConfig.xml 文件中配置了所有需要生成的字段。
  • 生成的代码没有注释:检查 generatorConfig.xml 文件中的 commentGenerator 配置是否正确。

代码生成常见问题

  • 生成的代码编译失败:确保生成的代码存放路径正确,并且与项目中的其他代码文件路径一致。
  • 生成的代码缺少某些方法:检查 generatorConfig.xml 文件中的 table 标签配置,确保启用了需要生成的方法。
  • 生成的代码不符合编码规范:修改 generatorConfig.xml 文件中的模板配置文件,自定义生成代码的模板。

解决方案与最佳实践

  • 使用模板配置文件:通过自定义模板配置文件,可以灵活控制生成代码的格式和内容。
  • 手动调整生成的代码:对于生成的代码,可以根据需要进行手动调整,以满足项目特定需求。
  • 定期更新生成器:定期检查 Mybatis Generator 的最新版本,使用最新版本可以解决已知问题并获得新的功能。
  • 配置数据库连接池:使用数据库连接池可以提高数据库连接的安全性和性能。
  • 遵循编码规范:在 generatorConfig.xml 文件中配置编码规范,确保生成的代码符合项目编码规范。
  • 使用 Maven 插件:使用 Maven 插件可以方便地在构建过程中自动运行 Mybatis Generator,减少手动操作。
这篇关于Mybatis官方生成器学习入门教程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!