为了账号安全,请及时绑定邮箱和手机立即绑定

Mybatis官方生成器资料详解与入门教程

标签:
Java SSM 数据库
概述

Mybatis官方生成器(MBG)是由Mybatis官方提供的一个强大的代码生成工具,能够自动生成实体类、Mapper接口和XML映射文件,显著提高开发效率和代码的一致性。本文详细介绍了MBG的安装配置、基本使用方法及高级配置技巧,帮助开发者快速上手并充分利用Mybatis官方生成器资料。

Mybatis官方生成器简介

Mybatis官方生成器的概念

Mybatis Generator (MBG) 是一个由 Mybatis 官方提供的代码生成工具,它能够根据数据库表自动生成 Mybatis 使用的实体类、Mapper 接口、XML 映射文件等。MBG 可以显著提高开发效率,减少手动编写代码的工作量,同时也能够保证代码的一致性和规范性。

Mybatis官方生成器的作用与优势

Mybatis Generator 的主要作用是自动生成 Mybatis 所需的各种代码文件,具体包括:

  • 实体类(Entity Class):根据数据库表结构自动生成 Java 实体类,这些实体类包含了与数据库表字段一一对应的属性。
  • Mapper 接口(Mapper Interface):自动生成 Java 接口,该接口定义了对数据库表的增删改查等操作。
  • XML 映射文件(XML Mapping File):自动生成 XML 文件,该文件中包含了 SQL 语句、参数映射和结果映射等内容。

MBG 的优势如下:

  • 节省时间:开发过程中,生成 CRUD 操作代码的时间可以用来专注于业务逻辑的实现。
  • 一致性:代码生成工具可以保证生成的代码格式一致、规范,减少了代码维护的负担。
  • 灵活性:支持多种自定义配置,可以根据项目需求灵活调整生成的代码。
  • 安全性:减少手动编写代码的错误,提高代码的质量和安全性。

安装与环境配置

在使用 Mybatis Generator 之前,需要确保开发环境已经配置好 Java 和 Maven。以下是安装和配置步骤:

  1. 安装 Maven:确保已经安装了 Maven,并配置了环境变量。可通过命令 mvn -v 检查 Maven 是否安装成功。

  2. 添加 Mybatis Generator 依赖:在项目的 pom.xml 文件中添加 Mybatis Generator 的依赖。例如:

    <dependencies>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
    </dependencies>
  3. 配置数据库连接信息:在项目根目录下创建 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.dtd">
    <generatorConfiguration>
        <classPathEntry location="path/to/mysql-connector-java-8.0.26.jar"/>
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/mydb"
                            userId="root"
                            password="password"/>
            <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
            <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
            <table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
        </context>
    </generatorConfiguration>
  4. 运行 Mybatis Generator:通过 Maven 命令运行 Mybatis Generator 生成代码。在终端中执行以下命令:

    mvn mybatis-generator:generate -Dconfig=src/main/resources/generatorConfig.xml

通过以上步骤,可以成功安装并配置好 Mybatis Generator,开始自动生成代码。

Mybatis官方生成器的快速上手

下载与安装Mybatis Generator

Mybatis Generator (MBG) 是一个开源的代码生成工具,用于生成 Mybatis 所需的 Entity 对象、Mapper 接口和 XML 映射文件。MBG 依赖于 Java 和 Maven,因此在开始之前,需要确保已经安装了这些工具。

  1. 安装 Java 和 Maven:确保系统上已经安装了 Java 和 Maven。可以通过以下命令检查是否安装成功:

    java -version
    mvn -v
  2. 添加 MBG 依赖:在项目的 pom.xml 文件中添加 MBG 的依赖。例如:

    <dependencies>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
    </dependencies>
  3. 配置数据库连接信息:在项目的根目录下创建 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.dtd">
    <generatorConfiguration>
        <classPathEntry location="path/to/mysql-connector-java-8.0.26.jar"/>
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/mydb"
                            userId="root"
                            password="password"/>
            <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
            <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
            <table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
        </context>
    </generatorConfiguration>
  4. 运行 MBG:通过 Maven 命令运行 MBG 生成代码。在终端中执行以下命令:

    mvn mybatis-generator:generate -Dconfig=src/main/resources/generatorConfig.xml

通过以上步骤,可以成功下载和安装 Mybatis Generator,并生成所需的代码文件。

配置XML文件的基本步骤

在配置 generatorConfig.xml 文件时,需要设置数据库连接信息、生成代码的目标位置、目标包名等参数。以下是一些基本配置步骤:

  1. 配置数据库连接信息

    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/mydb"
                    userId="root"
                    password="password"/>

    该配置包含了数据库驱动类、连接 URL、用户名和密码。

  2. 配置 Java 模型生成器

    <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>

    targetPackage 是生成 Java 模型类的包名,targetProject 是生成 Java 类的目标项目路径。

  3. 配置 SQL 映射文件生成器

    <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>

    targetPackage 是生成 SQL 映射文件的包名,targetProject 是生成 SQL 映射文件的目标项目路径。

  4. 配置 Java 客户端生成器

    <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>

    type 是生成的映射器类型,targetPackage 是生成映射器接口的包名,targetProject 是生成映射器接口的目标项目路径。

  5. 配置表格生成参数

    <table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>

    tableName 是数据库表名,domainObjectName 是生成的 Java 类名,其他参数用于控制是否生成特定的接口。

通过以上配置步骤,可以生成与数据库表对应的 Java 模型类、SQL 映射文件和映射器接口。

使用Mybatis Generator生成代码示例

假设有一个数据库表 users,其结构如下:

Column Name Data Type Description
id INT 用户ID
username VARCHAR 用户名
password VARCHAR 密码
email VARCHAR 电子邮件

下面是配置文件 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.dtd">
<generatorConfiguration>
    <classPathEntry location="path/to/mysql-connector-java-8.0.26.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydb"
                        userId="root"
                        password="password"/>
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
        <table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

执行生成命令:

mvn mybatis-generator:generate -Dconfig=src/main/resources/generatorConfig.xml

生成过程完成后,自动生成的代码如下:

  1. Java 模型类:位于 src/main/java/com/example/model/User.java,内容如下:

    package com.example.model;
    
    public class User {
        private int id;
        private String username;
        private String password;
        private String email;
    
        // Getters and Setters
    }
  2. SQL 映射文件:位于 src/main/resources/com/example/mapper/UserMapper.xml,内容如下:

    <?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.UserMapper">
        <table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
        <!-- Generated SQL statements -->
    </mapper>
  3. 映射器接口:位于 src/main/java/com/example/mapper/UserMapper.java,内容如下:

    package com.example.mapper;
    
    import com.example.model.User;
    import org.apache.ibatis.annotations.Select;
    
    import java.util.List;
    
    public interface UserMapper {
        @Select("SELECT * FROM users WHERE id = #{id}")
        User selectUserById(int id);
    
        @Select("SELECT * FROM users")
        List<User> selectAllUsers();
    }

通过以上步骤,可以成功生成与数据库表对应的 Java 模型类、SQL 映射文件和映射器接口。

Mybatis官方生成器基本配置

基本配置参数介绍

Mybatis Generator 的配置文件 generatorConfig.xml 中有许多配置参数,下面是一些常用的配置参数:

  1. <context> 元素:定义代码生成的上下文环境。每个 <context> 元素可以包含多个表(<table>)的配置。

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- 配置项 -->
    </context>
  2. <commentGenerator> 元素:定义注释生成器,可以控制生成注释的格式和内容。

    <commentGenerator>
        <property name="suppressAllComments" value="true"/>
    </commentGenerator>
  3. <jdbcConnection> 元素:定义数据库连接信息,包括驱动类、连接 URL、用户名和密码。

    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/mydb"
                    userId="root"
                    password="password"/>
  4. <javaModelGenerator> 元素:定义 Java 模型类生成器,指定生成 Java 类的目标包和项目路径。

    <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
  5. <sqlMapGenerator> 元素:定义 SQL 映射文件生成器,指定生成 SQL 映射文件的目标包和项目路径。

    <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
  6. <javaClientGenerator> 元素:定义 Java 客户端生成器,指定生成映射器接口的目标包和项目路径。

    <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
  7. <table> 元素:定义数据库表的配置,包括表名、生成 Java 类的类名、生成的接口类型等。
    <table tableName="users" domainObjectName="User">
        <!-- 表配置 -->
    </table>

通过这些配置参数,可以精确控制生成的代码格式和内容。

输出目录与包名配置

在生成代码时,可以自定义输出目录和包名,使得生成的代码更加符合项目结构。以下是如何配置输出目录和包名的方法:

  1. 输出目录:输出目录指定了生成的 Java 文件和资源文件的位置。例如,Java 类的输出目录可以设置为 src/main/java,SQL 映射文件的输出目录可以设置为 src/main/resources

  2. 包名:包名指定了生成的 Java 类和接口的包名。例如,生成的 Java 类可以放在 com.example.model 包下,生成的接口可以放在 com.example.mapper 包下。

下面是配置文件 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.dtd">
<generatorConfiguration>
    <classPathEntry location="path/to/mysql-connector-java-8.0.26.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydb"
                        userId="root"
                        password="password"/>
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
        <table tableName="users" domainObjectName="User">
            <!-- 表配置 -->
        </table>
    </context>
</generatorConfiguration>

通过上述配置,可以将生成的 Java 类放在 src/main/java/com/example/model 目录下,将生成的 SQL 映射文件放在 src/main/resources/com/example/mapper 目录下,将生成的映射器接口放在 src/main/java/com/example/mapper 目录下。

模板与自定义配置文件的使用

在某些情况下,可能需要根据项目的特定需求自定义生成的代码格式。Mybatis Generator 支持使用模板文件来自定义生成的代码。以下是如何使用模板文件的方法:

  1. 模板文件:模板文件定义了生成代码的格式和内容。可以通过 <property> 元素自定义模板文件的位置和参数。

  2. 配置模板文件:在 generatorConfig.xml 文件中,可以通过 <property> 元素配置模板文件的位置和参数。

以下是配置文件 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.dtd">
<generatorConfiguration>
    <classPathEntry location="path/to/mysql-connector-java-8.0.26.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydb"
                        userId="root"
                        password="password"/>
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
        <table tableName="users" domainObjectName="User">
            <property name="useActualColumnNames" value="true"/>
        </table>
    </context>
</generatorConfiguration>

在上述配置中,<javaModelGenerator> 元素中的 <property> 元素用于配置 Java 模型类的生成格式,例如 enableSubPackagestrimStrings 参数。<table> 元素中的 <property> 元素用于配置特定表的生成格式,例如 useActualColumnNames 参数。

通过以上方式,可以使用模板文件来自定义生成的代码格式和内容,以满足项目的特定需求。

Mybatis官方生成器高级配置

使用注解进行配置

Mybatis Generator 支持使用注解来配置生成的代码。通过注解可以更灵活地控制生成的代码格式和内容。以下是使用注解配置的示例:

  1. 添加注解依赖:确保 pom.xml 文件中包含了 Mybatis Generator 注解处理器的依赖。

    <dependencies>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-annotations</artifactId>
            <version>1.4.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
  2. 使用注解配置表:在数据库表对应的 Java 类中使用注解来配置生成的代码。

    import org.mybatis.generator.annotations.Table;
    import org.mybatis.generator.annotations.Column;
    
    @Table(tableName = "users")
    public class User {
        @Column(columnName = "id")
        private int id;
        @Column(columnName = "username")
        private String username;
        @Column(columnName = "password")
        private String password;
        @Column(columnName = "email")
        private String email;
    
        // Getters and Setters
    }

通过上述配置,可以使用注解来控制生成的代码格式和内容,例如表名、列名等。

动态SQL的支持

Mybatis Generator 支持生成动态 SQL 语句,使得生成的代码更加灵活和强大。以下是生成动态 SQL 的示例:

  1. 配置 generatorConfig.xml 文件:在配置文件中启用动态 SQL 生成。

    <?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.dtd">
    <generatorConfiguration>
        <classPathEntry location="path/to/mysql-connector-java-8.0.26.jar"/>
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/mydb"
                            userId="root"
                            password="password"/>
            <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
            <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
            <table tableName="users" domainObjectName="User" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"/>
        </context>
    </generatorConfiguration>
  2. 生成动态 SQL:执行生成命令后,Mybatis Generator 将生成对应动态 SQL 语句的代码。

    mvn mybatis-generator:generate -Dconfig=src/main/resources/generatorConfig.xml

生成的代码示例如下:

  1. SQL 映射文件:生成的 SQL 映射文件中包含动态 SQL 语句。

    <?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.UserMapper">
        <select id="selectUsersByExample" resultType="com.example.model.User">
            SELECT *
            FROM users
            WHERE username LIKE #{username, jdbcType=VARCHAR, mode=IN}
        </select>
    </mapper>
  2. 映射器接口:生成的映射器接口中包含动态 SQL 方法。

    package com.example.mapper;
    
    import com.example.model.User;
    import org.apache.ibatis.annotations.Select;
    
    import java.util.List;
    
    public interface UserMapper {
        @Select("SELECT * FROM users WHERE username LIKE #{username}")
        List<User> selectUsersByExample(String username);
    }

通过以上配置,可以生成支持动态 SQL 语句的代码,使得生成的代码更加灵活和强大。

对象关系的生成配置

Mybatis Generator 支持生成复杂对象关系的代码,使得生成的代码更加符合实际项目的需求。以下是生成复杂对象关系代码的示例:

  1. 配置 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.dtd">
    <generatorConfiguration>
        <classPathEntry location="path/to/mysql-connector-java-8.0.26.jar"/>
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/mydb"
                            userId="root"
                            password="password"/>
            <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
            <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
            <table tableName="users" domainObjectName="User" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"/>
            <table tableName="orders" domainObjectName="Order" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
                <generatedKey column="id" sqlStatement="MySql" identity="true"/>
                <association javaType="com.example.model.User" property="user">
                    <joinColumn column="user_id" javaType="int"/>
                </association>
            </table>
        </context>
    </generatorConfiguration>
  2. 生成复杂对象关系的代码:执行生成命令后,Mybatis Generator 将生成包含对象关系的代码。

    mvn mybatis-generator:generate -Dconfig=src/main/resources/generatorConfig.xml

生成的代码示例如下:

  1. Java 模型类:生成的 Java 模型类中包含对象关系。

    package com.example.model;
    
    public class Order {
        private int id;
        private User user;
    
        // Getters and Setters
    }
  2. 映射器接口:生成的映射器接口中包含查询对象关系的方法。

    package com.example.mapper;
    
    import com.example.model.Order;
    import com.example.model.User;
    import org.apache.ibatis.annotations.Select;
    
    import java.util.List;
    
    public interface OrderMapper {
        @Select("SELECT * FROM orders WHERE user_id = #{userId}")
        List<Order> selectOrdersByUserId(int userId);
    }

通过以上配置,可以生成复杂对象关系的代码,使得生成的代码更加符合实际项目的需求。

Mybatis官方生成器的常见问题

常见错误及解决方法

在使用 Mybatis Generator 生成代码时,可能会遇到一些常见的错误,以下是几个常见的错误及解决方法:

  1. ClassNotFoundException:当运行 Mybatis Generator 时,可能会出现 ClassNotFoundException 错误,通常是因为缺少相关依赖。

    解决方法:确保 pom.xml 文件中包含了所有依赖。

    <dependencies>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
    </dependencies>
  2. IOException:当读取配置文件或生成代码时,可能会出现 IOException 错误。

    解决方法:检查配置文件的路径是否正确,确保文件可读。

  3. MyBatisGeneratorException:当配置文件格式不正确时,可能会出现 MyBatisGeneratorException 错误。

    解决方法:检查配置文件的格式,确保符合 Mybatis Generator 的规范。

  4. IllegalArgumentException:当参数类型不正确时,可能会出现 IllegalArgumentException 错误。

    解决方法:检查配置文件中的参数类型,确保参数类型正确。

生成的代码调试与优化

生成的代码可能会有一些默认的配置,这些配置可能不符合实际项目的需求。以下是一些调试和优化生成代码的方法:

  1. 调整生成的代码格式:通过配置文件中的参数,可以调整生成的代码格式。例如,可以通过 <property> 元素调整注释的生成。

    <commentGenerator>
        <property name="suppressAllComments" value="true"/>
    </commentGenerator>
  2. 自定义生成的代码:通过使用注解或模板文件,可以自定义生成的代码格式和内容。例如,可以在 Java 类中使用注解来调整生成的代码格式。

    import org.mybatis.generator.annotations.Table;
    import org.mybatis.generator.annotations.Column;
    
    @Table(tableName = "users")
    public class User {
        @Column(columnName = "id")
        private int id;
        @Column(columnName = "username")
        private String username;
        @Column(columnName = "password")
        private String password;
        @Column(columnName = "email")
        private String email;
    
        // Getters and Setters
    }
  3. 调试生成的代码:通过运行生成的代码,可以调试生成的代码是否符合预期。

    package com.example.mapper;
    
    import com.example.model.User;
    import org.apache.ibatis.annotations.Select;
    
    import java.util.List;
    
    public interface UserMapper {
        @Select("SELECT * FROM users WHERE id = #{id}")
        User selectUserById(int id);
    
        @Select("SELECT * FROM users")
        List<User> selectAllUsers();
    }

通过以上方法,可以调试和优化生成的代码,使其更加符合实际项目的需求。

与实际项目集成的注意事项

在实际项目中使用 Mybatis Generator 生成代码时,需要注意以下几点:

  1. 代码版本控制:生成的代码通常应放入版本控制系统(如 Git),以便跟踪代码变更和团队协作。

    git add src/main/java com/example/model/User.java
    git commit -m "Generate User model"
  2. 持续集成:可以将生成代码的步骤集成到持续集成(CI)流程中,确保生成的代码在每次代码变更时都是一致的。

    stages:
      - generate-code
    
    generate-code:
      stage: generate-code
      script:
        - mvn mybatis-generator:generate -Dconfig=src/main/resources/generatorConfig.xml
  3. 测试覆盖率:确保生成的代码有足够的测试覆盖率,以验证生成的代码是否正确。

    package com.example.mapper;
    
    import com.example.model.User;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.jupiter.api.Test;
    import org.mockito.Mockito;
    
    import java.util.List;
    
    import static org.junit.jupiter.api.Assertions.assertEquals;
    
    public class UserMapperTest {
        private SqlSession sqlSession = Mockito.mock(SqlSession.class);
        private UserMapper userMapper = new UserMapper(sqlSession);
    
        @Test
        public void shouldSelectUserById() {
            User user = new User();
            Mockito.when(sqlSession.selectOne(Mockito.eq("selectUserById"), Mockito.eq(1))).thenReturn(user);
            assertEquals(user, userMapper.selectUserById(1));
        }
    }
  4. 代码审查:确保生成的代码经过代码审查,以确保代码质量符合项目标准。

通过以上注意事项,可以确保生成的代码在实际项目中稳定、高质量地运行。

Mybatis官方生成器的实践案例

小型项目应用示例

通过一个简单的示例,来展示如何在实际项目中使用 Mybatis Generator 生成代码。假设一个简单的用户管理系统,包含用户表 users 和订单表 orders

  1. 数据库表结构

    • users 表:

      CREATE TABLE users (
          id INT PRIMARY KEY,
          username VARCHAR(50),
          password VARCHAR(50),
          email VARCHAR(100)
      );
    • orders 表:
      CREATE TABLE orders (
          id INT PRIMARY KEY,
          user_id INT,
          order_date DATE,
          FOREIGN KEY (user_id) REFERENCES users(id)
      );
  2. 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.dtd">
    <generatorConfiguration>
        <classPathEntry location="path/to/mysql-connector-java-8.0.26.jar"/>
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/mydb"
                            userId="root"
                            password="password"/>
            <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
            <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
            <table tableName="users" domainObjectName="User" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"/>
            <table tableName="orders" domainObjectName="Order" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
                <generatedKey column="id" sqlStatement="MySql" identity="true"/>
                <association javaType="com.example.model.User" property="user">
                    <joinColumn column="user_id" javaType="int"/>
                </association>
            </table>
        </context>
    </generatorConfiguration>
  3. 生成代码并调试

    • 运行生成命令:
      mvn mybatis-generator:generate -Dconfig=src/main/resources/generatorConfig.xml
    • 调试生成的代码:

      package com.example.mapper;
      
      import com.example.model.Order;
      import com.example.model.User;
      import org.apache.ibatis.annotations.Select;
      
      import java.util.List;
      
      public interface OrderMapper {
          @Select("SELECT * FROM orders WHERE user_id = #{userId}")
          List<Order> selectOrdersByUserId(int userId);
      }

通过以上步骤,可以成功生成并调试与实际项目需求匹配的代码。

代码生成的策略与最佳实践

在实际项目中,代码生成的策略和最佳实践如下:

  1. 版本控制:确保生成的代码版本控制在 Git 等版本控制系统中,以便跟踪代码变更和团队协作。

    git add src/main/java com/example/model/User.java
    git commit -m "Generate User model"
  2. 持续集成:将生成代码的步骤集成到持续集成(CI)流程中,确保每次代码变更时生成代码的一致性。

    stages:
      - generate-code
    
    generate-code:
      stage: generate-code
      script:
        - mvn mybatis-generator:generate -Dconfig=src/main/resources/generatorConfig.xml
  3. 代码审查:确保生成的代码经过代码审查,以验证代码质量是否符合项目标准。

    git pull origin master
    git add src/main/java com/example/model/User.java
    git commit -m "Update User model"
    git push origin master
  4. 测试覆盖率:确保生成的代码有足够的测试覆盖率,以保证生成的代码功能正确。

    package com.example.mapper;
    
    import com.example.model.User;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.jupiter.api.Test;
    import org.mockito.Mockito;
    
    import java.util.List;
    
    import static org.junit.jupiter.api.Assertions.assertEquals;
    
    public class UserMapperTest {
        private SqlSession sqlSession = Mockito.mock(SqlSession.class);
        private UserMapper userMapper = new UserMapper(sqlSession);
    
        @Test
        public void shouldSelectUserById() {
            User user = new User();
            Mockito.when(sqlSession.selectOne(Mockito.eq("selectUserById"), Mockito.eq(1))).thenReturn(user);
            assertEquals(user, userMapper.selectUserById(1));
        }
    }

Mybatis Generator与其他框架的集成

在实际项目中,Mybatis Generator 可以与其他框架集成,以提高开发效率。以下是与一些常见框架集成的示例:

  1. Spring Boot

    • pom.xml 文件中添加 Mybatis Generator 的依赖:
      <dependencies>
          <dependency>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-core</artifactId>
              <version>1.4.0</version>
              <scope>provided</scope>
          </dependency>
      </dependencies>
    • application.propertiesapplication.yml 文件中配置数据库连接信息:
      spring.datasource.url=jdbc:mysql://localhost:3306/mydb
      spring.datasource.username=root
      spring.datasource.password=password
      spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  2. Spring Data JPA

    • pom.xml 文件中添加 Mybatis Generator 的依赖:
      <dependencies>
          <dependency>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-core</artifactId>
              <version>1.4.0</version>
              <scope>provided</scope>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-data-jpa</artifactId>
          </dependency>
      </dependencies>
    • application.propertiesapplication.yml 文件中配置数据库连接信息:
      spring.datasource.url=jdbc:mysql://localhost:3306/mydb
      spring.datasource.username=root
      spring.datasource.password=password
      spring.datasource.driver-class-name=com.mysql.jdbc.Driver
      spring.jpa.hibernate.ddl-auto=update
  3. Spring Security
    • pom.xml 文件中添加 Mybatis Generator 的依赖:
      <dependencies>
          <dependency>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-core</artifactId>
              <version>1.4.0</version>
              <scope>provided</scope>
          </dependency>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-security</artifactId>
          </dependency>
      </dependencies>
    • application.propertiesapplication.yml 文件中配置数据库连接信息:
      spring.datasource.url=jdbc:mysql://localhost:3306/mydb
      spring.datasource.username=root
      spring.datasource.password=password
      spring.datasource.driver-class-name=com.mysql.jdbc.Driver

通过以上步骤,可以将 Mybatis Generator 与 Spring Boot、Spring Data JPA 和 Spring Security 等常见框架集成,提高开发效率。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消