基于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日

相关文章

  • spring boot前后端交互之数据格式转换问题

    下面是关于Spring Boot前后端交互之数据格式转换问题的详细攻略。 问题描述 在前后端分离的项目中,前端与后端数据交互是必不可少的环节。然而,前后端各自使用的数据格式可能不太一致,这就需要在前后端交互的过程中把数据格式进行转换。在Spring Boot中,我们可以使用不同的方式来解决这个问题。 解决方案 1. 使用Spring Boot自带的消息转换器…

    Java 2023年6月2日
    00
  • Java中Map与JSON数据之间的互相转化

    Java中Map与JSON数据之间的转化是Java开发中常见的操作,特别是在进行前后端数据交互的过程中。下面是Java中Map与JSON数据之间互相转化的完整攻略。 1. Map转JSON 将Map转化为JSON格式的数据可以使用Gson、Jackson等第三方库进行实现。 1.1 Gson实现 Gson是Google提供的一个Java中的JSON处理库,可…

    Java 2023年5月26日
    00
  • JSP中c:foreach遍历和s:iterator遍历异同实例分析

    JSP中有两种常用的集合遍历方式:c:foreach和s:iterator。它们都可用于遍历Java集合对象,但在使用上有一些异同点。 c:foreach遍历 c:foreach是JSTL的核心标签库之一,提供了一种简化集合遍历的方法。它的语法如下: <c:forEach var="item" items="${colle…

    Java 2023年6月15日
    00
  • Eclipse创建tomcat实现过程原理详解

    下面我会详细讲解“Eclipse创建tomcat实现过程原理详解”的完整攻略,主要分为以下几个步骤: 步骤一:下载安装Eclipse和Tomcat 首先需要下载安装Eclipse和Tomcat。Eclipse是一款非常流行的Java开发工具,而Tomcat是常用的Java Web服务器。 下载Eclipse:可以在Eclipse官网(https://www.…

    Java 2023年5月19日
    00
  • Linux下启动tomcat的方法

    下面是详细讲解“Linux下启动tomcat的方法”的完整攻略。 Linux下启动tomcat的方法 Tomcat是一种用于Java开发的Web服务器,它可运行在Windows和Linux等多种操作系统上。在Linux下启动Tomcat需要以下步骤: 步骤一:下载并安装Tomcat 首先需要下载Tomcat,并将其安装在Linux的合适目录下。可以从Tomc…

    Java 2023年5月19日
    00
  • EasyUI框架 使用Ajax提交注册信息的实现代码

    接下来我将详细讲解“EasyUI框架 使用Ajax提交注册信息的实现代码”的完整攻略。 首先,我们需要在我们的网页中引入EasyUI框架的JavaScript和CSS文件,可以使用以下链接引入: <link rel="stylesheet" type="text/css" href="https://c…

    Java 2023年5月20日
    00
  • struts2数据处理_动力节点Java学院整理

    Struts2 数据处理攻略 Struts2 提供了非常方便的数据处理功能,包括表单提交、参数传递、数据封装等。本文将从以下三个方面详细介绍 Struts2 数据处理的攻略: 1.表单提交2.参数传递3.数据封装 表单提交 在 Struts2 中,我们可以通过表单提交的方式向服务器发送请求,并且可以同时将一些参数提交给服务器。具体操作步骤如下: 1.编写 J…

    Java 2023年5月20日
    00
  • 一文搞懂Spring循环依赖的原理

    一文搞懂Spring循环依赖的原理 Spring容器中的循环依赖是指两个或多个Bean彼此之间相互依赖。这种情况下,容器就无法完成Bean实例化,从而导致应用程序无法正常启动。因此,解决循环依赖问题是Spring框架中一个非常重要的问题。 循环依赖的概念 循环依赖是指两个或多个Bean之间出现了相互依赖的情况。例如:Bean1依赖于Bean2,而Bean2又…

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