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

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

标签:
SSM
概述

Mybatis Generator是一个强大的自动化工具,能够根据数据库表结构生成Mybatis所需的实体类、Mapper接口和对应的XML映射文件。使用它可以显著提高开发效率,减少手动编写基础代码的工作量。本文将详细介绍Mybatis Generator的作用、优势、安装步骤、配置方法以及高级用法,提供全面的mybatis官方生成器资料。

Mybatis生成器简介
Mybatis生成器的作用和优势

Mybatis Generator是一个强大的工具,它能够根据数据库表生成Mybatis的实体类、Mapper接口和对应的XML映射文件。使用Mybatis Generator可以极大地提高开发效率,尤其是在处理大量数据库表的时候。它的主要作用和优势如下:

  1. 自动化生成代码:Mybatis Generator可以自动识别数据库表结构并生成相应的Java实体类、Mapper接口、映射文件以及SQL语句。这直接减少了开发人员重复编写基础代码的工作量。
  2. 提高开发效率:通过自动生成代码,开发人员可以将更多精力放在业务逻辑的实现上,避免了手动编写大量模板代码。
  3. 保持代码一致性:自动生成的代码遵循一定的规范,有助于保持代码风格和结构的一致性。
  4. 易于维护:生成的代码结构清晰,易于理解和维护,便于团队协作。
Mybatis生成器适用场景

Mybatis Generator适用于以下场景:

  1. 大规模项目:当项目中涉及大量数据库表时,手动编写Mybatis所需的各种文件会非常繁琐,此时使用Mybatis Generator可以节省大量的开发时间。
  2. 快速原型开发:在快速原型开发阶段,通过Mybatis Generator可以快速搭建起基础的数据库操作层,使开发人员能够快速验证业务逻辑。
  3. 代码重构或迁移:当你需要将旧系统迁移至新的数据库表结构或需要重构现有代码时,Mybatis Generator可以快速生成新的代码,减少重构工作量。
  4. 团队协作:团队成员可以借助Mybatis Generator快速搭建起开发环境,确保每个人拥有相同的基础代码模板,方便协作开发。
Mybatis生成器安装与环境搭建
快速安装步骤

安装Mybatis Generator需要以下步骤:

  1. 添加Maven依赖:在你的项目pom.xml文件中添加Mybatis Generator的Maven依赖。
  2. 下载数据库驱动:下载并添加对应数据库的JDBC驱动到项目的lib目录。
  3. 配置生成器配置文件:创建generatorConfig.xml文件,并初始化配置。

Maven依赖

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.29</version>
    </dependency>
</dependencies>

下载数据库驱动

根据你使用的数据库下载相应的JDBC驱动,并将其放置到你的项目lib目录中。例如,对于MySQL数据库,可以使用如下命令下载:

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.29.tar.gz
tar -zxvf mysql-connector-java-8.0.29.tar.gz
cp mysql-connector-java-8.0.29/mysql-connector-java-8.0.29.jar ${YOUR_PROJECT_PATH}/lib/
搭建开发环境

开发环境搭建包括创建配置文件和初始化配置文件。下面是一个简单的generatorConfig.xml文件示例:

<generatorConfiguration>
    <classPathEntry location="${YOUR_PROJECT_PATH}/lib/mysql-connector-java-8.0.29.jar" />
    <context id="default" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <jdbcConnection driverType="MYSQL" 
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase" 
                        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="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

这段配置文件定义了数据库连接信息、生成代码的位置以及需要生成的表的信息。<jdbcConnection>标签定义了数据库连接的类型、URL、用户名和密码。<javaModelGenerator>标签定义了实体类的生成位置和包名。<sqlMapGenerator>标签定义了映射文件的生成位置和包名。<javaClientGenerator>标签定义了Mapper接口的生成位置和包名。<table>标签定义了需要生成的表名和对应的类名。

Mybatis生成器基础配置
配置文件说明

generatorConfig.xml配置文件是Mybatis Generator的核心配置文件。它定义了生成器生成代码的行为,如目标数据库、生成的Java文件位置等。

配置文件包含多个标签,以下是常用标签及其说明:

<generatorConfiguration>

  • id: 用来唯一标识一个配置文件。
  • targetRuntime: 指定生成的代码将兼容的目标Mybatis版本。常见的值有MyBatis3MyBatis3SimpleMyBatis3Simple表示生成的代码将使用@Select,@Insert等注解,而不使用XML配置文件。

<classPathEntry>

  • location: 指定数据库驱动的位置。

<jdbcConnection>

  • driverType: 数据库类型。例如MYSQLPOSTGRESQL等。
  • connectionURL, userId, password: 数据库连接信息。

<javaModelGenerator>

  • targetPackage: Java实体类生成的包名。
  • targetProject: Java实体类生成的项目路径。

<sqlMapGenerator>

  • targetPackage: SQL映射文件生成的包名。
  • targetProject: SQL映射文件生成的项目路径。

<javaClientGenerator>

  • type: Mapper接口的生成类型。例如ANNOTATEDMAPPER表示生成带有注解的Mapper接口,XMLMAPPER表示生成带有XML配置的Mapper接口。
  • targetPackage: Mapper接口生成的包名。
  • targetProject: Mapper接口生成的项目路径。

<table>

  • tableName: 数据库表名。
  • domainObjectName: 对应的实体类名称。
  • enableCountByExample, enableUpdateByExample, enableDeleteByExample, enableSelectByExample: 控制是否生成特定的示例查询。
常用配置项解析

<context>

  • id: 用来唯一标识一个配置文件。
  • targetRuntime: 指定生成的代码将兼容的目标Mybatis版本。常见的值有MyBatis3MyBatis3SimpleMyBatis3Simple表示生成的代码将使用@Select,@Insert等注解,而不使用XML配置文件。

<jdbcConnection>

  • driverType: 数据库类型。例如MYSQLPOSTGRESQL等。
  • connectionURL: 数据库连接URL。
  • userId: 数据库用户名。
  • password: 数据库密码。

<javaModelGenerator>

  • targetPackage: Java实体类生成的包名。
  • targetProject: Java实体类生成的项目路径。

<sqlMapGenerator>

  • targetPackage: SQL映射文件生成的包名。
  • targetProject: SQL映射文件生成的项目路径。

<javaClientGenerator>

  • type: Mapper接口的生成类型。例如ANNOTATEDMAPPER表示生成带有注解的Mapper接口,XMLMAPPER表示生成带有XML配置的Mapper接口。
  • targetPackage: Mapper接口生成的包名。
  • targetProject: Mapper接口生成的项目路径。

<table>

  • tableName: 数据库表名。
  • domainObjectName: 对应的实体类名称。
  • enableCountByExample, enableUpdateByExample, enableDeleteByExample, enableSelectByExample: 控制是否生成特定的示例查询。
  • useActualColumnNames: 如果设置为true,则生成的SQL语句中将使用实际的数据库列名,而不是字段名。
Mybatis生成器的使用方法
生成Mapper接口与XML文件

使用Mybatis Generator命令行工具来生成Mapper接口和对应的XML映射文件:

mvn mybatis-generator:generate

运行上述命令后,Mybatis Generator会根据配置文件生成Mapper接口和对应的XML映射文件。例如,生成的Mapper接口可能如下所示:

package com.example.mapper;

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

public interface UserMapper {
    int insertUser(User record);

    int insertSelective(User record);

    User selectUserByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}

生成的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="userResultMap" type="com.example.model.User">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="email" property="email" />
    </resultMap>

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

    <select id="selectUserByPrimaryKey" resultMap="userResultMap" parameterType="int">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <update id="updateByPrimaryKey" parameterType="com.example.model.User">
        UPDATE user
        SET name = #{name}, email = #{email}
        WHERE id = #{id}
    </update>
</mapper>
生成Entity类和DAO层代码

使用Mybatis Generator命令行工具来生成Entity类和DAO层代码:

mvn mybatis-generator:generate

运行上述命令后,Mybatis Generator会根据配置文件生成Entity类和DAO层代码。例如,生成的Entity类可能如下所示:

package com.example.model;

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

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

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

生成的Mapper接口可能如下所示:

package com.example.mapper;

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

public interface UserMapper {
    int insertUser(User record);

    int insertSelective(User record);

    User selectUserByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}

生成的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="userResultMap" type="com.example.model.User">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="email" property="email" />
    </resultMap>

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

    <select id="selectUserByPrimaryKey" resultMap="userResultMap" parameterType="int">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <update id="updateByPrimaryKey" parameterType="com.example.model.User">
        UPDATE user
        SET name = #{name}, email = #{email}
        WHERE id = #{id}
    </update>
</mapper>
Mybatis生成器的高级用法
自定义生成规则

Mybatis Generator允许你自定义生成规则以满足特定需求。例如,可以通过<columnOverride>标签来覆盖默认生成的列名或类型。下面是一个示例:

<generatorConfiguration>
    <classPathEntry location="${YOUR_PROJECT_PATH}/lib/mysql-connector-java-8.0.29.jar" />
    <context id="default" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <jdbcConnection driverType="MYSQL" 
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase" 
                        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="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
            <columnOverride column="email" javaType="java.lang.String"/>
        </table>
    </context>
</generatorConfiguration>

在这个例子中,<columnOverride>标签用于覆盖默认的email列的Java类型。javaType属性指定了列的Java类型。

扩展生成器插件

Mybatis Generator支持通过插件扩展其功能。例如,你可以编写自定义插件来生成特定的Mapper方法。这可以让你在默认生成的代码基础上添加更多自定义的功能。

创建自定义插件

你可以创建一个实现org.mybatis.generator.plugins.PluginAdapter接口的类,并重写其中的方法来实现自定义逻辑。例如,下面是一个简单的自定义插件示例:

package com.example.generator.plugin;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.TopLevelClass;

public class CustomPlugin extends PluginAdapter {
    @Override
    public boolean validate(List<String> warnings) {
        return true;
    }

    @Override
    public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        if (introspectedTable.getFullyQualifiedTableNameAtRuntime().equals("user")) {
            topLevelClass.addMethod(generateCustomMethod());
        }
        return true;
    }

    private Method generateCustomMethod() {
        Method method = new Method();
        method.setVisibility(JavaVisibility.PUBLIC);
        method.setName("customMethod");
        method.setReturnType(FullyQualifiedJavaType.getIntInstance());
        method.addParameter(new Parameter(FullyQualifiedJavaType.getIntInstance(), "id"));
        method.addBodyLine("return id * 2;");
        return method;
    }
}

在配置文件中启用插件

为了使自定义插件生效,需要在配置文件中启用它:

<generatorConfiguration>
    <classPathEntry location="${YOUR_PROJECT_PATH}/lib/mysql-connector-java-8.0.29.jar" />
    <context id="default" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <jdbcConnection driverType="MYSQL" 
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase" 
                        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"/>

        <plugin type="com.example.generator.plugin.CustomPlugin"/>

        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

在这个例子中,<plugin>标签指定了自定义插件类的全限定名。这样,Mybatis Generator会调用自定义插件中的方法来生成特定的Mapper方法。

常见问题与解决方案
常见错误及解决方法

在使用Mybatis Generator的过程中,可能会遇到一些常见的错误。下面是一些常见错误及其解决方法:

错误:数据库连接失败

错误信息: Could not get connection to the database

原因: 数据库连接信息配置错误,如数据库URL、用户名、密码等。

解决方案:

  1. 检查generatorConfig.xml文件中的<jdbcConnection>标签,确保数据库的连接URL、用户名和密码正确无误。
  2. 确保数据库服务已经启动,并且数据库URL、端口和用户名密码正确。
  3. 检查数据库驱动文件是否已经正确添加到项目中。

错误:表不存在

错误信息: Table XXX does not exist in database

原因: 配置文件中指定的表名与数据库中的表名不一致。

解决方案:

  1. 检查generatorConfig.xml文件中的<table>标签,确保表名正确。
  2. 如果表名中包含特殊字符或大小写敏感,确保在配置文件中正确使用。

错误:生成的代码不完整或不正确

错误信息: 生成的Mapper接口或SQL映射文件内容不完整或不正确。

原因: 配置文件中的某些配置项设置不正确,导致生成的代码不符合预期。

解决方案:

  1. 检查generatorConfig.xml文件中的配置项,确保它们正确设置。
  2. 使用mvn mybatis-generator:validate命令来验证配置文件是否有语法错误。
  3. 重新运行mvn mybatis-generator:generate命令,确保生成器能够正确生成代码。

错误:生成的代码类型错误

错误信息: 生成的字段类型与数据库中的字段类型不一致。

原因: 数据库字段类型与Java类型自动映射关系有误。

解决方案:

  1. 检查数据库中的字段类型,并在generatorConfig.xml文件中通过<columnOverride>标签来覆盖默认的类型映射。
  2. 重新运行生成器命令,确保自定义的类型映射生效。
使用中的注意事项

在使用Mybatis Generator时,需要注意以下几个方面:

  • 配置文件编写:确保配置文件中的配置项正确无误。特别是数据库连接信息、表名、生成代码的位置等。
  • 数据库驱动:确保已经正确下载并配置了数据库驱动。如果没有正确配置,生成器将无法正确连接到数据库。
  • 生成代码的一致性:自动生成的代码应遵循项目中的代码风格和规范。如果有特殊需求,可以通过插件来扩展生成器的功能。
  • 版本兼容性:确保生成器的版本与项目中的Mybatis版本兼容。Mybatis Generator的targetRuntime属性指定了生成代码的目标版本。
  • 代码维护:虽然生成器可以自动生成代码,但生成的代码仍然是项目的一部分,需要定期进行维护和更新。如果数据库结构发生变化,应及时更新配置文件并重新生成代码。
  • 测试生成的代码:生成的Mapper接口和SQL映射文件需要进行测试,确保它们能够正确地与数据库进行交互。
  • 代码整洁:生成的代码可能包含一些不必要的注释或空行,这可能会使代码看起来不够整洁。可以使用代码格式化工具来美化生成的代码。
  • 文档更新:如果项目中有详细的技术文档,确保文档中包含使用Mybatis Generator的信息,并且文档与代码保持一致。
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消