基于Java代码配置MyBatis Generator

关于“基于Java代码配置MyBatis Generator”的完整攻略,我可以提供如下讲解。

1. MyBatis Generator 简介

MyBatis Generator (MBG) 是 MyBatis 官方提供的一个用于根据数据库表自动生成 Mapper 接口、XML 映射文件和 Model 等代码的工具。MBG 能够根据数据库表结构自动生成一定基础代码,减少手写代码的工作量,提高开发效率。

2. Java 代码配置 MBG

MBG 支持多种方式的配置,其中最常用的方式是基于 XML 配置文件的方式。但在这里,我们将介绍一种基于 Java 代码配置 MBG 的方式。相对于 XML 配置文件,Java 代码配置 MBG 的优点在于能够利用 Java 语言的特性,实现更复杂的动态配置。

2.1 安装 MBG

安装 MBG 有多种方式,例如通过 Maven 依赖、下载官方 Jar 包等。这里我们以 Maven 依赖为例,将 MBG 的依赖添加到项目的 pom.xml 文件中即可。

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

2.2 创建 Java 代码配置类

创建一个类,命名为 MBGConfig,在该类中进行 Java 代码配置 MBG。首先需要 import MBG 的配置项类和注解:

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.*;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.util.ArrayList;
import java.util.List;
import static org.mybatis.generator.internal.util.StringUtility.isTrue;

接着,创建一个 main 方法,依次设置各项配置,并调用 MyBatisGenerator 进行代码生成:

public class MBGConfig {
    public static void main(String[] args) {
        try {
            // 创建 MBG 配置项
            Configuration config = new Configuration();
            Context context = new Context(ModelType.FLAT);

            // 配置 JDBC 连接信息
            JDBCConnectionConfiguration jdbcConfig = new JDBCConnectionConfiguration();
            jdbcConfig.setDriverClass("com.mysql.jdbc.Driver");
            jdbcConfig.setConnectionURL("jdbc:mysql://localhost:3306/test");
            jdbcConfig.setUserId("root");
            jdbcConfig.setPassword("root");

            // 配置 Java 模型和文件输出信息
            JavaModelGeneratorConfiguration javaModelConfig = new JavaModelGeneratorConfiguration();
            javaModelConfig.setTargetPackage("com.example.model");
            javaModelConfig.setTargetProject("src/main/java");

            // 配置 Mapper 文件输出信息
            SqlMapGeneratorConfiguration sqlMapConfig = new SqlMapGeneratorConfiguration();
            sqlMapConfig.setTargetPackage("com.example.mapper");
            sqlMapConfig.setTargetProject("src/main/resources");

            // 配置 Mapper 接口和文件输出信息
            JavaClientGeneratorConfiguration javaClientConfig = new JavaClientGeneratorConfiguration();
            javaClientConfig.setTargetPackage("com.example.mapper");
            javaClientConfig.setTargetProject("src/main/java");
            javaClientConfig.setConfigurationType("XMLMAPPER");

            // 配置表结构信息
            TableConfiguration tableConfig = new TableConfiguration(context);
            tableConfig.setTableName("user");
            tableConfig.setDomainObjectName("User");

            // 添加配置项到上下文中
            context.setJdbcConnectionConfiguration(jdbcConfig);
            context.setJavaModelGeneratorConfiguration(javaModelConfig);
            context.setSqlMapGeneratorConfiguration(sqlMapConfig);
            context.setJavaClientGeneratorConfiguration(javaClientConfig);
            context.addTableConfiguration(tableConfig);
            config.addContext(context);

            // 配置 MBG 生成代码时覆盖原有文件
            DefaultShellCallback callback = new DefaultShellCallback(true);

            // 创建 MBG
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, new ArrayList<>());

            // 开始生成代码
            myBatisGenerator.generate(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.3 示例

下面,我将提供两个基于 Java 代码配置 MBG 的示例供参考。

2.3.1 生成单表增删改查

以下代码用于生成简单的单个表的 Mapper、Model 和 XML 配置文件。

public class MBGConfig {
    public static void main(String[] args) {
        try {
            // 创建配置项
            Configuration config = new Configuration();
            Context context = new Context(ModelType.FLAT);

            // 配置 JDBC 连接信息
            JDBCConnectionConfiguration jdbcConfig = new JDBCConnectionConfiguration();
            jdbcConfig.setDriverClass("com.mysql.jdbc.Driver");
            jdbcConfig.setConnectionURL("jdbc:mysql://localhost:3306/test");
            jdbcConfig.setUserId("root");
            jdbcConfig.setPassword("root");

            // 配置 Java 模型和文件输出信息
            JavaModelGeneratorConfiguration javaModelConfig = new JavaModelGeneratorConfiguration();
            javaModelConfig.setTargetPackage("com.example.model");
            javaModelConfig.setTargetProject("src/main/java");

            // 配置 Mapper 文件输出信息
            SqlMapGeneratorConfiguration sqlMapConfig = new SqlMapGeneratorConfiguration();
            sqlMapConfig.setTargetPackage("com.example.mapper");
            sqlMapConfig.setTargetProject("src/main/resources");

            // 配置 Mapper 接口和文件输出信息
            JavaClientGeneratorConfiguration javaClientConfig = new JavaClientGeneratorConfiguration();
            javaClientConfig.setTargetPackage("com.example.mapper");
            javaClientConfig.setTargetProject("src/main/java");
            javaClientConfig.setConfigurationType("XMLMAPPER");

            // 配置表结构信息
            TableConfiguration tableConfig = new TableConfiguration(context);
            tableConfig.setTableName("user");
            tableConfig.setDomainObjectName("User");

            // 配置 Mapper 文件的增删改查语句
            GeneratedKey generatedKey = new GeneratedKey("id", "MySQL", true, "");
            List<ColumnOverride> columnOverrides = new ArrayList<>();
            columnOverrides.add(new ColumnOverride("id", "id", "BIGINT", true));
            InsertSelectiveMethodGenerator insertSelectiveMethodGenerator = new InsertSelectiveMethodGenerator();
            insertSelectiveMethodGenerator.setGeneratedKey(generatedKey);
            UpdateByPrimaryKeySelectiveMethodGenerator updateByPrimaryKeySelectiveMethodGenerator = new UpdateByPrimaryKeySelectiveMethodGenerator();
            DeleteByPrimaryKeyMethodGenerator deleteByPrimaryKeyMethodGenerator = new DeleteByPrimaryKeyMethodGenerator();
            SelectByPrimaryKeyMethodGenerator selectByPrimaryKeyMethodGenerator = new SelectByPrimaryKeyMethodGenerator();
            columnOverrides.forEach(insertSelectiveMethodGenerator::addColumnOverride);
            columnOverrides.forEach(updateByPrimaryKeySelectiveMethodGenerator::addColumnOverride);
            columnOverrides.forEach(deleteByPrimaryKeyMethodGenerator::addColumnOverride);
            columnOverrides.forEach(selectByPrimaryKeyMethodGenerator::addColumnOverride);

            // 添加配置项
            context.setJdbcConnectionConfiguration(jdbcConfig);
            context.setJavaModelGeneratorConfiguration(javaModelConfig);
            context.setSqlMapGeneratorConfiguration(sqlMapConfig);
            context.setJavaClientGeneratorConfiguration(javaClientConfig);
            context.addTableConfiguration(tableConfig);
            tableConfig.setGeneratedKey(generatedKey);
            tableConfig.setColumnOverrides(columnOverrides);
            tableConfig.setInsertSelectiveStatementEnabled(true);
            tableConfig.setUpdateByPrimaryKeySelectiveStatementEnabled(true);
            tableConfig.setDeleteByPrimaryKeyStatementEnabled(true);
            tableConfig.setSelectByPrimaryKeyStatementEnabled(true);

            // 添加自定义增删改查语句
            tableConfig.setSelectByPrimaryKeyStatementGenerator(selectByPrimaryKeyMethodGenerator);
            tableConfig.setDeleteByPrimaryKeyStatementGenerator(deleteByPrimaryKeyMethodGenerator);
            tableConfig.setUpdateByPrimaryKeySelectiveMethodGenerator(updateByPrimaryKeySelectiveMethodGenerator);
            tableConfig.setInsertSelectiveMethodGenerator(insertSelectiveMethodGenerator);

            // 创建 MBG
            DefaultShellCallback callback = new DefaultShellCallback(true);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, new ArrayList<>());

            // 开始生成代码
            myBatisGenerator.generate(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.3.2 生成多个表的增删改查

以下代码用于生成多个表的 Mapper、Model 和 XML 配置文件。

public class MBGConfig {
    public static void main(String[] args) {
        try {
            // 创建配置项
            Configuration config = new Configuration();
            Context context = new Context(ModelType.FLAT);

            // 配置 JDBC 连接信息
            JDBCConnectionConfiguration jdbcConfig = new JDBCConnectionConfiguration();
            jdbcConfig.setDriverClass("com.mysql.jdbc.Driver");
            jdbcConfig.setConnectionURL("jdbc:mysql://localhost:3306/test");
            jdbcConfig.setUserId("root");
            jdbcConfig.setPassword("root");

            // 配置 Java 模型和文件输出信息
            JavaModelGeneratorConfiguration javaModelConfig = new JavaModelGeneratorConfiguration();
            javaModelConfig.setTargetPackage("com.example.model");
            javaModelConfig.setTargetProject("src/main/java");

            // 配置 Mapper 文件输出信息
            SqlMapGeneratorConfiguration sqlMapConfig = new SqlMapGeneratorConfiguration();
            sqlMapConfig.setTargetPackage("com.example.mapper");
            sqlMapConfig.setTargetProject("src/main/resources");

            // 配置 Mapper 接口和文件输出信息
            JavaClientGeneratorConfiguration javaClientConfig = new JavaClientGeneratorConfiguration();
            javaClientConfig.setTargetPackage("com.example.mapper");
            javaClientConfig.setTargetProject("src/main/java");
            javaClientConfig.setConfigurationType("XMLMAPPER");

            // 配置表结构信息(用 for 循环可生成多个表的增删改查)
            GeneratedKey generatedKey = new GeneratedKey("id", "MySQL", true, "");
            List<ColumnOverride> columnOverrides = new ArrayList<>();
            for (int i = 1; i <= 3; i++) {
                String tableName = "user_" + i;
                String domainObjectName = "User" + i;
                TableConfiguration tableConfig = new TableConfiguration(context);
                tableConfig.setTableName(tableName);
                tableConfig.setDomainObjectName(domainObjectName);
                columnOverrides.add(new ColumnOverride("id", "id", "BIGINT", true));
                UpdateByPrimaryKeySelectiveMethodGenerator updateByPrimaryKeySelectiveMethodGenerator = new UpdateByPrimaryKeySelectiveMethodGenerator();
                DeleteByPrimaryKeyMethodGenerator deleteByPrimaryKeyMethodGenerator = new DeleteByPrimaryKeyMethodGenerator();
                SelectByPrimaryKeyMethodGenerator selectByPrimaryKeyMethodGenerator = new SelectByPrimaryKeyMethodGenerator();
                columnOverrides.forEach(updateByPrimaryKeySelectiveMethodGenerator::addColumnOverride);
                columnOverrides.forEach(deleteByPrimaryKeyMethodGenerator::addColumnOverride);
                columnOverrides.forEach(selectByPrimaryKeyMethodGenerator::addColumnOverride);
                tableConfig.setGeneratedKey(generatedKey);
                tableConfig.setColumnOverrides(columnOverrides);
                tableConfig.setInsertSelectiveStatementEnabled(true);
                tableConfig.setUpdateByPrimaryKeySelectiveStatementEnabled(true);
                tableConfig.setDeleteByPrimaryKeyStatementEnabled(true);
                tableConfig.setSelectByPrimaryKeyStatementEnabled(true);
                tableConfig.setSelectByPrimaryKeyStatementGenerator(selectByPrimaryKeyMethodGenerator);
                tableConfig.setDeleteByPrimaryKeyStatementGenerator(deleteByPrimaryKeyMethodGenerator);
                tableConfig.setUpdateByPrimaryKeySelectiveMethodGenerator(updateByPrimaryKeySelectiveMethodGenerator);
                context.addTableConfiguration(tableConfig);
            }

            // 添加配置项到上下文中
            context.setJdbcConnectionConfiguration(jdbcConfig);
            context.setJavaModelGeneratorConfiguration(javaModelConfig);
            context.setSqlMapGeneratorConfiguration(sqlMapConfig);
            context.setJavaClientGeneratorConfiguration(javaClientConfig);
            config.addContext(context);

            // 创建 MBG
            DefaultShellCallback callback = new DefaultShellCallback(true);
            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, new ArrayList<>());

            // 开始生成代码
            myBatisGenerator.generate(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

总结

通过以上的讲解,我们初步了解了基于 Java 代码配置 MBG 的方式。通过这种方式可以灵活地控制 MBG 的行为,生成相应的代码文件,为我们的项目开发节省大量的时间和精力。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Java代码配置MyBatis Generator - Python技术站

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

相关文章

  • springBoot项目常用目录解读

    下面是对“springBoot项目常用目录解读”的详细讲解: 1. 项目结构概述 在理解Spring Boot项目的目录结构之前,需要首先理解Spring Boot的项目结构。Spring Boot的项目结构与标准的Maven或Gradle项目结构类似,区别在于一个主要目录——src/main,这个目录中分别包含了几个子目录,如下: src/main/jav…

    Java 2023年5月19日
    00
  • springboot整合springsecurity与mybatis-plus的简单实现

    那么让我们来探讨一下如何实现“springboot整合springsecurity与mybatis-plus的简单实现”,包含以下步骤: 1.创建一个springboot项目,添加相关依赖 为了实现该功能,我们首先需要创建一个springboot项目,并添加所需的依赖项。在pom.xml文件中添加以下依赖项: <dependency> <g…

    Java 2023年5月20日
    00
  • Spring jcl及spring core源码深度解析

    首先,我们需要理解“Spring JCL”和“Spring Core”这两个概念。 “Spring JCL”是Spring框架中的一个日志抽象框架,它提供了简单的接口以及灵活的配置方式,使得开发者可以用不同的日志框架进行日志的操作与管理。Spring JCL本身并不提供具体的实现,而是通过SLF4J、Commons Logging、Log4j 2等其他日志框…

    Java 2023年5月19日
    00
  • Hibernate分页的两种实现方法

    Hibernate是目前最为流行的ORM框架之一,提供了非常便捷的持久化操作,而在实际应用中,我们经常需要对数据进行分页,以免一次性将所有数据全部加载到内存中,影响系统性能。那么Hibernate分页的实现方法有哪些呢?接下来我将详细阐述两种实现方法,其中一种是使用Criteria API的方式,另一种是使用SQL语句的方式。 使用Criteria API实…

    Java 2023年5月20日
    00
  • 用JSP实现的一个日历程序

    用JSP实现一个日历程序的完整攻略可以分为以下步骤: 第一步:搭建基本的网页框架 首先,需要创建一个基本的网页框架,包括HTML和CSS代码,用于显示日历的样式。可以使用如下的HTML代码来构建网页框架: <!DOCTYPE html> <html lang="en"> <head> <meta …

    Java 2023年6月15日
    00
  • Java中输入与输出的方法总结

    接下来我会详细讲解Java中输入与输出的方法总结,下文包含标题、段落、列表、代码块等markdown格式的内容,方便您查看和学习。 Java中输入与输出的方法总结 Java中的输入与输出指的是程序的输入和输出操作。根据数据的输入/输出位置不同,可以将Java中的输入/输出方式分为以下四种: 标准输入输出 文件输入输出 网络输入输出 对象输入输出 1. 标准输…

    Java 2023年5月26日
    00
  • 将Java的List结构通过GSON库转换为JSON的方法示例

    以下是将Java的List结构通过GSON库转换为JSON的方法示例: 第一步:添加依赖 GSON 是一个 Google 提供的 Java 库,用于在 Java 对象和 JSON 数据之间进行序列化和反序列化。首先,在项目中添加 GSON 这个库的依赖。 如果你使用的是 Maven,可以在 pom.xml 中添加以下依赖: <dependency&gt…

    Java 2023年5月26日
    00
  • Java中json与javaBean几种互转的讲解

    下面是“Java中json与javaBean几种互转的讲解”的详细攻略。 一、什么是JSON JSON全称为JavaScript Object Notation,它是一种轻量级的数据交换格式,与XML格式相比,JSON格式更加简洁、易读、易写,可以在不同编程语言之间进行数据传输,并可以存储和描述各类结构化数据。 JSON格式由键值对组成,其中键是一个字符串,…

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