手记

Mybatis官方生成器资料详解与入门指南

概述

MyBatis是一个优秀的持久层框架,提供了多种配置选项和强大的映射器接口,极大提高了开发效率。MyBatis官方生成器(MyBatis Generator)可以根据数据库表自动生成持久化类、Mapper接口和XML映射文件,进一步提升开发效率。该工具支持多种数据库和Java版本,并且可以生成符合项目需求的代码。mybatis官方生成器资料将帮助开发者更高效地进行数据库操作。

MyBatis简介
MyBatis是什么

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJO 传递给 SQL 语句。MyBatis 可以使用自定义的 SQL 语句进行数据操作,也可以使用存储过程,这使得开发人员可以对 SQL 语句有更精细的控制,从而提高了应用的灵活性和开发效率。

MyBatis的主要特点和优势

MyBatis 的主要特点和优势如下:

  1. 支持自定义 SQL 语句:开发人员可以根据需要编写任何 SQL 语句,如复杂的聚合操作、连接查询等。
  2. 支持存储过程:开发人员可以调用存储过程,这在复杂的业务逻辑处理中非常有用。
  3. 易于集成与扩展:MyBatis 可以轻松地与各种应用框架和库集成,如 Spring、Spring Boot 等。
  4. 丰富的配置选项:支持 XML 和注解两种配置方式,可以根据项目需求灵活配置。
  5. 通过代码生成器提高开发效率:MyBatis 提供了代码生成器,可以自动生成持久化类、Mapper 接口、XML 映射文件等。
  6. 支持延迟加载:可以配置某些字段或关联对象的延迟加载,提高系统性能。
  7. 支持类型别名、结果集映射和参数映射:这些功能简化了 SQL 语句的编写。
  8. 强大的映射器(Mapper)接口:可以定义复杂的映射关系,使得数据操作更加方便。

MyBatis的基本配置文件示例

下面是一个基本的 MyBatis 配置文件示例:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

通过以上特点和优势,MyBatis 为开发人员提供了灵活和强大的数据持久化功能,大大提高了开发效率和应用的灵活性。

MyBatis官方生成器概述
什么是MyBatis官方生成器

MyBatis 官方生成器(MyBatis Generator) 是一个强大的工具,它可以根据数据库表自动生成持久化类(POJO 类)、Mapper 接口和 XML 映射文件,极大提高了开发效率。该工具支持多种数据库,如 MySQL、Oracle、SQL Server、DB2 等,并且可以生成 Java 代码、SQL 语句、XML 文件等。

官方生成器的主要功能和好处

MyBatis Generator 的主要功能和好处如下:

  1. 自动生成持久化类:根据数据库表结构生成对应的 Java POJO 类,减少手动编写代码的工作量。
  2. 自动生成 Mapper 接口:生成接口定义,使得开发人员可以直接调用这些接口进行数据库操作。
  3. 自动生成 XML 映射文件:生成包含 SQL 语句的 XML 文件,简化了数据库操作的配置过程。
  4. 支持多种数据库:可以连接不同类型的数据库,如 MySQL、Oracle 等。
  5. 支持多种 Java 版本和 MyBatis 版本:可以根据项目需求生成不同版本的 Java 代码,兼容性良好。
  6. 自定义生成规则:开发人员可以根据需要自定义生成规则,如生成字段的类型、注释等。
  7. 支持多种输出选项:生成的代码可以输出到指定的文件目录,也可以输出为 jar 包或 war 包。
  8. 易于集成与扩展:可以集成到各种构建工具和持续集成系统中,如 Maven、Ant、Gradle 等。

MyBatis Generator的基本配置文件示例

下面是一个基本的 MyBatis Generator 配置文件示例:

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="false"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <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">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <javaClientGenerator type="ANNOTATEDMAPPER"
                            targetPackage="com.example.mapper"
                            targetProject="src/main/java">
        </javaClientGenerator>
    </context>
</generatorConfiguration>

通过以上功能和好处,MyBatis Generator 使开发人员能够更高效地进行数据库操作,减少了手动编写代码的时间和复杂性,从而提高了开发效率和应用的灵活性。

安装与环境配置
下载与安装MyBatis官方生成器插件

MyBatis Generator 可以通过 Maven 插件、Ant 任务或命令行工具进行安装和使用。以下是通过 Maven 插件安装 MyBatis Generator 的步骤:

  1. 添加 Maven 依赖:在项目的 pom.xml 文件中添加 MyBatis Generator 的依赖。具体如下:

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

    该配置将 MyBatis Generator 的核心库添加到项目依赖中。版本号可以根据实际需求进行调整。

  2. 配置 Maven 插件:在 pom.xml 文件中添加 MyBatis Generator 的 Maven 插件配置。具体如下:

    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
            </plugin>
        </plugins>
    </build>

    该配置将 MyBatis Generator 的 Maven 插件添加到项目构建过程中,可以在构建时执行生成器任务。

搭建开发环境

在安装 MyBatis Generator 插件后,需要搭建开发环境来进行代码生成。以下是环境搭建的步骤:

  1. 配置数据库连接信息:根据项目需求配置数据库连接信息。通常在生成器配置文件中指定这些信息。例如:

    <databaseConfiguration type="MYSQL">
        <connection>
            <driver>com.mysql.jdbc.Driver</driver>
            <url>jdbc:mysql://localhost:3306/mydatabase</url>
            <userId>root</userId>
            <password>password</password>
        </connection>
    </databaseConfiguration>

    上面的配置指定了数据库的驱动类、URL、用户名和密码。请根据实际情况填写正确的连接信息。

  2. 编写生成器配置文件:MyBatis Generator 配置文件通常是一个 XML 文件,用于定义生成器的配置信息。例如:

    <!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    <generatorConfiguration>
        <context id="DB2Tables" targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressAllComments" value="false"/>
            </commentGenerator>
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                            userId="root"
                            password="password">
            </jdbcConnection>
            <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">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
            <javaClientGenerator type="ANNOTATEDMAPPER"
                                targetPackage="com.example.mapper"
                                targetProject="src/main/java">
            </javaClientGenerator>
        </context>
    </generatorConfiguration>

    上述配置文件中定义了生成器的上下文(context),包括数据库连接信息、持久化类生成配置、SQL 映射文件生成配置和 Mapper 接口生成配置。

通过以上步骤,开发环境已经搭建完成,可以开始使用 MyBatis Generator 生成代码。

生成器的基本使用
生成器配置文件的编写

生成器配置文件通常是一个 XML 文件,用于定义生成器的配置信息。以下是配置文件的基本结构:

<!DOCTYPE generatorConfiguration
    PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="false"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <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">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <javaClientGenerator type="ANNOTATEDMAPPER"
                            targetPackage="com.example.mapper"
                            targetProject="src/main/java">
        </javaClientGenerator>
    </context>
</generatorConfiguration>

配置项解释

  • context:定义生成器的上下文环境。
  • id:生成器环境的唯一标识。
  • targetRuntime:指定生成代码的目标运行时环境,如 MyBatis3。
  • commentGenerator:配置注释生成器,用于生成注释。
  • jdbcConnection:配置数据库连接信息,包括驱动类、URL、用户名和密码。
  • javaModelGenerator:配置持久化类生成器,指定目标包和项目路径。
  • sqlMapGenerator:配置 SQL 映射文件生成器,指定目标包和项目路径。
  • javaClientGenerator:配置 Mapper 接口生成器,指定生成器类型(如 ANNOTATEDMAPPER)、目标包和项目路径。
生成持久化类与Mapper文件

根据生成器配置文件,MyBatis Generator 会根据指定的数据库表生成持久化类和 Mapper 文件。以下是生成持久化类和 Mapper 文件的步骤:

  1. 编写生成器配置文件:参考上文中的示例,编写生成器配置文件。
  2. 执行生成器命令:可以通过 Maven 插件、Ant 任务或命令行工具执行生成器命令。例如,使用 Maven 插件执行生成器命令:

    mvn mybatis-generator:generate

    执行上述命令后,MyBatis Generator 将根据配置文件生成持久化类和 Mapper 文件。生成的文件路径和文件名根据配置文件中的 targetPackage 和 targetProject 指定。

示例代码

假设有一个数据库表 user,包含以下字段:id(整数类型,主键)、username(字符串类型)、email(字符串类型)。

生成的持久化类(POJO 类)

生成器会根据表结构自动生成持久化类 User.java

package com.example.model;

import java.util.Date;

public class User {
    private Integer id;
    private String username;
    private String email;

    // Getter and Setter methods
    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

生成的 Mapper 接口

生成器会生成 Mapper 接口 UserMapper.java

package com.example.mapper;

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

public interface UserMapper {
    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table user
     */
    int deleteByPrimaryKey(Integer id);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table user
     */
    int insert(User record);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table user
     */
    User selectByPrimaryKey(Integer id);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table user
     */
    List<User> selectAll();

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table user
     */
    int updateByPrimaryKey(User record);
}

生成的 XML 映射文件

生成器会生成 XML 映射文件 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">
    <resultMap id="BaseResultMap" type="com.example.model.User">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="username" property="username" jdbcType="VARCHAR"/>
        <result column="email" property="email" jdbcType="VARCHAR"/>
    </resultMap>

    <sql id="Base_Column_List">
        id, username, email
    </sql>

    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
        SELECT
        <include refid="Base_Column_List"/>
        FROM user
        WHERE id = #{id,jdbcType=INTEGER}
    </select>

    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
        DELETE FROM user WHERE id = #{id,jdbcType=INTEGER}
    </delete>

    <insert id="insert" parameterType="com.example.model.User">
        INSERT INTO user (id, username, email)
        VALUES (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR})
    </insert>

    <select id="selectAll" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM user
    </select>

    <update id="updateByPrimaryKey" parameterType="com.example.model.User">
        UPDATE user
        SET username = #{username,jdbcType=VARCHAR}, email = #{email,jdbcType=VARCHAR}
        WHERE id = #{id,jdbcType=INTEGER}
    </update>
</mapper>

通过以上步骤,MyBatis Generator 已经生成了持久化类、Mapper 接口和 XML 映射文件,并且可以根据实际项目需求进行修改和扩展。

生成器的高级用法
自定义生成模板

MyBatis Generator 支持自定义生成模板,以便生成符合项目需求的代码。以下是自定义模板的基本步骤:

  1. 创建模板文件:在项目的 src/main/resources/templates 目录下创建模板文件,例如 User.java.vmUserMapper.java.vm。这些文件使用 Velocity 模板引擎语法。

    package ${package};
    
    public class ${entityName} {
        private Integer id;
        private String ${fieldName};
    
        // Getter and Setter methods
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public ${type} get${FieldName}() {
            return ${fieldName};
        }
    
        public void set${FieldName}(${type} ${fieldName}) {
            this.${fieldName} = ${fieldName};
        }
    }
  2. 配置生成器模板:在生成器配置文件中指定使用自定义模板。例如:

    <javaModelGenerator targetPackage="com.example.model"
                        targetProject="src/main/java">
        <property name="enableSubPackages" value="true"/>
        <property name="trimStrings" value="true"/>
        <property name="fileEncoding" value="UTF-8"/>
        <property name="override" value="true"/>
        <property name="templateLocation" value="src/main/resources/templates"/>
        <property name="fileTemplate" value="User.java.vm"/>
    </javaModelGenerator>

    该配置指定了自定义模板文件的位置和名称。

  3. 执行生成器命令:执行生成器命令后,生成器将使用自定义模板生成代码。

示例代码

假设有一个数据库表 user,包含以下字段:id(整数类型,主键)、username(字符串类型)、email(字符串类型)。

自定义持久化类模板(User.java.vm)

package ${package};

public class ${entityName} {
    private Integer id;
    private String username;
    private String email;

    // Getter and Setter methods
    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

自定义 Mapper 接口模板(UserMapper.java.vm)

package ${package};

import ${entityPackage}.${entityName};

import java.util.List;

public interface ${entityName}Mapper {
    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table ${tableName}
     */
    int deleteByPrimaryKey(${primaryKeyType} id);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table ${tableName}
     */
    int insert(${entityName} record);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table ${tableName}
     */
    ${entityName} selectByPrimaryKey(${primaryKeyType} id);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table ${tableName}
     */
    List<${entityName}> selectAll();

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table ${tableName}
     */
    int updateByPrimaryKey(${entityName} record);
}

通过以上步骤,可以自定义生成持久化类和 Mapper 接口模板,并生成符合项目需求的代码。

参数配置详解

生成器配置文件中包含多个参数配置,这些参数可以控制生成器的行为和输出结果。以下是常见参数配置的详细说明:

context 元素

  • id:生成器环境的唯一标识符。
  • targetRuntime:指定生成代码的目标运行时环境,如 MyBatis3。
  • overwrite:如果设置为 true,则生成器会覆盖已存在的文件。

commentGenerator 元素

  • suppressAllComments:如果设置为 true,则不生成注释。

jdbcConnection 元素

  • driverClass:数据库驱动类。
  • connectionURL:数据库连接 URL。
  • userId:数据库用户名。
  • password:数据库密码。

javaModelGenerator 元素

  • targetPackage:持久化类生成的目标包。
  • targetProject:持久化类生成的目标项目路径。
  • enableSubPackages:是否启用子包。
  • trimStrings:是否修剪字符串。

sqlMapGenerator 元素

  • targetPackage:SQL 映射文件生成的目标包。
  • targetProject:SQL 映射文件生成的目标项目路径。
  • enableSubPackages:是否启用子包。

javaClientGenerator 元素

  • type:生成的 Mapper 类型,如 ANNOTATEDMAPPER。
  • targetPackage:Mapper 接口生成的目标包。
  • targetProject:Mapper 接口生成的目标项目路径。
  • enableSubPackages:是否启用子包。

通过以上参数配置,可以灵活控制生成器的行为和输出结果,以适应不同的项目需求。

常见问题与解决方法
常见问题汇总
  1. 生成器生成的代码版本不兼容:生成器生成的代码可能与项目中的 MyBatis 版本不兼容。
  2. 生成器生成的代码不符合项目编码规范:生成器生成的代码可能不符合项目的编码规范。
  3. 生成器生成的代码存在错误:生成器生成的代码可能包含错误,如语法错误或逻辑错误。
  4. 生成器生成的代码与现有代码冲突:生成器生成的代码可能与现有的代码存在冲突,导致运行时错误。
  5. 生成器生成的代码无法编译通过:生成器生成的代码可能无法通过编译,导致编译错误。
  6. 生成器生成的代码无法运行:生成器生成的代码可能无法运行,导致运行时错误。
  7. 生成器生成的代码不符合项目需求:生成器生成的代码可能不符合项目的具体需求,需要手动修改代码。
  8. 生成器生成的代码存在性能问题:生成器生成的代码可能存在性能问题,如查询效率低或内存占用大。
解决方案与技巧分享
  1. 检查 MyBatis 版本兼容性:确保生成器生成的代码与项目中的 MyBatis 版本兼容性。可以通过修改生成器配置文件中的 targetRuntime 参数来指定兼容的 MyBatis 版本。
  2. 自定义生成模板:通过自定义生成模板来满足项目的编码规范。可以参考自定义生成模板部分,创建符合项目编码规范的模板文件。
  3. 手动修改生成代码:如果生成器生成的代码存在错误或不符合项目需求,可以手动修改生成的代码。建议在生成器配置中启用覆盖已存在的文件,以便后续生成新代码时自动替换旧代码。
  4. 使用 Maven 插件或命令行工具:通过 Maven 插件或命令行工具执行生成器命令,可以在构建过程中自动执行生成代码的操作。可以通过构建工具的插件配置来执行生成器命令。
  5. 配置生成器参数:根据项目的具体需求,配置生成器参数,如持久化类生成包、Mapper 接口生成包等。可以在生成器配置文件中指定这些参数。
  6. 监控生成代码的性能:在生成代码后,通过性能测试工具监控生成代码的性能。如果发现性能问题,可以通过优化生成模板或手动修改生成代码来提高性能。
  7. 持续优化生成代码:根据项目的实际需求和反馈,持续优化生成代码。可以通过调整生成器配置或自定义模板来改善生成代码的质量和性能。
  8. 使用注释和文档:在生成器生成的代码中添加适当的注释和文档,可以帮助开发人员更好地理解和维护生成的代码。

通过以上解决方案和技巧分享,可以有效解决 MyBatis Generator 在实际应用中遇到的问题,提高代码生成的质量和效率。

0人推荐
随时随地看视频
慕课网APP