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

Mybatis官方生成器教程:新手入门指南

标签:
Java SSM 数据库
概述

Mybatis Generator 是 MyBatis 官方提供的一个代码生成工具,它可以通过数据库表结构自动生成 MyBatis 映射文件和 Java 模型类,简化开发过程。本文详细介绍了 Mybatis Generator 的配置方法、使用场景以及常见问题的解决方案,帮助开发者快速上手。通过环境搭建、配置文件详解及实战演练,确保开发者能够高效利用 MyBatis Generator 提升开发效率。

Mybatis简介
Mybatis是什么

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

示例代码:Mapper XML

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectAll" resultType="com.example.model.User">
        SELECT * FROM user
    </select>
</mapper>
Mybatis的优势和应用场景

优势

  1. 灵活的SQL执行:MyBatis 允许在 XML 中编写 SQL,这提供了极大的灵活性。可以使用动态 SQL,根据运行时的条件动态构建 SQL 语句。
  2. 低侵入性:MyBatis 只负责 SQL 与 Java 对象之间的映射,不需要修改数据库的表结构或添加额外的字段,这使得 MyBatis 对现有系统进行集成和改造时尤为有用。
  3. 强大的映射支持:MyBatis 可以将 Java 对象映射到数据库表,包括一对一、多对多等复杂的映射关系。
  4. 良好的扩展性:MyBatis 提供了插件扩展点,允许用户根据需要添加自定义的功能。

应用场景

  1. 高性能需求:对于需要高性能的应用,MyBatis 提供了直接执行 SQL 的能力,允许开发者对 SQL 进行优化。
  2. 复杂的数据操作:MyBatis 支持动态 SQL 和存储过程,适用于需要处理复杂逻辑的应用。
  3. 轻量级应用:对于轻量级应用,MyBatis 的配置相对简单,不需要复杂的 ORM 框架支持。
  4. 混合技术栈:MyBatis 可以与其他框架(如 Spring)无缝集成,适用于混合技术栈的应用。
Mybatis官方生成器介绍
什么是Mybatis官方生成器

MyBatis Generator 是 MyBatis 官方提供的一个代码生成工具,它可以通过数据库表结构自动生成 MyBatis 映射文件(Mapper XML)和 Java 模型类。MyBatis Generator 旨在简化 MyBatis 开发过程,帮助开发者快速生成数据库访问层代码。

示例代码:配置文件

<generatorConfiguration>
    <context id="MybatisGenerator" targetRuntime="mybatis3" defaultModelType="flat">
        <property name="javaFileEncoding" value="UTF-8"/>
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydb"
                        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="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <table tableName="user" domainObjectName="User">
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>
官方生成器的作用和使用场景

作用

  1. 提高开发效率:MyBatis Generator 通过自动生成代码,减少了手动编写 SQL 和 Java 模型类的时间。
  2. 避免重复劳动:对于多个项目或表结构相似的数据库,使用 MyBatis Generator 可以避免重复编写相同的代码。
  3. 保持代码一致性:通过统一的代码生成规则,可以保持代码的一致性和规范性。

使用场景

  1. 新项目启动:在新项目启动时,可以使用 MyBatis Generator 生成初始的数据库访问层代码。
  2. 数据库表结构变更:当数据库表结构发生变更时,可以使用 MyBatis Generator 重新生成代码。
  3. 代码重构:在进行代码重构时,可以通过 MyBatis Generator 生成新的代码,替换旧的代码。
准备工作
安装环境配置
  1. JDK 安装:MyBatis Generator 需要 JDK 环境,确保已经安装并配置好 JDK。
  2. IDE 设置:推荐使用 IntelliJ IDEA 或 Eclipse 等集成开发环境,并配置好 Java 项目。
  3. 数据库配置:确保数据库服务器已经启动,并且可以访问到相关数据库。

示例代码:配置 JDK 和数据库连接

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>mybatis-generator</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <configurationFile>src/main/resources/mybatis-generator.xml</configurationFile>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
下载并引入Mybatis官方生成器依赖
  1. 下载并引入:通过 Maven 或 Gradle 下载 MyBatis Generator 依赖。
  2. 配置 Maven 或 Gradle:确保在构建文件中正确配置了 MyBatis Generator 依赖。

示例代码:配置 Maven 依赖

<dependencies>
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.21</version>
    </dependency>
</dependencies>
生成器的配置
配置文件详解

MyBatis Generator 的配置文件通常是一个 XML 文件,用于指定生成器的行为和输出路径。

示例代码:配置文件片段

<generatorConfiguration>
    <context id="MybatisGenerator" targetRuntime="mybatis3" defaultModelType="flat">
        <property name="javaFileEncoding" value="UTF-8"/>
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydb"
                        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="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <table tableName="user" domainObjectName="User">
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>
``

## 如何配置生成器输出目录和数据库信息

### 输出目录配置

- **Java 模型类目录**:`<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>`
- **SQL 映射文件目录**:`<sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>`
- **Java 客户端目录**:`<javaClientGenerator targetPackage="com.example.mapper" targetProject="src/main/java"/>`

### 数据库信息配置

- **数据库驱动**:`<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mydb" userId="root" password="password"/>`
- **数据库连接信息**:`connectionURL`、`userId`、`password`

### 示例代码:完整的配置文件
```xml
<generatorConfiguration>
    <context id="MybatisGenerator" targetRuntime="mybatis3" defaultModelType="flat">
        <property name="javaFileEncoding" value="UTF-8"/>
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydb"
                        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="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <table tableName="user" domainObjectName="User">
            <generatedKey column="id" sqlStatement="MySql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>
实战演练
生成Mybatis的映射文件(Mapper XML)

生成 MyBatis 的映射文件(Mapper XML)是 MyBatis Generator 的核心功能之一。通过配置文件,可以自动生成与数据库表对应的 SQL 映射文件。

示例代码:生成的 Mapper XML 文件片段

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectByPrimaryKey" resultType="com.example.model.User">
        SELECT
            id, username, password, email
        FROM
            user
        WHERE
            id = #{id,jdbcType=INTEGER}
    </select>

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

    <update id="updateByPrimaryKeySelective" parameterType="com.example.model.User">
        UPDATE
            user
        SET
            username = #{username,jdbcType=VARCHAR} ,
            password = #{password,jdbcType=VARCHAR} ,
            email = #{email,jdbcType=VARCHAR}
        WHERE
            id = #{id,jdbcType=INTEGER}
    </update>
</mapper>
生成Mybatis的实体类和DAO接口

MyBatis Generator 还可以生成 Java 实体类和 DAO 接口,进一步简化开发过程。

示例代码:生成的实体类

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

    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 getPassword() {
        return password;
    }

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

    public String getEmail() {
        return email;
    }

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

示例代码:生成的 DAO 接口

public interface UserMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(User record);

    User selectByPrimaryKey(Integer id);

    List<User> selectAll();

    int updateByPrimaryKeySelective(User record);
}
常见问题与解决方案
常见错误及解决方法

1. 缺少依赖

错误信息java.lang.NoClassDefFoundErrorjava.lang.ClassNotFoundException

解决方法:确保在 Maven 或 Gradle 配置文件中正确引入 MyBatis Generator 依赖。

2. 数据库连接失败

错误信息org.mybatis.generator.api.MyBatisGeneratorException: java.sql.SQLException: Could not retrieve database metadata

解决方法:检查数据库连接信息是否正确,确保数据库服务器已经启动并且可以访问。

3. 输出目录不存在

错误信息java.io.IOException: mkdirs failed

解决方法:确保输出目录存在,或者在配置文件中设置正确的输出目录。

4. 生成的代码与现有代码冲突

错误信息java.lang.RuntimeException: org.mybatis.generator.api.MyBatisGeneratorException

解决方法:在配置文件中设置 overwrite 属性为 true,或者手动删除冲突的文件。

生成器的一些高级配置和技巧

高级配置

  1. 使用注解:可以通过配置注解生成器来生成注解类。
  2. 自定义模板:可以通过配置自定义模板来自定义生成的代码内容。
  3. 多数据库支持:支持多种数据库,可以通过配置不同的 JDBC 驱动来支持不同的数据库。

技巧

  1. 使用插件:MyBatis Generator 支持插件扩展,可以通过插件来增加自定义的功能。
  2. 增量生成:可以在配置文件中设置增量生成选项,只生成有变更的部分。
  3. 生成注释:可以通过配置生成代码的注释,方便后期维护。

示例代码:配置注解生成器

<generatorConfiguration>
    <context id="MybatisGenerator" targetRuntime="mybatis3" defaultModelType="flat">
        ...
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
            <property name="enableAnnotationOverride" value="true"/>
        </javaModelGenerator>
        ...
    </context>
</generatorConfiguration>

示例代码:配置增量生成


<generatorConfiguration>
    <context id="MybatisGenerator" targetRuntime="mybatis3" defaultModelType="flat">
        ...
        <context>
            ...
            <property name="incremental" value="true"/>
        </context>
    </context>
</generatorConfiguration>
``

通过以上配置和技巧,可以充分利用 MyBatis Generator 的强大功能,提高开发效率,保证代码质量。
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消