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

Mybatis官方生成器资料详解与实战教程

标签:
Java SSM 数据库
概述

Mybatis官方生成器(Mybatis Generator)是一种强大的工具,用于自动生成Mybatis的Mapper接口、实体类和SQL映射文件,从而节省大量手动编写代码的时间。通过详细配置和插件扩展,Mybatis Generator可以灵活适应不同的项目需求,提高开发效率。本文将详细介绍Mybatis Generator的下载、配置、基本使用和高级功能。

Mybatis官方生成器详解与实战教程
Mybatis官方生成器简介

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

Mybatis官方生成器(Mybatis Generator)是一种强大的工具,用于自动生成Mybatis的Mapper接口、对应的实体类、以及SQL映射文件(XML)。通过利用Mybatis Generator,开发者可以节省大量时间,避免手动编写这些重复性的工作,从而专注于业务逻辑的实现。

Mybatis Generator的主要作用包括:

  1. 自动生成Mapper接口:基于数据库表结构自动生成Mybatis的Mapper接口,接口中包含常用的CRUD操作。
  2. 生成实体类:根据数据库表结构生成对应的Java实体类,实体类中包含表字段的属性和对应的getter和setter方法。
  3. 生成SQL映射文件:为每个Mapper接口生成对应的XML文件,文件中包含SQL语句的配置,包括增删改查等操作。

如何下载和引入Mybatis官方生成器插件

Mybatis Generator可以通过Maven仓库直接下载,以下是具体的下载和引入步骤:

  1. 在Maven项目中添加依赖:在项目的pom.xml文件中添加Mybatis Generator的依赖。
<dependencies>
  <dependency>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-core</artifactId>
      <version>1.4.0</version>
  </dependency>
</dependencies>
  1. 创建Mybatis Generator配置文件:创建一个XML配置文件(例如generatorConfig.xml),该文件用于配置Mybatis Generator的具体参数,包括数据库连接信息、生成的文件位置等。
<generatorConfiguration>
    <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="user"/>
    </context>
</generatorConfiguration>
  1. 执行Mybatis Generator:在项目中编写一个Java程序来调用Mybatis Generator生成代码。使用Maven插件或者通过Java类直接调用。

示例代码如下:

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Generator {
    public void generator() throws Exception {
        List<String> warnings = new ArrayList<>();
        boolean overwrite = true;
        File configFile = new File("generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
}

通过上述步骤,可以成功下载和引入Mybatis Generator插件,并配置好基本的生成器配置文件,为后续的代码生成做好准备。

Mybatis官方生成器的配置

配置文件详解

Mybatis Generator的配置文件(例如generatorConfig.xml)是其核心配置文件,它控制着Mybatis Generator的生成规则和生成内容。以下是对配置文件各个标签的详细解释:

  1. <generatorConfiguration>:这是配置文件的根标签,所有的配置项都包含在这个标签内。
  2. <context>:定义一个生成器上下文,可以定义多个上下文,每个上下文可以有不同的配置。id属性为上下文的唯一标识,targetRuntime属性指定生成的Mybatis版本。
  3. <commentGenerator>:配置生成注释的规则,例如是否生成注释、生成的注释内容等。
  4. <jdbcConnection>:配置数据库连接信息,包括驱动类、连接URL、用户名、密码等。
  5. <javaModelGenerator>:配置生成的Java实体类的生成规则,包括生成实体类的包名、生成实体类的位置等。
  6. <sqlMapGenerator>:配置生成的SQL映射文件的生成规则,包括生成SQL映射文件的包名、生成SQL映射文件的位置等。
  7. <javaClientGenerator>:配置生成的Mapper接口的生成规则,包括生成Mapper接口的包名、生成Mapper接口的位置等。
  8. <table>:定义需要生成代码的数据库表,可以配置表名、表注释、列名等。

示例配置文件如下:

<generatorConfiguration>
    <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="user"/>
    </context>
</generatorConfiguration>

常见配置项介绍

以下是一些常见配置项的介绍:

  1. <commentGenerator>

    • suppressAllComments:是否生成注释,默认为false,如果设置为true,则不生成任何注释。
  2. <jdbcConnection>
    • driverClass:数据库驱动类。
      .
  3. <javaModelGenerator>

    • targetPackage:生成的实体类的包名。
    • targetProject:生成实体类的位置,通常是src/main/java
  4. <sqlMapGenerator>

    • targetPackage:生成的SQL映射文件的包名。
    • targetProject:生成SQL映射文件的位置,通常是src/main/resources
  5. <javaClientGenerator>
    • type:生成的Mapper接口的类型,可以是ANNOTATEDMAPPER(注解形式)或XMLMAPPER(XML形式)。
    • targetPackage:生成的Mapper接口的包名。
      .
  6. <table>
    • tableName:数据库表的名称。
    • domainObjectName:生成的实体类的类名,默认为表名
    • enableCache:是否启用二级缓存。
    • useActualColumnNames:是否使用实际的列名。
    • delimitIdentifiers:是否使用引号包裹表名和列名。

通过配置文件中的这些标签,可以灵活控制Mybatis Generator生成代码的具体规则和内容,满足不同的项目需求。

Mybatis官方生成器的基本使用

生成Mapper接口

Mybatis Generator可以自动生成Mapper接口,这些接口通常对应数据库表的CRUD操作。生成的Mapper接口会包含以下方法:

  • selectByPrimaryKey(int id):根据主键查询记录。
  • insert(User record):插入一条记录。
  • updateByPrimaryKey(User record):根据主键更新记录。
  • deleteByPrimaryKey(int id):根据主键删除记录。

示例代码如下:

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectByPrimaryKey(Integer id);

    @Insert("INSERT INTO user (name, email, password) VALUES (#{name}, #{email}, #{password})")
    void insert(User user);

    @Update("UPDATE user SET name=#{name}, email=#{email}, password=#{password} WHERE id=#{id}")
    void updateByPrimaryKey(User user);

    @Delete("DELETE FROM user WHERE id=#{id}")
    void deleteByPrimaryKey(Integer id);
}

生成对应的实体类和SQL文件

Mybatis Generator可以根据数据库表结构自动生成对应的实体类和SQL文件。

实体类示例

假设数据库表结构如下:

CREATE TABLE user (
  id INT PRIMARY KEY,
  name VARCHAR(255),
  email VARCHAR(255),
  password VARCHAR(255)
);

生成的实体类(User.java)如下:

public class User {
    private int id;
    private String name;
    private String email;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int 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;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

SQL文件示例

生成的SQL映射文件(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">
    <select id="selectByPrimaryKey" resultType="com.example.model.User">
        SELECT
        id,
        name,
        email,
        password
        FROM user
        WHERE id = #{id}
    </select>
    <insert id="insert">
        INSERT INTO user (name, email, password)
        VALUES (#{name}, #{email}, #{password})
    </insert>
    <update id="updateByPrimaryKey">
        UPDATE user
        SET name=#{name}, email=#{email}, password=#{password}
        WHERE id=#{id}
    </update>
    <delete id="deleteByPrimaryKey">
        DELETE FROM user
        WHERE id=#{id}
    </delete>
</mapper>

通过上述配置,Mybatis Generator可以自动生成完整的Mapper接口、对应的实体类和SQL映射文件,为开发人员提供便捷的代码生成工具,从而提高开发效率。

Mybatis官方生成器的高级功能

自定义生成规则

Mybatis Generator允许用户自定义生成规则,以便更好地适应项目需求。下面介绍自定义生成规则的方法:

  1. 自定义实体类生成规则

    • 通过配置<javaModelGenerator>标签中的property属性,可以自定义实体类的生成规则。例如,可以设置实体类的包名、生成实体类的位置等。
  2. 自定义Mapper接口生成规则

    • 通过配置<javaClientGenerator>标签中的property属性,可以自定义Mapper接口的生成规则。例如,可以设置Mapper接口的包名、生成Mapper接口的位置等。
  3. 自定义SQL映射文件生成规则
    • 通过配置<sqlMapGenerator>标签中的property属性,可以自定义SQL映射文件的生成规则。例如,可以设置SQL映射文件的包名、生成SQL映射文件的位置等。

示例自定义配置文件:

<generatorConfiguration>
    <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"/>
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <table tableName="user"/>
    </context>
</generatorConfiguration>

插件的扩展与自定义

Mybatis Generator提供了强大的插件扩展功能,允许用户自定义生成逻辑。插件的扩展可以实现更复杂的功能,例如:

  1. 自定义注解生成

    • 可以通过自定义插件,在生成的实体类或Mapper接口中添加自定义注解。
  2. 自定义数据库字段处理

    • 可以通过自定义插件,对数据库字段进行特殊处理,例如生成特定的数据库字段的转换逻辑。
  3. 自定义实体类字段命名
    • 可以通过自定义插件,自定义实体类字段的命名规则,例如将数据库字段user_name转换为Java字段userName

示例插件代码:

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.Field;

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

    @Override
    public boolean modelFieldGenerated(Field field, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
        // 自定义字段命名规则
        String fieldName = introspectedColumn.getActualColumnName();
        if (fieldName.contains("_")) {
            fieldName = camelCase(fieldName);
        }
        field.setName(fieldName);

        return true;
    }

    private String camelCase(String str) {
        StringBuilder builder = new StringBuilder();
        String[] parts = str.split("_");
        for (String part : parts) {
            if (builder.length() == 0) {
                builder.append(part.toLowerCase());
            } else {
                builder.append(part.substring(0, 1).toUpperCase());
                builder.append(part.substring(1).toLowerCase());
            }
        }
        return builder.toString();
    }
}

通过上述插件,可以实现自定义字段命名规则,从而生成符合项目需求的实体类和Mapper接口。

Mybatis官方生成器实战案例

实战项目搭建

假设我们正在开发一个简单的用户管理系统,使用MySQL数据库存储用户信息。项目结构如下:

src
└───main
    ├───java
    │   └───com
    │       └───example
    │           └───model
    │               └───User.java
    └───resources
        └───mappers
            └───UserMapper.xml

配置文件示例

配置文件generatorConfig.xml如下:

<generatorConfiguration>
    <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"/>
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="com.example.mappers"
                         targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.mappers"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <table tableName="user"/>
    </context>
</generatorConfiguration>

生成代码的Java程序示例

在Java程序中调用Mybatis Generator生成代码:

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Generator {
    public void generator() throws Exception {
        List<String> warnings = new ArrayList<>();
        boolean overwrite = true;
        File configFile = new File("generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
}

通过上述配置和代码编写,可以轻松生成用户管理系统的Mapper接口、实体类和SQL映射文件。

常见问题及解决方案

1. 生成代码后找不到生成的文件

解决方案:

  • 确保generatorConfig.xml文件中的targetPackagetargetProject路径正确。
  • 确保Maven项目中已有相应的目录结构,例如src/main/javasrc/main/resources

2. 生成的代码报错

解决方案:

  • 检查数据库连接信息是否正确。
  • 确保数据库表结构和字段类型与生成器配置一致。
  • 如果生成的代码中出现错误,可以尝试清理旧的生成代码,重新生成。

3. 生成的实体类缺少某些字段

解决方案:

  • 检查数据库表结构,确保所有需要生成的字段都已包含在表中。
  • 检查generatorConfig.xml文件中的table标签配置,确保所有字段都被正确配置。

通过以上解决方案,可以解决生成代码过程中常见的问题。

总结与拓展阅读

Mybatis官方生成器的优缺点

优点

  • 节省时间:自动生成Mapper接口、实体类和SQL映射文件,减少了开发人员的手动编写时间。
  • 一致性:生成的代码遵守一定的规范,保证了代码的一致性。
  • 灵活性:通过配置文件和插件,可以灵活控制生成的代码规则,满足不同的项目需求。

缺点

  • 依赖性:Mybatis Generator依赖于数据库表结构,如果数据库表结构频繁更改,生成的代码需要相应调整。
  • 配置复杂:对于复杂的项目,配置文件和插件设置可能较为复杂,需要一定的学习成本。
  • 定制化:对于一些特殊需求,可能需要自定义插件,增加了开发的复杂度。

进阶学习方向与资源推荐

为了更好地掌握Mybatis Generator,可以深入学习以下内容:

  • 插件开发:了解如何开发自定义插件,以满足特定的需求。
  • 配置优化:学习如何优化配置文件,以提高生成代码的质量和效率。
  • 集成开发工具:将Mybatis Generator集成到IDEA或Eclipse等开发工具中,实现自动化生成代码。

推荐资源:

  • 慕课网:提供丰富的Mybatis Generator课程,帮助开发者深入了解和使用Mybatis Generator。例如,可以通过慕课网的官方视频教程学习Mybatis Generator的高级用法和插件开发。

通过不断学习和实践,可以提高使用Mybatis Generator的熟练度,从而更好地利用其功能提高开发效率。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消