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

Mybatis官方生成器学习入门

概述

本文将引导你学习如何使用Mybatis官方生成器自动生成Mapper接口、Model类和XML映射文件,极大简化Mybatis的开发流程。我们将详细讲解环境搭建、配置文件编写以及生成器的使用方法,帮助你快速上手Mybatis官方生成器。此外,文章还提供了多个实践案例,帮助你更好地理解并应用生成器。通过学习,你将掌握Mybatis官方生成器学习入门的所有关键点。

Mybatis官方生成器学习入门
MyBatis简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJO 仅仅映射到数据库中的记录。

MyBatis的基本概念

MyBatis 主要由以下部分组成:

  • SqlSessionFactory:通过SqlSessionFactoryBuilder的构建方法创建。
  • SqlSession:通过SqlSessionFactory的openSession方法打开SqlSession会话。
  • Mapper 接口:定义了要执行的SQL语句。
  • XML 映射文件:配置了映射规则。

MyBatis与JDBC的区别

JDBC 是 Java 语言访问数据库的一种标准接口,它提供了一套访问数据库的 API。MyBatis 是对 JDBC 的封装和增强,通过它可以进行简单的属性和方法的映射,减少开发者对 SQL 语句的依赖,同时提供强大的功能支持。

区别如下:

  • SQL 执行:JDBC 中,SQL 语句需要由程序员手工编写和执行。而在 MyBatis 中,可以使用 XML 文件或注解的方式配置 SQL 语句。
  • 映射关系:MyBatis 提供了强大的映射功能,可以将数据库表和 Java 对象直接进行映射。
  • 事务处理:JDBC 需要手动处理事务,而 MyBatis 可以通过配置文件自动管理事务。
  • SQL 语句的预编译和执行:MyBatis 对 SQL 语句的预编译和执行进行了封装,减少了开发者的负担。
MyBatis官方生成器概述

官方生成器的作用

MyBatis 官方生成器(MyBatis Generator)的作用是自动生成 MyBatis 的 Mapper 接口、Model 类和 XML 映射文件。这极大地简化了 MyBatis 的开发流程,减少了手动编写这些文件的工作量。

官方生成器的主要功能

  • 自动生成 Mapper 接口:根据数据库表结构生成对应的 Mapper 接口。
  • 自动生成 Model 类:根据数据库表结构生成对应的 Java Bean。
  • 自动生成 XML 映射文件:自动生成 SQL 映射文件,映射数据库表中的字段和 Java Bean 的属性。
环境搭建

开发环境准备

要使用 MyBatis Generator,需要先搭建一个基本的 Java 开发环境。

  1. 安装 JDK:确保你的开发环境中已经安装了 JDK,并且配置好了环境变量。
  2. 安装 IDE:推荐使用 IntelliJ IDEA 或 Eclipse。这些 IDE 都支持 Maven 项目。
  3. 安装数据库:推荐使用 MySQL 或 Oracle 数据库。确保数据库服务器已经启动,并且可以访问。

Maven项目的配置

在 Maven 项目中使用 MyBatis Generator 需要进行以下配置:

  1. 添加依赖:在 pom.xml 文件中添加 MyBatis Generator 的依赖。
  2. 配置 MyBatis Generator:在 pom.xml 文件中配置 MyBatis Generator 的插件。
  3. 编写 MyBatis Generator 的配置文件:创建一个 XML 文件来配置 MyBatis Generator。

依赖配置

pom.xml 文件中添加如下依赖:

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>
</dependencies>

插件配置

pom.xml 文件中添加 MyBatis Generator 插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
                <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                <overwrite>true</overwrite>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.22</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

配置文件编写

创建一个 src/main/resources/generatorConfig.xml 文件,并编写 MyBatis Generator 的配置:

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <classPathEntry location="src/main/resources/mysql-connector-java-8.0.22.jar"/>
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/mydb"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            <property name="password" value="password"/>
            <property name="userId" value="root"/>
        </jdbcConnection>
        <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" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>
生成器的使用

配置文件详解

generatorConfig.xml 文件中,主要包含以下配置:

  • context:定义一个生成器上下文。
  • commentGenerator:配置注释生成器。
  • jdbcConnection:配置数据库连接信息。
  • javaModelGenerator:生成 Java 模型类。
  • sqlMapGenerator:生成 SQL 映射文件。
  • javaClientGenerator:生成 Java 客户端(Mapper 接口)。

示例配置

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/mydb"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            <property name="password" value="password"/>
            <property name="userId" value="root"/>
        </jdbcConnection>
        <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" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

自动生成Mapper、Model、XML等文件

运行 Maven 命令生成相关文件:

mvn mybatis-generator:generate

生成的文件结构如下:

  • src/main/java/com/example/model/User.java:生成的 Java 模型类。
  • src/main/java/com/example/mapper/UserMapper.java:生成的 Mapper 接口。
  • src/main/resources/com/example/mapper/UserMapper.xml:生成的 SQL 映射文件。
常见问题及解决方法

常见错误及解决方法

  1. 配置文件错误

    如果配置文件中路径设置错误,可能会导致生成器无法找到相应的资源。确保所有路径都是正确的。

  2. 数据库连接失败

    如果数据库连接失败,请检查数据库连接字符串、用户名、密码等配置是否正确。

  3. 生成器报错

    如果生成器报错,请检查生成器配置文件中的各个配置是否正确。

生成器的高级用法

  1. 自定义模板

    可以通过自定义模板来自定义生成的代码。

  2. 生成关联查询

    可以通过配置生成关联查询的 SQL 语句。

实践案例

简单的CRUD操作实践

案例描述

假设我们有一个 user 表,表结构如下:

CREATE TABLE `user` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(45) NULL,
    `age` INT NULL,
    PRIMARY KEY (`id`)
);

配置文件配置

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/mydb"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            <property name="password" value="password"/>
            <property name="userId" value="root"/>
        </jdbcConnection>
        <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" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

运行生成器

mvn mybatis-generator:generate

生成的文件结构如下:

  • User.java:生成的 Java 模型类。
  • UserMapper.java:生成的 Mapper 接口。
  • UserMapper.xml:生成的 SQL 映射文件。

编写测试代码

import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.io.InputStream;
import java.util.List;

public class UserMapperTest {

    private static final String RESOURCE_PATH = "SqlMapConfig.xml";

    @Test
    public void testSelectAll() throws Exception {
        // 读取配置文件
        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_PATH);
        // 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 创建 SqlSession
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // 获取 Mapper
            UserMapper mapper = session.getMapper(UserMapper.class);
            // 执行查询
            List<User> users = mapper.selectAll();
            // 断言
            Assertions.assertNotNull(users);
        }
    }
}

运行测试

运行测试代码,验证生成的 Mapper 是否能正常执行查询操作。

生成器在项目中的应用示例

案例描述

假设我们有一个简单的博客系统,包含 post 表和 comment 表。

表结构

CREATE TABLE `post` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(255) NULL,
    `content` TEXT NULL,
    PRIMARY KEY (`id`)
);

CREATE TABLE `comment` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `post_id` INT NOT NULL,
    `content` TEXT NULL,
    PRIMARY KEY (`id`),
    FOREIGN KEY (`post_id`) REFERENCES `post`(`id`)
);

配置文件配置

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/mydb"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            <property name="password" value="password"/>
            <property name="userId" value="root"/>
        </jdbcConnection>
        <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="post" domainObjectName="Post" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
        <table tableName="comment" domainObjectName="Comment" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

运行生成器

mvn mybatis-generator:generate

生成的文件结构如下:

  • Post.javaComment.java:生成的 Java 模型类。
  • PostMapper.javaCommentMapper.java:生成的 Mapper 接口。
  • PostMapper.xmlCommentMapper.xml:生成的 SQL 映射文件。

编写测试代码

import com.example.mapper.PostMapper;
import com.example.model.Post;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.io.InputStream;
import java.util.List;

public class PostMapperTest {

    private static final String RESOURCE_PATH = "SqlMapConfig.xml";

    @Test
    public void testSelectAll() throws Exception {
        // 读取配置文件
        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_PATH);
        // 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 创建 SqlSession
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // 获取 Mapper
            PostMapper mapper = session.getMapper(PostMapper.class);
            // 执行查询
            List<Post> posts = mapper.selectAll();
            // 断言
            Assertions.assertNotNull(posts);
        }
    }
}

运行测试

运行测试代码,验证生成的 Mapper 是否能正常执行查询操作。

通过以上实践,可以更好地理解 MyBatis 官方生成器的使用方法,并在实际项目开发中充分利用其优势。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消